現在、Chrome で Media Source Extensions(MSE)を使用する場合、暗号化されたストリームとクリア ストリームを切り替えることはできません。これは実際には MSE 仕様で禁止されていません。むしろ、この制限は主に、Encrypted Media Extensions(EME)をサポートするようにメディア パイプラインが設定されている方法にあります。
MSE では、メディア ストリームは、コーデックの初期化データや暗号化情報などの情報が含まれる初期化セグメントで開始する必要があります。通常、初期化セグメントはメディア ファイルの先頭にあります。したがって、ダウンロードまたは MSE を介してメディアがメディア要素に接続されると、メディアは「ただ機能する」ようになります。
問題は、ストリーミングの途中でメディアの特性を変えようとするときに発生します。メディア特性を変更するには、新しい初期化セグメントを渡す必要があります。ほとんどの特性では、この方法で問題なく動作します。再生は続行されます。暗号化の設定は例外です。最初の初期化セグメントの暗号化設定は、ストリーム セグメントが暗号化される可能性があるかどうかのみを示します。つまり、クリアなメディア セグメントをストリームに挿入できます。暗号化されたセグメントが 1 つでも含まれている暗号化されていないストリームでは、初期化セグメントに暗号化情報が含まれている必要があります。そのため、広告挿入には、他のプラットフォームには適用されない回避策が必要になります。
Chrome 58 以降では、この仕組みがすべて変更されます。同じストリームで暗号化と非暗号化を切り替えられるようになりました。これにより、Firefox と Edge にすでに存在する動作と一致して互換性が向上します。
ただし、いくつか注意点があります。まず、メディア ストリームに暗号化されたセグメントが含まれることを想定している場合は、事前に MediaKeys を設定する必要があります。これまでどおり、同じソースで HTTP と HTTPS を混在させることはできません。