getUserMedia()
または WebRTC を使用する場合は、Chrome 45 以降向けにコードの調整が必要になることがあります。
MediaStream API は、メディアの同期ストリームを表します。たとえば、カメラとマイク入力から取得したストリームでは、動画トラックと音声トラックが同期されます。各トラックは MediaStreamTrack で表されます。(<track> 要素とは異なります)。
Chrome 45 では、MediaStream
が 3 つ非推奨となります。
MediaStream.ended
MediaStream.label
MediaStream.stop()
それと並行して、次の 2 つも追加します。
MediaStream.active
MediaStreamTrack.stop()
これらには、次の変更が必要です。
MediaStream.active
を使用して、MediaStream.ended
ではなくMediaStream
がストリーミングされているかどうかを確認します。- ストリーミングを停止するには、
MediaStream.stop()
ではなくMediaStreamTrack.stop()
を使用します。 MediaStream
の一意の識別子が必要な場合は、MediaStream.label
ではなくMediaStream.id
を使用します。MediaStreamTrack.label
は、ストリームのソースデバイスの人が読める形式の名前を提供します(例: FaceTime HD Camera (Built-in) (05ac:8510))。
実際の動作を確認するには、カメラを搭載したデバイスで Chrome で simpl.info/gum を開き、Chrome DevTools コンソールを表示します。このデモで 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 Developer Network をご覧ください。また、HTML5 Rocks の音声と動画のキャプチャで getUserMedia()
の概要を紹介しています。
Chrome の変更に関するアンケートにご協力いただきありがとうございました。非推奨のバグについては(こちらとこちら)、実装の意図で詳細をご確認いただけます。