Gpu视频传输

本文介绍了使用Java进行视频传输的步骤,包括通过OpenCV获取摄像头图像,转化为可传输数据,利用UDP协议进行发送和接收,最后在接收端还原图像展示视频。

视频传输

我用的是Java
开始的时候是没有想法的,后面发现只要慢慢来,找对方法还是可行的.
先设计思路.
a: 视频的话, 先要获得在摄像头前我们的图片,并且把它传输到电脑中. 注意: 要不断的获取.
b:将图片转化为可传输的数据. 通过协议到达对方机器中
c:对方接收数据, 将图片还原成图片.

首先考虑如何获得图片?
要使用到其他包OPENCV

//首先创建界面
public void Ui(){
	JFrame jf = new JFrame();
	jf.setSize(1000,600);
	jf.setDefaultCloseOperation(3);
	jf.setLocationRelativeTo(null);
	jf.setVisible(true);
	g0 = jf.getGraphics();
	g1 = jf.getGraphics();
	//地址创立
	servesocket = new  DatagramSocket(port1);
	sendAddr = InetAddress.getByName("对方的地址");
	sendsocket = new DatagramSocket(port0);
}

Graphics g0,g1;
//获得图片
public void videoRun() throws Exception {
		//抓起图片
		OpenCVFrameGrabber grabber0 = new OpenCVFrameGrabber(0);
		grabber0.start();
		//创建转换器
		Java2DFrameConverter converter = new Java2DFrameConverter();
		//线程,因为接受和发送是同时进行的
		new Thread() {
			public void run() {
				while (true) {
				BufferedImage img = null;
				try {
				//将抓起的视频界面转换为图片
					img = converter.getBufferedImage(grabber0.grabFrame());
				} catch (Exception e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
					//将视频在自己界面播放
					g0.drawImage(img, 0, 0, jp2.getWidth(), jp2.getHeight(), null);
					try {
					//用流来传输,将图片转化为数据
							ImageIO.write(img, "jpg", outStream);
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
					//转化为数据
					byte[] buffer = outStream.toByteArray();
					发送数据
					send(buffer);			
					try {
						new Thread().sleep(15);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
	
				}
			}
		}.start();
	}

b: 接下来是发送图片给对方

	private DatagramSocket sendsocket;
	private InetAddress sendAddr;
	private int port0 = 13000;
	private int port1 = 14000;	
	public void send(byte[] buffer) 
	{	
		DatagramPacket packet = new DatagramPacket(buffer, buffer.length,sendAddr, port1);
		try {
			sendsocket.setSendBufferSize(buffer.length );
			sendsocket.send(packet);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

c:接下来便是接受对方传过来的信息了
接受分为三个部分.接受信息,处理数据,展现视频

public void operate0(byte[] byte0) 
	{			
			ByteArrayInputStream inStream = new ByteArrayInputStream(byte0);
			BufferedImage img1;
			try {
				img1 = ImageIO.read(inStream);
				g1.drawImage(img1, 0, 0	, jp1.getWidth(), jp1.getHeight(), null);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
 // 接受信息
	/**创立接收端口   
	 * 接受数据()  创立缓存包,接受长度,
	 * 处理数据
	 */
	DatagramSocket servesocket;
	private int port2;
	public void receive() throws SocketException 
	{
		new Thread(){
			public void run(){
				while(true){
		byte[] byte0 = null;
		try {
		//接受对方传递数据的字节长度
			byte0 = new byte[servesocket.getReceiveBufferSize()];
		} catch (SocketException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		//创建缓存包
		DatagramPacket data = new DatagramPacket(byte0, byte0.length);
		//3
		try {
		//接受数据
			servesocket.receive(data);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//处理数据
		operate0(byte0);
		//获取对方的端口,同样你还能获得其他的信息
		port2 = data.getPort();}}
		}.start();
	}
	
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值