借助JavaCV实现android手机查看PC摄像头实时视频

查看PC实时摄像头视频,其实就是以大于24次/秒的速度,控制PC摄像头进行拍照,并把每一张拍得的图片发送到android手机端,在手机上展示这些图片,得到实时的视频。

主要解决两个问题一时调用PC摄像头拍摄图片,二是在PC和android之间传输图片。

利用JavaCV(简介见本文末尾)调用PC摄像头很简单

OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
grabber.start();
//调用grab()方法就能得到IplImage类的一个对象,进行进一步处理就能得到图片

传输图片涉及图片数据和字节流之间的转化

PC端将图片转化为字节流

while ((image = grabber.grab()) != null && writeImageSocket.isConnected()) {
					ByteArrayOutputStream baos = new ByteArrayOutputStream();
					ImageIO.write(image.getBufferedImage(), "jpg", baos );
					baos.flush();
					byte[] imageInByte = baos.toByteArray(); 
					baos.close();
					
					dos.writeInt(imageInByte.length);
					dos.write(imageInByte,0,imageInByte.length);
					dos.flush();

				}
Android读取字节流转化为图片
while (true) {
					int size = dataInput.readInt();
					Log.e("size in client", Integer.toString(size));
					byte[] data = new byte[size];
					int len = 0;
					while (len < size) {
						len += dataInput.read(data, len, size - len);
					}
					ByteArrayOutputStream outPut = new ByteArrayOutputStream();
					bitmap = BitmapFactory.decodeByteArray(data, 0,
							data.length);
					bitmap.compress(CompressFormat.PNG, 100, outPut);
					Message message = new Message();
					message.what = 1;
					mHandler.sendMessage(message);
				}
具体代码

PC端服务程序的实现CameraSever.java

package com.giantpoplar.cameraserver;

import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;

import javax.imageio.ImageIO;

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值