LoginSignup
2
0

More than 3 years have passed since last update.

他のエンコーダーでトランスコードした MP4 ファイルを Azure Media Services で VOD として配信する方法

Last updated at Posted at 2021-04-17

このドキュメントでやっていること

Azure Media Services の Streaming Endpoint の Dynamic Packaging の機能を利用して、マルチビットレートの動画を HLS / DASH / Smooth のそれぞれのストリーミング形式で配信をするにあたり、その原盤になるファイルを 「Azure Media Services の Encoder なしに」 作る方法の実験の結果をまとめました。

前提

Microsoft Azure の Media Services を使うと、ライブ配信とビデオオンデマンドの両方をクラウド上の PaaS にて実現できます。今回は、このうちの VOD についての話です。

Azure Media Service を使った VOD 配信について

Azure Media Services では、クラウド上のストレージに Multiple Bitrate でトランスコード済みの MP4 動画ファイルを配置しアセットとして登録することで、VOD 配信が可能です。プログレッシブダウンロードと HLS / MPEG-Dash / SmoothStreaming の 3 つのストリーミング形式でダイナミックパッケージングが可能なため、ビデオをアップロードしてアセットとして登録する段階で、配信先の端末の再生可能なフォーマットを意識しなくても良いのがとても良いところです。

Media Services の用語と概念
Azure Media Services のストリーミング エンドポイント (配信元)

公式ドキュメントより引用

ストリーミング エンドポイント は、ダイナミック (Just-In-Time) パッケージおよび配信元サービスを表します。これは、ライブのオンデマンド コンテンツをクライアント プレーヤー アプリケーションに直接配信できます。 一般的なストリーミング メディア プロトコル (HLS または DASH) のいずれかを使用します。 さらに、ストリーミング エンドポイント は、業界有数のデジタル著作権管理 (DRM) に動的 (Just-In-Time) 暗号化を提供します。

メディア ストリーミング業界では、このサービスは、一般的に パッケージャー または 配信元 と呼ばれます。 この機能に関するその他の一般的な業界用語には、JITP (Just-in-time-packager) や JITE (Just-in-time-encryption) があります。

一般的な手順

一般的には、Azure Media Service の機能だけで実現する方が楽です。

C# の場合の手順はこちら。
チュートリアル:Media Services v3 を使用してビデオをアップロード、エンコード、ストリーム配信する

他の言語でもだいたいこんな感じです。

  1. 空の入力用アセットを作成する
  2. 作ったアセットに入力元となる動画ファイルをアップロード
  3. エンコード結果を格納する出力用のアセットを作成する
  4. 動画ファイルを Media Service の Encoder にて Multi Bitrate の MP4 ファイルにエンコードする
  5. 出力用アセットにストリーミングロケーターを紐づける

今回やりたいこと

「Media Service の Encoder を使わずに、Azure Media Services を利用して VOD 配信が可能な Multi Bitrate の動画データとアセットを作りたい。」

(例えばこんな要件の時に使えるかも… : 別の動画配信サービスからの移植案件で、既に Multi Bitrate の MP4 ファイルは存在しており、Azure Media Services に動画データを移動することは出来るが、再エンコードは移行コストを鑑みて出来ればかけたくない。)

解決するためにやってみたこと

Azure Media Services Explorer のインストールと、Media Service への接続

今回は、Media Service への操作を GUI で簡易に行うため、Azure Media Services Explorer のインストールと、Media Service への接続を事前に済ませました。

ツールのダウンロードはこちらから。使い方については割愛します。
Azure Media Service Explorer / Release

なお、日本語 OS で起動すると、日本語ロケールで読み込まれますが、たまに文字列リソースが収まりきらずにデザインが崩れています。
ショートカットに /language:en のコマンド引数をつけると、英語版で起動してくるのでおススメ。

ドキュメント調査

まずは Azure Media Services の Dynamic Package を攻略せねばいかんので、ドキュメントを確認します。
Media Services v3 のダイナミック パッケージ

