Azure Media Services – 動的マニフェスト構成のサポートと HLS 出力の追加機能

このポストは、10 月 1 日に投稿された Azure Media Services – Dynamic Manifest Composition support and HLS output additional features の翻訳です。

 

このたび、Azure Media Services に新たな機能を追加したことを発表しました。新しい機能のほか、複数のアセット フィルターの組み合わせをサポートしました。詳細は以下のとおりです。

動的マニフェスト (アセット フィルター) の構成

動的マニフェストの最初のバージョン (英語) では、フィルターを 1 つずつしか使用できませんでした。そのため、これだと複雑なシナリオには対応が難しいという問題がありました。たとえば、モバイル デバイス用のビデオ品質のフィルターを設定する場合、デバイス プロファイルに適したグローバル フィルターを作成し、不必要な品質を削除します。グローバル フィルターは、関連付けなどを一切行わずに、同じメディア サービス アカウントのすべてのアセットに対して使用されます。

また、アセットの開始時刻と終了時刻をトリミングする場合は、ローカル フィルターを作成し、開始時刻と終了時刻を設定します。2 つのフィルターが作成されることになりますが、フィルターは 1 つずつしか使用できないので、組み合わせて利用することができません。ビデオ品質のフィルターと開始/終了時刻のフィルターの両方を設定する場合は、品質のフィルタリング規則と開始/終了時刻のフィルタリング規則の両方を同じローカル フィルター内で定義する必要があります。これには、追加の手順と同じ規則の繰り返しが必要です。

しかし、今回のフィルター構成のサポートによって、同じ規則を繰り返し定義する必要がなくなりました。複数のフィルターを組み合わせて使用できるため、Azure Media Services によってフィルターの共通部分が処理されます。最大 3 つの規則を組み合わせることができます。

構成を行うには、マニフェスト/再生リストの URL にフィルター名を設定する必要があります。その際、セミコロンを区切り文字として使用します。

たとえば、品質のフィルターを設定する「MyMobileDevice」という名前のフィルターと、特定の開始時刻を設定する「MyStartTime」という名前の別のフィルターが存在するとします。

この場合、次のようにフィルター名を組み合わせることができます。https://cenkteststreaming.streaming.mediaservices.windows.net/3d56a4d-b71d-489b-854f-1d67c0596966/64ff1f89-b430-43f8-87dd-56c87b7bd9e2.ism/Manifest(filter=MyMobileDevice;MyStartTime)

フィルターの詳細については、前回のブログ記事「動的マニフェストによる表示とアセットのトリミングのカスタマイズ (英語)」をご覧ください。

複数のフィルターを処理するしくみ

フィルター構成では共通部分が処理されます。複数のフィルターを使用する場合、処理結果はそれらのフィルターの共通部分となります。たとえば、1 つのフィルターでビデオの品質に q1 と q2、オーディオの品質に a1 を選択し、その他のフィルターでビデオの品質に q3 を選択しているとします。この場合、出力マニフェストには、ビデオの q1、,q2、q3 およびオーディオの a1 が含められます。

HLS からオーディオのみのトラックを削除

既定では、Azure Media Services は HLS の再生リストにオーディオのみのトラックを出力します。これは、携帯ネットワークの App Store 認定を得るために必要です。オーディオのみのトラックがあると、クライアント側で帯域幅の問題が発生したときに、クライアントはオーディオのみのモードに切り替えることで、ビデオを再生せずにストリーミングを維持できます。こうすることでストリーミングは維持されますが、エクスペリエンスが望ましくない場合もあります。オーディオの黒い画面よりも、プレイヤーのバッファー処理やビデオ再生のほうが好まれる場合があります。

新しい URL パラメーター “audio-only=false” を使用すると、オーディオのみのトラックを再生リストから削除できます。

