如果您使用的是 getUserMedia()
或 WebRTC,则可能需要针对 Chrome 45 及更高版本调整代码。
MediaStream API 表示同步的媒体流。例如,从摄像头和麦克风输入获取的数据流已同步视频和音频轨道。每个音轨都由一个 MediaStreamTrack 表示。(请勿与 <track> 元素混淆!)
Chrome 45 中废弃了三项 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 高清摄像头(内置)(05ac:8510)。
您可以查看实际操作:在 Chrome(在带有相机的设备上)打开 simpl.info/gum,然后查看 Chrome 开发者工具控制台。在本演示中,传递到 getUserMedia()
回调的 MediaStream 对象 stream
处于全局范围内,因此您可以从控制台对其进行检查。调用 stream.getTracks()[0]
即可查看此数据流的 MediaStreamTrack
。
Stop()、已结束且处于活动状态
媒体捕获和串流 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,并在实现意图中查看更多讨论内容和详细信息。