ffmpeg CCTV一共介绍了4种方案,目的都是为了在网页实现cctv。如果可以接受winform的,建议直接调用NVR的sdk或使用vlc插件实现,这里有个很好的实现(实测rtsp很稳定,如果不是rtsp使用ffmpeg转码即可):
https://github.com/higankanshi/Meta.Vlc
本文做一个对比,介绍一下每种方案的利弊:
1. 使用streamedian。
好处:websocket中间件实现转码,并且video on demand。
缺陷:实测5路摄像头以上不够稳定。播放一段时间就会有延迟。
2. 使用ffserver
好处:开源免费。
缺陷:
1. 配置比较麻烦
2. 5路以上不稳定
3. 使用jsmpeg
好处:开源,配置简单。延迟低。
缺陷:
1. cpu占用过多,ubuntu4u 3.0gb 只能开到12路
2. 一个相机需要开2个端口
3. 客户端(外星人pc)cpu12路cpu占用到40%
4. shinobi video
好处:
稳定,16路cpu只占了10%
缺陷:商用收费,1个实例安装需要2000美元
总结:根据具体场景对不同方案进行选择。建议直接做winform,如果一定要在浏览器实现:
如果只需要支持10路以下相机24小时监控,选择jspmeg+websocket;
如果只是定时打开相机,并且只需要同时支持5路以下,选择streamedian。
如果支持路数较多,比如同时32路,取决于硬件价格,如果pc总价格高于2000美元则直接买shinobi video;否则还是选择jsmpeg。
另外,如果考虑购买,土豪还可以选择wowza。其他选择还有red5流媒体服务器,但是pro仍然是收费的;webrtc方案(kurento)笔者不推荐,应用是双向音视频,只是cctv就太over kill了。