如何从视频文件创建MediaStream?

16

大多数 Mediastream 的示例都是通过 webCam-stream 进行解释的,但我需要从本地视频文件(.webm 或 mp4)创建 MediaStream。请告诉我如何实现。

1个回答

14

更新于2017年5月4日: captureStream API现在在Chrome和Firefox上都受支持。

var stream_from_WebM_or_Mp4_File = videoTag.captureStream();
var stream_from_Canvas2D         = canvasTag.captureStream(25);

参数"25"是请求帧率。

现在,您可以使用RTCPeerConnection API共享生成的流或使用MediaRecorder API进行记录。

请查看类似的答案:https://stackoverflow.com/a/42929613/552182


有两种可能性:

1)captureStreamUntilEnded / 演示

它仅在Firefox上支持为"mozCaptureStreamUntilEnded"。

2)MediaSource API 演示

MediaSource API在Chrome和Firefox上都受支持;但它不是实时媒体流。

您可以读取文件块;使用任何传输网关(如WebSockets、socket.io或WebRTC数据通道)与其他用户共享它们;然后尽快使用MediaSource API播放这些块,而不必等待完整的文件被共享。


请记住,Chromium和Gecko上的WebRTC实现都支持单个但“活动”的媒体源;这意味着您无法将来自预录制媒体的捕获流用作“实时”媒体源。此外,您不能将虚假的WebAudio流用作“实时”媒体源。

以下代码在Firefox上不起作用:

preRecordedMediaStream = preRecordedMedia.mozCaptureStreamUntilEnded();
peer.addStream(preRecordedMediaStream);

你可以在这里测试演示。


更新于:2014年7月27日(周日)下午1:06(UTC)

你可以使用FileReader/WebAudio API捕获预先录制好的mp3/ogg文件,并将其作为实时音频源共享到WebRTC对等连接中,就像我在这个演示 / 源代码中所做的那样。


谢谢!现在我正在阅读你的网页链接。我还没看完,但这将解决我的问题。非常感谢! - endotakashi
你说,mozCaptureStreamUntilEnded在Firefox中无法用于流式传输预先录制的文件。但是你在你的演示中使用了它:https://www.webrtc-experiment.com/experimental/mozCaptureStreamUntilEnded/ 为什么?我刚刚尝试了这个演示,显然它真的不起作用。这只是一个为未来的Firefox版本制作的示例吗? - Niklas Peter
我有一个相反的问题。如果我从captureStream()创建了一个MediaStream并从<video> HTML元素进行媒体源获取,如何将其输出到本地mp4文件? - CodingFanSteve

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接