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

フランソワ ボーフォール
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)です(コンテナの簡単な説明については、RAW 動画からウェブ対応へをご覧ください)。

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 のバグ

MP4 の Opus(MSE 用)

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

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 の保護されたコンテンツの設定