音声と動画の更新(Chrome 70)

François Beaufort
François Beaufort

ピクチャー イン ピクチャーで動画を視聴する

ピクチャー イン ピクチャー(PIP)を使用すると、フローティング ウィンドウ(他のウィンドウの上に常に表示される)で動画を視聴できるため、他のサイトやアプリを操作しながら視聴中の動画を監視できます。新しい Picture-in-Picture Web API を使用すると、ウェブサイト上の動画のピクチャー イン ピクチャーを開始して制御できます。

詳しくは、こちらの記事をご覧ください。

AV1 デコーダ

AV1 は、Alliance for Open Media によって開発された次世代コーデックです。AV1 は、現在の最先端の動画コーデックである VP9 と比べて圧縮効率が 30%以上向上します。Chrome 70 では、公式ビットストリーム仕様に基づいて、Chrome Desktop x86-64 に AV1 デコーダが追加されます。現在のところ、サポートは「メイン」プロファイル 0 に限定されており、エンコード機能は含まれていません。サポートされているコンテナは MP4(ISO-BMFF)です(コンテナの簡単な説明については、元の動画からウェブ対応動画へをご覧ください)。

AV1 を試すには:

  • YouTube TestTube ページに移動します。
  • [SD 画質で AV1 を使う] または [常に AV1 を使う] を選択して、目的の AV1 解像度を取得します。一部のデバイスでは、解像度が高いほど AV1 で再生パフォーマンスの問題が発生しやすくなります。
  • AV1 ベータ版リリース プレイリストから YouTube クリップを再生してみてください。
  • [統計情報] でコーデック av01 を確認します。
YouTube の統計情報で AV1 を確認する。
図 1. YouTube の統計情報で AV1 を確認する。

MSE でのコーデックとコンテナの切り替えのサポート

Chrome では、SourceBuffer の新しい changeType() メソッドを使用して、Media Source Extensions の再生におけるクロスコデックまたはクロス バイトストリーム遷移の改善をサポートします。これにより、SourceBuffer に追加されたメディアバイトのタイプを後で変更できます。

現在のバージョンの MSE は、メディアのアダプティブ再生をサポートしています。ただし、アダプテーションでは、SourceBuffer に追加されるメディアが、MediaSource.addSourceBuffer(type) を介して SourceBuffer を最初に作成するときに指定された MIME タイプに準拠している必要があります。そのタイプのコーデックと、以前に解析された初期化セグメントは、全体を通して同じである必要があります。つまり、ウェブサイトは(複数のメディア要素または SourceBuffer トラックを使用してそれらの間で切り替えることで)コーデックまたはバイトストリームの切り替えを明示的に行う必要があり、アプリケーションの複雑さとユーザーに見えるレイテンシが増加します。(このような遷移では、ウェブアプリがレンダラ メインスレッドで同期アクションを実行する必要があります)。この遷移レイテンシにより、遷移間のメディア再生のスムーズさが損なわれます。

新しい changeType() メソッドにより、SourceBuffer はさまざまなバイトストリーム形式とコーデックでバッファリングと再生をサポートできます。この新しい方法では、今後の MSE コード化フレームの強制排除または削除を除き、以前にバッファに保存されたメディアを保持し、既存の MSE コード化フレーム処理アルゴリズムのスプライシングとバッファリングのロジックを活用します。

changeType() メソッドの使用方法は次のとおりです。

    const sourceBuffer = myMediaSource.addSourceBuffer('video/webm; codecs="opus, vp09.00.10.08"');
    sourceBuffer.appendBuffer(someWebmOpusVP9Data);

    // Later on...
    if ('changeType' in sourceBuffer) {
      // Change source buffer type and append new data.
      sourceBuffer.changeType('video/mp4; codecs="mp4a.40.5, avc1.4d001e"');
      sourceBuffer.appendBuffer(someMp4AacAvcData);
    }

想定どおり、渡された型がブラウザでサポートされていない場合、このメソッドは NotSupportedError 例外をスローします。

サンプルで、コーデック間とバイトストリーム間のバッファリングとオーディオ要素の再生を試す。

リリース予定 | Chromestatus トラッカー | Chromium バグ

MSE 用の MP4 の Opus

オープンで汎用性の高いオーディオ コーデック Opus は、Chrome 33 以降、<audio> 要素と <video> 要素でサポートされています。ISO-BMFF の Opus サポート(MP4 の Opus)はその後追加されました。そして、MP4 の Opus が Chrome 70 の Media Source Extensions で利用可能になりました。

MP4 の Opus が MSE でサポートされているかどうかを検出する方法は次のとおりです。

if (MediaSource.isTypeSupported('audio/mp4; codecs="opus"')) {
  // TODO: Fetch data and feed it to a media source.
}

完全な例を確認するには、公式のサンプルをご覧ください。

正しいエンド トリミングとプリスキップ値で MP4 に Opus を結合するツールがないため、このような精度が重要な場合は、Chrome で SourceBuffer.appendWindow{Start,End}SourceBuffer.timestampOffset を使用してサンプル精度の高い再生を実現する必要があります。

リリース予定 | Chromestatus トラッカー | Chromium バグ

Android で保護されたコンテンツの再生をデフォルトで許可する

Android 版 Chrome 70 では、「保護されたコンテンツ」サイト設定のデフォルト値が「事前に確認」から「許可」に変更され、このようなメディアの再生に関連する煩わしさが軽減されます。この変更が可能になったのは、Cookie やサイトデータとともにメディア ライセンスを消去するための追加の手順が講じられたことにより、ブラウジング データを消去したユーザーをサイトがトラッキングするためにメディア ライセンスが使用されないようにするためです。

Android の保護されたコンテンツの設定。
図 2.Android の保護されたコンテンツの設定。