如何简单的搭建一个视频监控系统 (设备端)一
大约去年的这个时候,那个时候比较的闲。于是就自己简单的实现一个视频监控的系统。有一段时间没有写博客了,于是就记录下吧。
用到的工具
- 浏览器端,使用 jwplayer 播放 rtmp 视频流
- 服务端,使用 crtmpserver 或者是 red5,simplewebserver 基于NIO的web服务器
- Android端, vitam-io (vplayer) 播放 rtmp 视频流
- 设备端, 使用 ffmpeg 采集视频流
常见的网络摄像头
- 需要一个操作系统,Windows-CE 或者是 Linux
- 使用第三方的视频流采集工具
- 将采集到的视频流发布到视频流服务器端
- 访问视频流服务器,播放视频流
当然这样做,只能保证程序能在内网访问(无法在公网使用,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 源码编译
使用命令采集视频流并且将视频发送到流媒体服务器
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
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Test {
public static void main(String[] args) {
ServerSocket server = null;
int serverPort = 7070;
try {
if (args != null && args.length > 0 ) {
serverPort = Integer.parseInt(args[0]);
}
server = new ServerSocket(serverPort);
System.out.println("server is run");
while (true) {
// accept 这个方式会对server进行堵塞 当有链接上来后会不再堵塞
Socket socket = server.accept();
System.out.println(socket.getInetAddress() + " connected");
socket.close();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (server != null) {
try {
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
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的使用,暂时写在这里,这些都是写代码的前提。
Reproduced please indicate the author and the source, and error a link to this page.
text link:
/how-to-build-video-monitor-system-step-1.html