本系列文章想要实现利用UDP协议传输,从java程序获取的视频流以及音频流
github仓库源码地址:https://github.com/TStorms/JavacvUDPTest.git


UDP协议:

TCP/UDP都属于sokect编程技术,有兴趣的可以好好了解下。
与之相对应的就是TCP协议了,TCP每次连接有三次握手操作,能够保证数据传输的完整性。
而UDP是直接发送出去,不管服务端有没有接收到,所以可能会丢包。
但是因为没有三次握手,所以传输速度比TCP快,实时视频传输要求延迟低,所以选择UDP协议。

JavaCV:

JavaCV 是一款开源的视觉处理库,基于GPLv2协议,对各种常用计算机视觉库封装后的一组jar包,封装了OpenCV、libdc1394、OpenKinect、videoInput和ARToolKitPlus等计算机视觉编程人员常用库的接口。(百度百科介绍~哈哈)
JavaCV 有一系列强大的工具,包括转码工具,流媒体服务器传输工具,我们这里仅仅只是利用它获取设备的摄像头并录制
更多JavaCV功能的使用可以查看他的博客: 实时监控、直播流、流媒体、视频网站开发方案设计简要


新建一个maven项目 pom.xml依赖如下:

<!-- JavaCV依赖包 -->
<dependency>
  <groupId>org.bytedeco</groupId>
  <artifactId>javacv</artifactId>
  <version>1.3.3</version>
</dependency>

<!-- 各操作系统opencv环境支持 -->
<dependency>
  <groupId>org.bytedeco.javacpp-presets</groupId>
  <artifactId>opencv-platform</artifactId>
  <version>3.2.0-1.3</version>
</dependency>

新建一个类,如下代码测试,就能看见摄像头拍摄了:
代码引用:http://blog.csdn.net/eguid_1/article/details/51659578

public static void main(String[] args) throws Exception, InterruptedException
{
  OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);
  grabber.start();   //开始获取摄像头数据
  CanvasFrame canvas = new CanvasFrame("摄像头");//新建一个窗口
  canvas.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
  canvas.setAlwaysOnTop(true);
  while(true)
  {
      if(!canvas.isDisplayable())
      {//窗口是否关闭
          grabber.stop();//停止抓取
          System.exit(2);//退出
      }
      canvas.showImage(grabber.grab());//获取摄像头图像并放到窗口上显示, 这里的Frame frame=grabber.grab(); frame是一帧视频图像
      Thread.sleep(50);//50毫秒刷新一次图像
  }
}

是不是很简单啊~~~

上一篇