如何简单的搭建一个视频监控系统 (设备端)一

/ 2015-12-27

大约去年的这个时候,那个时候比较的闲。于是就自己简单的实现一个视频监控的系统。有一段时间没有写博客了,于是就记录下吧。

用到的工具

  • 浏览器端,使用 jwplayer 播放 rtmp 视频流
  • 服务端,使用 crtmpserver 或者是 red5,simplewebserver 基于NIO的web服务器
  • Android端, vitam-io (vplayer) 播放 rtmp 视频流
  • 设备端, 使用 ffmpeg 采集视频流

常见的网络摄像头

  1. 需要一个操作系统,Windows-CE 或者是 Linux
  2. 使用第三方的视频流采集工具
  3. 将采集到的视频流发布到视频流服务器端
  4. 访问视频流服务器,播放视频流

当然这样做,只能保证程序能在内网访问(无法在公网使用,NAT问题)

公网上查看视频流

方案1

Upnp 将内网端口暴露在公网上(需要运营商,路由,编程语言的支持)

方案2

P2P 这个实现起来有些麻烦,主要是因为大多视频流都是使用TCP,了解到有 rtp

方案3

服务端中转视频流,需要建立中转机制

由于方案1,2 都不能保证 100% 的成功,于是就选择了 1+3

设备端

使用 simplewebserver 快速搭建一个web系统,主要是通过 web 来实现跨平台。
如果能正常使用Upnp,那么设备端就程序就同时担当了 服务端+浏览器端

安装 ffmpeg

  • windows

    由于windows平台编译源码一直没有用过,于是就去官网下载了一个 ffmpeg.exe (32位)的可执行文件

  • Ubuntuyin

    sudo apt-get install ffmpeg

  • CentOS

    yum -y install ffmpeg

  • Linux 源码编译

    http://blog.94fzb.com/post/203

使用命令采集视频流并且将视频发送到流媒体服务器

ffmpeg -f video4linux2 -s 640*480 -r 10 -i /dev/video0 -y -ab 32 -re 220500 -b 12800000 -s 640*480 -f flv rtmp://192.168.1.104/vod/test

ffmpeg 是一个很强大的多媒体处理工具,各种参数。使用几个简单的参数就可以做出很牛的音视频处理工具

UPnP

这里就不科普 UPnP的内容了 link 百度百科

测试是否支持 UPnP

  1. import java.io.IOException;
  2. import java.net.ServerSocket;
  3. import java.net.Socket;
  4. public class Test {
  5. public static void main(String[] args) {
  6. ServerSocket server = null;
  7. int serverPort = 7070;
  8. try {
  9. if (args != null && args.length > 0 ) {
  10. serverPort = Integer.parseInt(args[0]);
  11. }
  12. server = new ServerSocket(serverPort);
  13. System.out.println("server is run");
  14. while (true) {
  15. // accept 这个方式会对server进行堵塞 当有链接上来后会不再堵塞
  16. Socket socket = server.accept();
  17. System.out.println(socket.getInetAddress() + " connected");
  18. socket.close();
  19. }
  20. } catch (IOException e) {
  21. e.printStackTrace();
  22. } finally {
  23. if (server != null) {
  24. try {
  25. server.close();
  26. } catch (IOException e) {
  27. e.printStackTrace();
  28. }
  29. }
  30. }
  31. }
  32. }

javac Test.java && java Test

Linux 图形化 UPnP 管理工具

sudo apt-get install upnp-router-control

Java PortMapper

wget http://7s1rev.com1.z0.glb.clouddn.com/PortMapper-1.9.5.jar

  • 绑定 7070 到公网的 17070

java -jar PortMapper-1.9.5.jar -a 192.168.1.109 7070 17070 TCP

这两个工具都会提示公网地址, 浏览器访问 http://external:17070 如果Java控制台有输出信息,说明支持 UPnP

写在最后

简单说了下ffmpeg和UPnP的使用,暂时写在这里,这些都是写代码的前提。

转载请注明作者和出处,并添加本页链接。
原文链接: //xiaochun.zrlog.com/how-to-build-video-monitor-system-step-1.html