我试图建立移动应用程序,可以从双方流视频(即像视频通话)。
我研究了webrtc,但这还没有为移动本机应用程序做好准备,而且webrtc所做的是允许浏览器直接捕获摄像头和音频,而不需要插件等。但是在本机移动应用程序中捕获摄像头和音频不是问题,基本上需要一个非常低的延迟和双重传输层。在许多文章和地方,我读到了关于在websockets上使用webrtc的文章。
所以我想我可以用websockets来传输视频。它是正确的还是我遗漏了什么?
我知道webrtc与client...whereas有一个不同之处,websocket直接是客户端-服务器-客户端,有没有办法避免它。就延迟而言,这意味着什么?
发布于 2014-06-07 23:59:42
你一定漏掉了什么。
发布于 2021-11-10 08:02:41
注意:此解决方案可以并且确实适用于移动浏览器。但是,我不知道是否存在Android/IOS环境中所需的所有软件(即使是像React Native这样的软件)。
但是,这个解决方案是可行的。事实上,我已经在树莓派上做过了。
我基本上只是从一个USB摄像头上直播一个FFMPEG流水线,通过管道将它传输到UDP源,有一个“中继”服务,基本上转换UDP包并使用Javascript中的engine.io将其传输到客户端,然后在事物的web端使用这个真正甜蜜的mpeg1编码器将web套接字包解码成mpeg1视频。
所以我通过管道传输ffmpeg流,如下所示:https://github.com/freefarmdata/auto_farm_recorder/blob/master/recorder/src/controllers/streams.py#L13
然后读取UDP流并将其转发到Node应用程序,如:https://github.com/freefarmdata/auto_farm_recorder/blob/master/relay/src/socket.js#L97
然后,我使用如下命令对流进行解码:https://github.com/freefarmdata/auto_farm_recorder/blob/master/web/src/app/widgets/LiveStream.js
请记住,这是使用TCP而不是UDP作为数据传输协议。这意味着为了保持流继续运行,我必须确保我的客户端有足够的带宽用于实时流。如果他们不这样做,我就不能使用RTP或其他东西在我的流上做QOS来降低质量水平。我基本上只需要丢弃数据包,这反过来又会丢弃帧,并在mpeg1解码器中导致奇怪的损坏问题。
从理论上讲,您可以使用engine.io服务这样做,并来回发送有关连接质量的数据包,这将告诉“中继”服务器开始从不同的UDP源(比特率较低的源)拉取数据。
但我离题了。
https://stackoverflow.com/questions/24094410
复制相似问题