如果您使用 getUserMedia()
或 WebRTC,则可能需要针对 Chrome 45 及更高版本调整代码。
MediaStream API 代表同步的媒体流。例如,从摄像头和麦克风输入获取的流包含同步的视频和音频轨道。每个轨道都由 MediaStreamTrack 表示。(请勿与 <track> 元素混淆!)
Chrome 45 中废弃了 3 个 MediaStream
:
MediaStream.ended
MediaStream.label
MediaStream.stop()
并行添加了以下两项:
MediaStream.active
MediaStreamTrack.stop()
这需要进行以下更改:
- 使用
MediaStream.active
检查MediaStream
是否正在流式传输,而不是MediaStream.ended
。 - 使用
MediaStreamTrack.stop()
停止流式传输,而非MediaStream.stop()
。 - 如果您需要为
MediaStream
提供唯一标识符,请使用MediaStream.id
而非MediaStream.label
。MediaStreamTrack.label
为数据流的来源设备提供人类可读的名称,例如 FaceTime HD 摄像头(内置)(05ac:8510)。
您可以通过以下方式查看这些功能的运作方式:在 Chrome(搭载摄像头的设备)中打开 simpl.info/gum,然后查看 Chrome DevTools 控制台。在此演示中,传递给 getUserMedia()
回调的 MediaStream 对象 stream
处于全局范围内,因此您可以从控制台进行检查。调用 stream.getTracks()[0]
可查看此数据流的 MediaStreamTrack
。
Stop()、已结束和活跃
当 Media Capture and Streams W3C 工作组研究向 MediaStream
添加新轨道时会发生什么情况以及空 MediaStream
是否会结束时,他们意识到,没有合理的方法可以在 MediaStream
上实现 ended
(即“永远不会再次启动”)。在 HTML5 的其他部分,“已结束”表示“已结束且永远不会恢复”。“有效”没有此类含义:无效的直播可以再次变为有效,例如,如果向其添加了新轨道。工作组决定移除该属性和函数,而不是保留令人困惑的属性和函数。
以下示例展示了如何使用“MediaStream.active”检查流的状态:
var gumStream;
navigator.getUserMedia({audio: false, video: true},
function(stream) {
gumStream = stream;
// ...
},
function(error) {
console.log('getUserMedia() error', error);
});
// …
if (gumStream.active) {
// do something with the stream
}
从 MediaStream
中移除 stop()
并未移除任何实际功能:无论如何,必须在 MediaStreamTrack
上执行与分离源设备等相关的进程。改为对 MediaStreamTrack
使用 stop()
:
navigator.getUserMedia({audio: false, video: true},
function(stream) {
// can also use getAudioTracks() or getVideoTracks()
var track = stream.getTracks()[0]; // if only one media track
// ...
track.stop();
},
function(error){
console.log('getUserMedia() error', error);
});
标签
事实证明,没有人能完全理解此属性的用途!
MediaStream.label
已添加到规范的第一个版本中,但没有人真正知道 label
的用途。此外,我们还不清楚通过 RTCPeerConnection
发送数据流时 label
会发生什么情况。
W3C 工作组四处打听,发现没有人需要它,因此将其移除了。
再次重申:MediaStream.id
为 MediaStream
提供唯一标识符,MediaStreamTrack.label
提供数据流来源的名称,例如摄像头或麦克风的类型。
如需详细了解 MediaStream
和 MediaStreamTrack
,请访问 Mozilla 开发者网络;HTML5 Rocks 在捕获音频和视频中提供了对 getUserMedia()
的极佳介绍。
一如既往,我们非常感谢您就 Chrome 的变更提供反馈。您可以关注这些废弃功能的 bug(此处和此处),并在实施意向中找到更多讨论和详细信息。