我有一个node.js服务器,它通过socket.io从一个网页接收WEBM blob二进制数据小包!
(navigator.mediaDevices.getUserMedia -> stream -> mediaRecorder. ondatavailable-> DATA .我正在将那个DATA发送回服务器。所以这包括时间戳和二进制数据)。
我如何通过在VIDEO标签中添加URL,在一个永不结束的实时流中将这些流返回到HTTP请求中,而HTML网页可以使用这些流?
就像这样:
<video src=".../video" autoplay></video>
字符串
我想创建一个实时视频流,基本上流回我的网络摄像头到一个html页面,但我有点迷失了我该怎么做。请帮助。谢谢
编辑:我正在使用express.js来提供应用程序。
我只是不确定我需要在服务器上做什么来处理即将到来的webm二进制blob,以正确地服务于端点/视频上的html页面
请帮帮忙:)
1条答案
按热度按时间kcrjzv8t1#
经过多次失败的尝试,我终于能够构建我想要的东西:
通过socket.io进行实时视频流。
所以我做的是:
1.启动getUserMedia,启动网络摄像头
1.启动mediaRecorder设置,记录100 ms的间隔
1.在每个可用块上,通过socket.io向服务器发出一个事件,并将blob转换为base64字符串
1.服务器将base64转换的100毫秒视频块发送回所有连接的套接字。
1.将媒体源附加到视频元素上,瞧:)视频会播放得很流畅。只要你按顺序附加每个块,并且不跳过块(在这种情况下,它会停止播放)
而且它起作用了!但是不能用
问题是mediaRecorder进程是CPU密集型的,页面CPU使用率跳到15%,整个进程太慢。
通过socket.io的视频流有2.5秒的延迟,即使不通过socket.io发送blob,但在同一页面上呈现它们,延迟也几乎相同。
所以我发现这工作,但不适用于可持续的视频聊天服务。它只是不是为它设计的。对于录制网络摄像头视频稍后播放,mediaRecorder可以工作,但不适用于直播。
我猜直播流媒体没有办法绕过WebRTC,你必须使用WebRTC将视频流发送到对等端或服务器发送到其他对等端.不要试图建立一个实时视频聊天服务与mediaRecorder.你只会浪费你的时间.我为你做的:)所以你不必。只要看看webRTC。你可能需要使用TURN服务器。Twilio提供STUN,TURN服务器,但它的成本。但你可以运行自己的TURN服务器与Codurn和其他服务,但我还没有考虑到。
谢谢,希望能帮上忙.