MediaStream のサポート終了

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 を表示します。

Chrome DevTools コンソールで MediaStream と MediaStreamTrack を示すスクリーンショット

Stop(), ended、active

メディア キャプチャとストリーム W3C ワーキング グループは、MediaStream に新しいトラックを追加した場合に何が起きるか、空の MediaStream が終了されるかどうかの問題を検討した結果、MediaStreamended を実装する合理的な方法がないことを認識しました(「再び開始されることはない」など)。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 で行う必要があります。代わりに MediaStreamTrackstop() を使用します。

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.idMediaStream の一意の識別子を提供し、MediaStreamTrack.label はストリームのソースの名前(カメラやマイクなどのタイプ)を提供します。

MediaStreamMediaStreamTrack の詳細については、Mozilla Developer Network をご覧ください。HTML5 Rocks の 音声と動画のキャプチャでは、getUserMedia() の概要を説明しています。

Chrome の変更について、皆様からのフィードバックをお待ちしております。これらの非推奨化に関するバグは、こちらこちらで確認できます。詳細な議論については、実装の意向をご覧ください。