视频传输,代码报错,高手进来看看(进来的都给分,不够再加)

luck_529 2007-04-23 05:02:05
/****用jmf ***/
程序如下:



/***************************************************
* 程序文件名称: VAplay.java

* 功能:处理视频图像捕获和音频播放

***************************************************/

import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import java.net.*;
import javax.imageio.*;
import javax.swing.*;
import javax.media.*;
import javax.media.protocol.*;
import javax.media.control.*;
import javax.media.util.*;
import javax.media.format.*;
import com.sun.image.codec.jpeg.*;


class VAplay extends JFrame implements Runnable

{

//定义视频图像播放器

private static Player player = null;

//定义音频播放器

private static Player player2 = null;

//获取视频设备

private CaptureDeviceInfo device = null;

//获取音频设备

private CaptureDeviceInfo device2 = null;

//媒体定位器

private MediaLocator locator = null;

private Image image;

private Buffer buffer = null;

private BufferToImage b2i = null;

//设置摄像头驱动类型

String str = "vfw:Microsoft WDM Image Capture (Win32):0";

//定义播放组件变量

Component comV, comVC, comA;

//定义面板

JPanel p1, p2, p3, p4;

JLabel label = new JLabel("对方IP:");

//初始时,在接收图像窗口显示一幅静态图片

JLabel label2 = new JLabel(new ImageIcon("image//load.gif"));

//定义二个线程,用于接收数据和发送数据

Thread thread1, thread2;


VAplay()

{

super("★视频传输★");

setBounds(150, 100, 500, 500);

p1 = new JPanel(new GridLayout(1, 2)); //(int rows, int cols) 创建具有指定行数和列数的网格布局

p2 = new JPanel(new GridLayout(2, 1));

p3 = new JPanel(new BorderLayout());

p4 = new JPanel(new BorderLayout());

//加载文本数据传输类

p1.add(new TxtChat());

p1.add(p2);

p2.add(p3);

p2.add(p4);

p3.add("North", new JLabel("Java视频图像传输"));

p3.add(label2, "Center");

add(label, "North");

add(p1, "Center");

try

{

//在本地播放视频

jbInit();

//在本地播放音频

speaker();

}

catch (Exception e)

{

e.printStackTrace();

}

thread1 = new Thread(this);

thread2 = new Thread(this);

//负责接收对方数据

thread1.start();

//负责向对方发送数据

thread2.start();

addWindowListener(new WindowAdapter()

{

public void windowClosing(WindowEvent e)

{

System.exit(0);

}

});

setVisible(true);

validate();

}


//在本地播放视频

private void jbInit() throws Exception

{

//初始化设备,str为设备驱动

device = CaptureDeviceManager.getDevice(str);

//确定所需的协议和媒体资源的位置

locator = device.getLocator();

try

{

//调用sethint后Manager会尽力用一个能和轻量级组件混合使用的Renderer来创建播放器

Manager.setHint(Manager.LIGHTWEIGHT_RENDERER, new Boolean(true));

//通过管理器创建播放线程使player达到Realized状态

player = Manager.createRealizedPlayer(locator);

player.start();

if ((comV = player.getVisualComponent()) != null)
//player.getVisualComponent()是一个播放视频媒体组件。

{

p4.add(comV, "Center");

}

if ((comVC = player.getControlPanelComponent()) != null)
//player.getControlPanelComponent()是显示时间的组件

{

p4.add(comVC, "South");

}

}

catch (Exception e)

{

e.printStackTrace();

}

setBounds(200, 100, 600, 550);

setVisible(true);

int new_w = p4.getWidth(); //输出的图像宽度

int new_h = p4.getHeight(); //输出的图像高度

//MediaTracker类跟踪一个Image对象的装载,完成图像加载

MediaTracker mt = new MediaTracker(this.p4);

try

{

mt.addImage(image, 0); //装载图像

mt.waitForID(0); //等待图像全部装载

}

catch (Exception e)

{

e.printStackTrace();

}

//将图像信息写入缓冲区

BufferedImage buffImg = new BufferedImage(new_w, new_h,
BufferedImage.TYPE_INT_RGB);

Graphics g = buffImg.createGraphics();

g.drawImage(image, 0, 0, new_w, new_h, this.p4);

g.dispose();

}


//在本地播放音频

private void speaker() throws Exception

{

Vector deviceList = CaptureDeviceManager.getDeviceList(new

AudioFormat(AudioFormat.LINEAR, 44100, 16, 2));

if (deviceList.size() > 0)

{

device2 = (CaptureDeviceInfo) deviceList.firstElement();

}

else

{

System.out.println("找不到音频设备!");

}

try

{

player2 = Manager.createRealizedPlayer(device2.getLocator());

player2.start();

if ((comA = player2.getControlPanelComponent()) != null)

{

p3.add(comA, "South");

}

}

catch (Exception e)

{

e.printStackTrace();

}

}


//线程,接收或发送视频图像数据

public void run()

{

DatagramPacket pack = null;

DatagramSocket maildata = null;

byte data[] = new byte[320 * 240];

try

{

...全文
699 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
silver_zhao 2007-05-31
  • 打赏
  • 举报
回复
沙发
cnoys 2007-05-24
  • 打赏
  • 举报
回复
学习
OnJava 2007-05-24
  • 打赏
  • 举报
回复
狂顶````````
Cappuccino_mhc 2007-05-24
  • 打赏
  • 举报
回复
嗷嗷想学
顶起来
juminson 2007-05-23
  • 打赏
  • 举报
回复
jie fen de !
strawbingo 2007-05-23
  • 打赏
  • 举报
回复
楼主好厉害
allenblade 2007-05-23
  • 打赏
  • 举报
回复
顶一个,学习下
lover_cxy2005 2007-05-23
  • 打赏
  • 举报
回复
学习 学习
gf1025 2007-05-23
  • 打赏
  • 举报
回复
学习中。。。。。。
zymaxs 2007-05-23
  • 打赏
  • 举报
回复
为什么不用jmf自带的方法发送啊?
Cappuccino_mhc 2007-05-23
  • 打赏
  • 举报
回复
要沉了
改好没?
再顶起来
学习
zjwcgy 2007-05-23
  • 打赏
  • 举报
回复
我也在做 我现在就是不能把播放中的媒体流保存为QUICKTIME格式的文件
luck_529 2007-04-26
  • 打赏
  • 举报
回复
再UP
summerice110 2007-04-25
  • 打赏
  • 举报
回复
up
kld208 2007-04-25
  • 打赏
  • 举报
回复
UP 学习!!
Cappuccino_mhc 2007-04-25
  • 打赏
  • 举报
回复
我帮你再up下吧
我也很想学习java的视频
luck_529 2007-04-25
  • 打赏
  • 举报
回复
UP上去..没有人来...

  • 打赏
  • 举报
回复
好像是散分帖
adoxcy 2007-04-24
  • 打赏
  • 举报
回复
Do not use spcs.VAplay.add() use spcs.VAplay.getContentPane().add() instead
你的spcs.VAplay.add()方法是错误的,应该先获得容器面板再调用add() ,如下:spcs.VAplay.getContentPane().add()
luck_529 2007-04-24
  • 打赏
  • 举报
回复
java.lang.NullPointerException

at spcs.VAplay.jbInit(VAplay.java:180)

at spcs.VAplay.<init>(VAplay.java:119)

at spcs.VAplay.main(VAplay.java:491)

java.lang.NullPointerException

at spcs.VAplay.run(VAplay.java:416)

at java.lang.Thread.run(Thread.java:536)
加载更多回复(13)

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