ダイナミック パッケージを活用するには、中間 (ソース) ファイルを一連の複数ビットレート MP4 (ISO Base Media 14496-12) ファイルにエンコードする必要があります。 エンコードされた MP4 を含む資産と、Media Services のダイナミック パッケージで必要とされるストリーミング構成ファイルが必要です。

ストリーミング構成ファイルというのがよくわかりませんが とりあえず先に進みましょう。

Multi Bitrate の MP4 ファイルを準備

ドキュメントを読む限り、とりあえずは規格に合った形の MP4 ファイルが各ビットレート毎に必要な模様です。

というわけで ffmpeg を使ってサクッと作りましょう。下記のコマンドを用意したいビットレートラダーの分だけ回せば OK ですね。

ffmpeg -i 入力ファイル -vb ビットレート 出力ファイル名

既存の ISO Base Media 14496-12 でエンコードされた Multi Bitrate の MP4 ファイルがある方はそれを使っても大丈夫だと思います。

アセットの作成、そしてファイルのアップロード

Azure Media Services Explorer を利用し、空のアセットを作成。

image.png

そこにビットレートラダーごとの MP4 ファイルを投入。

image.png

今回は 2M/1.5M/1M/700k/500k の 5 段階のビットレートラダーを切りました。

ストリーミング構成ファイルを作成

ドキュメントを読んでいても、以下のようにしか書いていなくて「ストリーミング構成ファイルってなんぞや」でハマりましたが、Media Services Explorer の画面にヒントがありました

エンコードされた MP4 を含む資産と、Media Services のダイナミック パッケージで必要とされるストリーミング構成ファイルが必要です。

一個前のスクリーンショットを見ていただくと、"Generate a Server Manifest" と "Generate a Client Manifest" という二つのボタンがあることがわかります。拡張子 ism と ismc のファイルを生成するようですので、これは Smooth Streaming のお作法に従ったマニフェストを書けばいい、ということが予想できます。

今回は、ツールの力を借りるべく、"Generate a Server Manifest" と "Generate a Client Manifest" を順番に押してみました。どっちもボタンを押して開いたマニフェストのテンプレートをそのまま保存してもとりあえずは使えます。必要な設定があるなら、Smooth Streaming の仕様に従い行いましょう。

image.png

image.png

ストリーミングロケーターを割り当てる

ここまで作業をすると、先ほど作った空のアセットが、Media Service Explorer のビューからも Multi Bitrate MP4 として認識されているはずです。

image.png

アセットを右クリックし、出てきたメニューから "Publish" → "Create a Streaming Locator" で VOD 配信を行うためのロケーターを割り当てます。

表示された画面では、今回はストリーミング形式での VOD のみ行いたいので、"Clear Streaming" を選び、ロケーターを作成します。

image.png

すると、HLS / DASH / Smooth それぞれのマニフェストファイルへのパスが表示されます。

image.png

あとは、お好みのプレイヤーに、お好みの再生方式のマニフェストを食わせてあげれば、Dynamic Packaging によって、ひとつの Multiple Bitrate MP4 の元データをもとに、様々なデバイスで再生可能な動画のストリーミングが可能になります。

MPEG-DASH のリファレンスプレイヤーを使って再生してみましたが、ちゃんと Multiple Bitrate
も効いていて、再生開始時には低めのビットレートから読み込みはじめ、だんだんと最大ビットレートの 2000kbps まで上がっていることもわかります。

image.png

まとめ

可能であれば、Single Bitrate の入力ファイルを用意していただき、Azure Media Services のエンコーダーを使って Multi Bitrate の MP4 ファイルにトランスコードを行うのが、一番楽で一番安心な方法にはなると思います。

Media Services を使用したビデオとオーディオのエンコード

ただ、別のクラウドやオンプレミスからの移行案件などで、それが出来ない場合もあると思いますので、その際にはこの知見が役に立てば幸いです。

免責事項 (Discraimer)

公式ドキュメントをあたったわけではなく、経験的に作業を進めている部分もあるため、このドキュメントの記載内容の利用については、自己責任にてお願いします。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0