App*_*wPi 10 ffmpeg webrtc getusermedia
我正在使用 gerUserMedia 录制我的屏幕并获取我的视频和音频流。然后我使用 WebRTC 在另一台设备上发送/接收这个流。有什么方法可以通过以某种方式转换它来使用这个传入的 webrtc 流作为 ffmpeg 的输入?
我正在使用的所有内容都在 javascript 中。
提前致谢。
这些天(2020 年)这是一个相当普遍的要求,所以我会告诉你我对这个问题的看法:
首先,您遇到了两个不同多媒体域(WebRTC 和 ffmpeg)之间戏剧性不兼容(编解码器和流协议)的完美示例。因此,要使它们互操作,您将需要一些棘手的技术和第三方软件。
ffmpeg 本身不能支持“WebRTC”,因为 WebRTC 不是完全定义的协议。WebRTC 的信令机制(交换 SDP 和 ice 候选)没有定义:它留给应用程序来实现。在 WebRTC 的第一步中,应用程序必须通过某种协议(通常是 websocket 或 http 请求)连接到信令服务器。因此,为了支持 WebRTC(RTCPeerConnection),ffmpeg 需要与某些 3-rd 方信令服务器进行互操作。另一种选择是在 ffmpeg 本身内部实现信令服务器,但是 ffmpeg 需要侦听某个端口,并且该端口需要在防火墙中打开(这就是信令服务器所做的)。对于 ffmpeg 来说,这并不是一个实用的想法。
因此,真正实用的解决方案是 ffmpeg 从某个第三方 WebRTC 网关/服务器接收流。您的网页通过 WebRTC 发布到该网关/服务器,然后 ffmpeg 从中提取流。
一种。如果您的 WebRTC 网页编码 H264 视频 + Opus 音频,那么您的生活相对容易。您可以安装 Wowza 或 Unreal Media Server 并通过 WebRTC 将您的流发布到这些服务器。然后在 Wowza/Unreal 中启动该流的 MPEG2-TS 广播,并使用 ffmpeg 接收该 MPEG2-TS 流。任务完成,没有对流进行转码/解码,只是转复用(从WebRTC中使用的RTP容器中解包,然后打包到MPEG2-TS容器中),这是非常节省CPU的事情。
湾 当您需要在 WebRTC 发布网页中使用 VP8/VP9 编解码器时,真正的“美”就来了。你不能做上一段建议的程序,因为ffmpeg没有支持的流媒体协议,可以携带VP8/VP9 - 编码的视频。对于 Windows 操作系统上的 ffmpeg 仍然可以完成任务,但以一种非常尴尬的方式:使用来自 Unreal 的两个 DirectShow 源过滤器:WebRTC 源过滤器和 Video Mixer 源过滤器。您不能单独使用 WebRTC 源过滤器,因为 ffmpeg 无法从 DirectShow 源过滤器接收压缩视频(这是 ffmpeg 的一大缺陷)。所以:配置视频混合器源过滤器以从 WebRTC 源过滤器获取视频(反过来将从虚幻媒体服务器接收您发布的流)。视频混合器源过滤器会将流解压缩为 RGB24 视频和 PCM 音频。然后 ffmpeg 可以使用ffmpeg -f dshow -i video="Unreal Video Mixer Source".
| 归档时间: |
|
| 查看次数: |
11160 次 |
| 最近记录: |