【问题标题】:WebRTC -- can getUserMedia use local stream?WebRTC -- getUserMedia 可以使用本地流吗?
【发布时间】:2015-01-14 07:08:12
【问题描述】:
我想让 WebRTC 编码并播放 h264(NAL) 流(本地文件)。
在WebRTC教程中,getUserMedia用于获取本地摄像头连接系统,不知道getUserMedia功能是否支持
捕获本地流文件,如 h264 流。
如果它不能那样工作,可能我应该修改 WebRTC 源代码(我正在研究它)。
这是一个问题,如果我更改 WebRTC 代码,我如何将新代码集成到浏览器中?把它做成插件了吗?
【问题讨论】:
-
感谢您回答我的问题。我已经找到 ffmpeg.js 将我的文件转码为 mp4 以便我可以在网络上播放。
标签:
html5-video
webrtc
h.264
【解决方案1】:
Firefox 支持对 <video> 元素的扩展,您可以使用它来执行此操作。
首先,设置一个视频元素的来源:
v1.src = "file:///...";
然后您可以调用(当前前缀的)mozCaptureStream 或mozCaptureStreamUntilEnded 函数来获取MediaStream。
stream = v1.mozCaptureStream();
proposed specification。
但请注意,您需要确保文件与页面同源。 file:/// 的相同来源规则可能会导致问题。否则,您将无法访问您的 MediaStream。确保这一点的一种方法不是直接设置位置,而是使用<input type="file"> 元素加载文件。
如其他答案所述,Firefox 目前仅支持 H.264 的基线配置文件。
【解决方案2】:
首先,你是对的getusermedia 不适合你。但是,有几个选项。
- 使用 RTCDataChannel 一起破解流。分解媒体流并传送每个数据包,然后在客户端进行处理。
-
Take a look at this demo 用于预先录制的媒体流。我不认为 H264 已得到解决,但它可以帮助您(可能仅适用于 Firefox)
- 使用某种原生的 webrtc 断路器/端点来流式传输文件。我特别知道其他人(包括我自己)已经通过Janus-Gateway 将 H264 流式传输到 Firefox
几句旁白:
- Firefox 仅支持用于 webrtc 对等连接的流式 h264 中的基线配置文件
- Chrome 根本不支持 webrtc 的 h264
【解决方案3】:
您是否尝试让 getUserMedia 返回 h.264 编码流?
- 在这种情况下,今天只能使用 Firefox,在某些特定环境下(安装了 cisco 264 插件)并且仅适用于基本配置文件。
- Chrome 曾在 11 月承诺增加此容量,但据我所知,至少在 2015 年第 2 季度之前没有时间表。
- 使用我们的 (temasys) 商业插件,您很快就能在 IE 和 Safari 中执行此操作。
这些是我能想到的客户端的唯一选项。在服务器端,你可以使用任何你想转码的东西,包括 janus、kurento、powermedia、licode/lynkia、....
注意:使用 Datachannel 或 WebSocket 等其他方式传输文件是可以的,但会大大降低用户体验,因为您不会拥有 SRTP、DTLS 中包含的所有附加恢复(和安全)机制,也不会拥有webRTC 中特定的不当媒体增强功能,如抖动、缓冲区、netQ 等......