このパラメーターを使用しない場合 (https://cenkteststreaming.streaming.mediaservices.windows.net/3d56a4d-b71d-489b-854f-1d67c0596966/64ff1f89-b430-43f8-87dd-56c87b7bd9e2.ism/Manifest(format=m3u8-aapl-v3)、以下に示すようにオーディオのみのトラックは削除されません。

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=523232,RESOLUTION=320x132,CODECS="avc1.4d400d,mp4a.40.2"
QualityLevels(400000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio)
#EXT-X-STREAM-INF:BANDWIDTH=778732,RESOLUTION=640x268,CODECS="avc1.4d4015,mp4a.40.2"
QualityLevels(650000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio)
#EXT-X-STREAM-INF:BANDWIDTH=1136432,RESOLUTION=640x268,CODECS="avc1.4d401e,mp4a.40.2"
QualityLevels(1000000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio)
#EXT-X-STREAM-INF:BANDWIDTH=1647432,RESOLUTION=960x400,CODECS="avc1.4d401e,mp4a.40.2"
QualityLevels(1500000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio)
#EXT-X-STREAM-INF:BANDWIDTH=2413932,RESOLUTION=960x400,CODECS="avc1.4d401e,mp4a.40.2"
QualityLevels(2250000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio)
#EXT-X-STREAM-INF:BANDWIDTH=3589232,RESOLUTION=1280x532,CODECS="avc1.4d4020,mp4a.40.2"
QualityLevels(3400000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio)
#EXT-X-STREAM-INF:BANDWIDTH=106272,CODECS="mp4a.40.2"
QualityLevels(96000)/Manifest(audio,format=m3u8-aapl-v3)

“audio-only=false” を使用する場合 (https://cenkteststreaming.streaming.mediaservices.windows.net/3d56a4d-b71d-489b-854f-1d67c0596966/64ff1f89-b430-43f8-87dd-56c87b7bd9e2.ism/Manifest(format=m3u8-aapl-v3,audio-only=false)、以下に示すようにオーディオのみのトラックは削除されます。

 #EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=523232,RESOLUTION=320x132,CODECS="avc1.4d400d,mp4a.40.2"
QualityLevels(400000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio)
#EXT-X-STREAM-INF:BANDWIDTH=778732,RESOLUTION=640x268,CODECS="avc1.4d4015,mp4a.40.2"
QualityLevels(650000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio)
#EXT-X-STREAM-INF:BANDWIDTH=1136432,RESOLUTION=640x268,CODECS="avc1.4d401e,mp4a.40.2"
QualityLevels(1000000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio)
#EXT-X-STREAM-INF:BANDWIDTH=1647432,RESOLUTION=960x400,CODECS="avc1.4d401e,mp4a.40.2"
QualityLevels(1500000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio)
#EXT-X-STREAM-INF:BANDWIDTH=2413932,RESOLUTION=960x400,CODECS="avc1.4d401e,mp4a.40.2"
QualityLevels(2250000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio)
#EXT-X-STREAM-INF:BANDWIDTH=3589232,RESOLUTION=1280x532,CODECS="avc1.4d4020,mp4a.40.2"
QualityLevels(3400000)/Manifest(video,format=m3u8-aapl-v3,audiotrack=audio)

HLS での Iフレーム トラックのサポート

早送りや巻き戻し再生の機能を強化するために、Azure Media Services HLS 再生リストの出力に Iフレームのサポートを追加しました。Iフレームのサポートは HLS v4 の再生リストから既定で提供されます。HLS v3 は Iフレームをサポートしないため、v3 の出力に Iフレームは含まれません。

この新機能を使用すると、“EXT-X-I-FRAME-STREAM-INF” タグが適用されます。

たとえば、HLS v4 の再生リストを要求すると、以下に示すように再生リストには “#EXT-X-I-FRAME-STREAM-INF:” が含められます。

 #EXTM3U
#EXT-X-VERSION:4
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="audio",NAME="audio",DEFAULT=YES,URI="QualityLevels(96000)/Manifest(audio,format=m3u8-aapl)"
#EXT-X-STREAM-INF:BANDWIDTH=523232,RESOLUTION=320x132,CODECS="avc1.4d400d,mp4a.40.2",AUDIO="audio"
QualityLevels(400000)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=523232,RESOLUTION=320x132,CODECS="avc1.4d400d",URI="QualityLevels(400000)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=778732,RESOLUTION=640x268,CODECS="avc1.4d4015,mp4a.40.2",AUDIO="audio"
QualityLevels(650000)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=778732,RESOLUTION=640x268,CODECS="avc1.4d4015",URI="QualityLevels(650000)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=1136432,RESOLUTION=640x268,CODECS="avc1.4d401e,mp4a.40.2",AUDIO="audio"
QualityLevels(1000000)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=1136432,RESOLUTION=640x268,CODECS="avc1.4d401e",URI="QualityLevels(1000000)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=1647432,RESOLUTION=960x400,CODECS="avc1.4d401e,mp4a.40.2",AUDIO="audio"
QualityLevels(1500000)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=1647432,RESOLUTION=960x400,CODECS="avc1.4d401e",URI="QualityLevels(1500000)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=2413932,RESOLUTION=960x400,CODECS="avc1.4d401e,mp4a.40.2",AUDIO="audio"
QualityLevels(2250000)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=2413932,RESOLUTION=960x400,CODECS="avc1.4d401e",URI="QualityLevels(2250000)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=3589232,RESOLUTION=1280x532,CODECS="avc1.4d4020,mp4a.40.2",AUDIO="audio"
QualityLevels(3400000)/Manifest(video,format=m3u8-aapl)
#EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=3589232,RESOLUTION=1280x532,CODECS="avc1.4d4020",URI="QualityLevels(3400000)/Manifest(video,format=m3u8-aapl,type=keyframes)"
#EXT-X-STREAM-INF:BANDWIDTH=106272,CODECS="mp4a.40.2",AUDIO="audio"
QualityLevels(96000)/Manifest(audio,format=m3u8-aapl)

 

ここでご紹介した機能が皆様のお役に立てば幸いです。ご不明な点がありましたら、フォーラム (英語) またはこの記事のコメント欄までお寄せください。

今後ともよろしくお願いいたします。

Azure Media Services チーム