HTMLMediaElement.captureStream() - Web APIs 编辑

The captureStream() property of the HTMLMediaElement interface returns a MediaStream object which is streaming a real-time capture of the content being rendered in the media element.

This can be used, for example, as a source for a WebRTC RTCPeerConnection.

Syntax

var mediaStream = mediaElement.captureStream()

Parameters

None.

Return value

MediaStream object which can be used as a source for audio and/or video data by other media processing code, or as a source for WebRTC.

Example

In this example, an event handler is established so that clicking a button starts capturing the contents of a media element with the ID "playback" into a MediaStream. The stream can then be used for other purposes—like a source for streaming over WebRTC, to allow sharing prerecorded videos with another person during a video call.

document.querySelector('.playAndRecord').addEventListener('click', function() {
  var playbackElement = document.getElementById("playback");
  var captureStream = playbackElement.captureStream();
  playbackElement.play();
});

See Recording a media element for a longer and more intricate example and explanation.

Specifications

SpecificationStatusComment
Media Capture from DOM Elements
The definition of 'captureStream()' in that specification.
Working DraftInitial definition.

Browser compatibility

BCD tables only load in the browser

Prior to Firefox 51, you couldn't use captureStream() on a media element whose source is, itself, a MediaStream (like a <video> element which is presenting a stream being received over a RTCPeerConnection). Beginning in Firefox 51, this works. This means you can capture a stream from the video element and use MediaRecorder to record it. See bug 1259788 for details.

However, captureStream() is still prefixed as mozCaptureStream() on Firefox for good reason: there are some quirks in the present implementation which are worth noting:

  • The Firefox implementation currently only works as described in the specification when the media element's source is, itself, a MediaStream.
  • If the media element's source isn't a MediaStream, the output from this method isn't compatible with the spec, and if you change the source after starting capture, the output capture stream can't accept the new source data due to that incompatibility, so no MediaStreamTracks from the new source MediaStream are added to the captured stream, resulting in output that doesn't capture the updated source.
  • Switching the source back to a MediaStream adds tracks back to the stream and it works again as expected.
  • Calling mozCaptureMediaStream() on an element with a MediaStream source returns a stream that only contains tracks while the element is playing a MediaStream.
  • If you call mozCaptureMediaStream() on a media element with no source media, its compatibility mode will be based on the first source that's added; for example, if it's a MediaStream, then the capture stream will only work with MediaStream sources from then on.
  • This special behavior will be removed once the non-MediaStream source support is brought up to specification and the method is unprefixed. See bug 1259788, comment 160 for details.

See also

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

词条统计

浏览:89 次

字数:6216

最后编辑:7 年前

编辑次数:0 次

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文