📄 device.java
字号:
import java.util.*;
import java.net.*;
import java.lang.reflect.Method;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.media.*;
import javax.media.util.*;
import javax.media.format.*;
import javax.media.control.*;
import javax.media.protocol.*;
import javax.media.bean.playerbean.*;
import javax.media.rtp.*;
import javax.media.rtp.event.*;
import com.sun.media.util.JMFI18N;
import com.sun.media.rtp.RTPSessionMgr;
import jmapps.ui.*;
import jmapps.util.*;
import jmapps.rtp.*;
import jmapps.jmstudio.*;
public class device extends Frame implements ControllerListener, ActionListener
{
String filename;
JMAppsCfg cfgJMApps = null;
DataSource dataSource=null;
MediaPlayer mediaPlayer=null;
RTPManager rtpMgrs[]=null;
PushBufferStream pbss[] = null;
int portBase=8800; // 传输端口号
Processor processor = null;
public device(String s1)
{
super(s1);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent we)
{
dispose();
System.exit(0);
}
});
MenuBar mb = new MenuBar();
setMenuBar(mb);
Menu fileMenu = new Menu("File");
mb.add(fileMenu);
MenuItem itemPlay = new MenuItem("capture");
itemPlay.addActionListener(this);
fileMenu.add(itemPlay);
fileMenu.addSeparator();
MenuItem itemPlay1 = new MenuItem("sendmedia");
itemPlay1.addActionListener(this);
fileMenu.add(itemPlay1);
}
public synchronized void controllerUpdate(ControllerEvent event)
{
System.out.println("Event: " + event);
if (event instanceof RealizeCompleteEvent)
{
Component comp;
if ((comp = mediaPlayer.getVisualComponent()) != null)
{
add("Center", comp);
}else
System.out.println("Unable to get visual component");
validate();
}
}
public void actionPerformed(ActionEvent ae)
{
String action = ae.getActionCommand().toString();
if (action.equals("capture"))
{
play();
}
else if (action.equals("sendmedia"))
{
send();
}
}
void play(){
CaptureDialog dialogCapture=null;
CaptureDeviceInfo cdi=null;
CaptureControlsDialog dlgCaptureControls=null;
String nameCaptureDeviceVideo="";
String nameCaptureDeviceAudio="";
dialogCapture = new CaptureDialog ( this, cfgJMApps);
dialogCapture.show ();
if (dialogCapture.getAction() == CaptureDialog.ACTION_CANCEL)
return;
cdi = dialogCapture.getAudioDevice();
if ( cdi != null&&dialogCapture.isAudioDeviceUsed())
nameCaptureDeviceAudio = cdi.getName();
cdi = dialogCapture.getVideoDevice();
if ( cdi != null&&dialogCapture.isVideoDeviceUsed())
nameCaptureDeviceVideo = cdi.getName();
dataSource = JMFUtils.createCaptureDataSource ( nameCaptureDeviceAudio,dialogCapture.getAudioFormat(),nameCaptureDeviceVideo,dialogCapture.getVideoFormat());
if (dataSource != null){
if (dataSource instanceof CaptureDevice&&dataSource instanceof PushBufferDataSource) {
DataSource cdswrapper = new CDSWrapper((PushBufferDataSource)dataSource);
dataSource = cdswrapper;
try {
cdswrapper.connect();
}
catch (IOException ioe) {
dataSource = null;
nameCaptureDeviceAudio = null;
nameCaptureDeviceVideo = null;
MessageDialog.createErrorDialog ( this,JMFI18N.getResource("jmstudio.error.captureds") );
}
}
mediaPlayer = jmapps.util.JMFUtils.createMediaPlayer ( dataSource, (Frame)this );
open ( mediaPlayer, true );
if ( dataSource != null ) {
dlgCaptureControls = new CaptureControlsDialog (this, dataSource );
if ( dlgCaptureControls.isEmpty() ) {
dlgCaptureControls = null;
}
else {
// dlgCaptureControls.setVisible ( true );
}
}
}
else {
nameCaptureDeviceAudio = null;
nameCaptureDeviceVideo = null;
MessageDialog.createErrorDialog ( this,
JMFI18N.getResource("jmstudio.error.captureds") );
}
}
public boolean open ( MediaPlayer mediaPlayer, boolean killPrevious ) {
if ( mediaPlayer == null )
return ( false );
mediaPlayer.setPopupActive ( false );
mediaPlayer.setControlPanelVisible ( false );
mediaPlayer.addControllerListener ( this );
mediaPlayer.realize();
mediaPlayer.start();
return ( true );
}
public boolean send(){
String ipAddress="202.119.205.118";
if (dataSource == null)
return false;
else{
PushBufferDataSource pbds = (PushBufferDataSource)dataSource;
//processor = javax.media.Manager.createProcessor(dataSource);
//dataSource = processor.getDataOutput(); // 从处理器得到输出的数据源
pbss=pbds.getStreams();
rtpMgrs = new RTPManager[pbss.length]; // 为每个磁道产生一个RTP会话管理器
for (int i = 0; i < pbss.length; i++) {
try {
rtpMgrs[i] = RTPManager.newInstance();
int port = portBase + 2*i; // 每增加一个磁道,端口号加2
InetAddress ipAddr = InetAddress.getByName(ipAddress); // 得到发送目的地的IP地址
SessionAddress localAddr = new SessionAddress( InetAddress.getLocalHost(),port); // 得到本机的会话地址
// 这里传输端使用和接收目的端相同的端口号(实际上也可以不同)
SessionAddress destAddr = new SessionAddress( ipAddr, port); // 得到目的机器(接收端)的会话地址
rtpMgrs[i].initialize( localAddr); // 将本机会话地址传给RTP管理器
rtpMgrs[i].addTarget( destAddr); // 加入目的会话地址
System.err.println( "Created RTP session: " + ipAddress + " " + port);
SendStream sendStream = rtpMgrs[i].createSendStream(dataSource, i); // 产生数据源的RTP传输流
sendStream.start(); // 开始RTP数据流发送
}
catch (Exception e) {
return false;
}
}
return true;}
}
public static void main(String [] a){
device mvp = new device("MinimalVideoPlayer");
mvp.show();
mvp.setSize(250,250);
mvp.setLocation(250,300);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -