我想将用户的网络摄像头(从浏览器)流式传输到服务器,我需要服务器能够操作流(在该视频流上运行一些C算法)并发送用户返回信息。
我非常关注WebRTC和MediaCapture,并在此处阅读示例:https://bitbucket.org/webrtc/codelab/overview。
然而,这是针对点对点视频聊天进行的。根据我的理解,来自getUserMedia的MediaStream通过RTCPeerConnection传输(带有 addStream );我想知道的是:我可以使用它,但在服务器上处理视频流吗?
提前感谢您的帮助
答案 0 :(得分:8)
这是我设计的解决方案。 我在这里发布寻求相同信息的人: - )
我使用WebRTC API:使用getUserMedia
获取网络摄像头流,打开RTCPeerConnection
(以及RTCDataChannel
获取下行信息)。
该流是DTLS加密的(强制的),多媒体流使用RTP和RTCP。视频采用VP8编码,Opus编码音频。
在后端,这是复杂的部分。 我能找到的最佳(尚)替代方案是Janus Gateway。它需要处理很多事情,比如DTLS握手,RTP / RTCP多路分解等。基本上,每次传输RTP数据包时都会触发一个事件。 (RTP数据包通常是MTU的大小,因此不视频帧和RTP数据包之间的1:1映射。)
然后我构建了一个GStreamer(版本1.0)来解包RTP数据包,解码VP8,确保视频缩放和颜色空间/格式转换以发出BGR矩阵(与OpenCV兼容)。管道的开头有一个AppSrc
组件,最后有一个AppSink
。
我必须采取额外措施来确保良好的可伸缩性(线程,内存泄漏等),并找到一种干净有效的方法来使用我在此程序中使用的C ++库。
希望这有帮助!