Video Indexer で処理した Azure Media Services 部分を独自アプリケーションに流用する

# 背景
動画を使った処理では、結局**映像を見る**行為をしないと、映っているものの確認ができません。そのため、よく行われている Video Indexer を使った動画解析では、以下の2つのパイプライン処理を行う事が多いです。

- 動画を Blob Storage にUpload
    - Video Indexer で解析処理
    - Azure Media Services でトランスコード・配信URL作成

ただ、これですと Azure Media Services の処理が**冗長**です。しかも、Azure Media Services はデフォルトで `Azure CDN` もついているため、殆どの動画配信のシナリオにはキャパシティとしても十二分です。

Video Indexer は内部で Azure Media Services の各種エンジンを使って、Video Indexer の ポータルでのストリーミング表示を実現させています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/095bbbda-1681-a70e-ff43-4f90489bfe06.png)

実際に、Video Indexer を有料モードにする際には、Azure Media Services の作成あるいはアタッチを行います。

![vi.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/0b20acbb-60fa-6a1e-e535-6a9cdd90015a.jpeg)

ここでは、Video Indexer の処理 1つである程度終わらせる事を目指します。

# 制約

- Azure Media Services のもつ、きめ細やかなトランスコード処理は**できない**
    - 例えば Content Aware Encoding (プレビュー)
    - https://docs.microsoft.com/ja-jp/azure/media-services/latest/content-aware-encoding

# 作戦

- Video Indexer が内部で使用している Azure Media Services に Locator を設定する

# 用意するもの

- Azure Subscription
- Video Indexer のアカウント
    - Azure Media Services の挙動を確認するために、有料版で
- Azure Media Services Explorer Tools
    - v3 を使ってください
    - https://github.com/Azure/Azure-Media-Services-Explorer

# 手順

いきなりAPIコールするコードを書く前に、Azure Media Services Explorer Tools で挙動を確認しましょう😊

## 1. Video Indexer に動画 をアップロード

  以下の項目を変更します。

| 項目 | 値 | メモ |
|:--:|:--:|:--:|
| ストリーミングの品質 | アダブティブ ビットレート | 無線など不安定な回線での快適なストリーミングをやりやすくなります |

  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/4da96661-90ca-1691-7465-7e13ec28a374.png)

## 2. Azure Media Services Explorer Tools で Locator を追加

  - Video Indexer で使っている Azure Media Services アカウントと同じものであることを確認します

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/c92006a1-f9f1-f9c7-24b3-4bb9d0cacea4.png)

  - 3つの`アセット`が出来ています
  
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/8c0c61f2-83cc-d4ff-1df1-03f8351c15a3.png)

  - 一番上: `VideoAnalyzer` の出力結果
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/71ffa57a-50e5-5279-fe46-d7f2f0959658.png)
  
  - 真ん中: Encoding ジョブの出力
    - Locator が設定されている
    - Dynamic Encryption が設定されている - 認証・暗号化
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/915c21ac-b105-1375-4a72-781d3f2bd971.png)

  - 一番下: オリジナル動画

## 3. Encoding ジョブの出力アセットから `Locator` 作成

Locator は 1つのアセットに、100 個まで設定できます。これは、ユーザー毎に設定するのではなく、コンテンツホルダーとの契約での公開期間や、サービスメニューとしてのセキュリティ設定の違い (無料 / 有償ユーザーの違い) などをカバーするためのものです。

  Azure Media Services v3 のクォータと制限
  https://docs.microsoft.com/ja-jp/azure/media-services/latest/limits-quotas-constraints

ここでは、2つ目の Locator を追加します

- Locator の作成を選択
  ![vi2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/dd9ef09d-ae0d-4086-b69f-280eb932f998.jpeg)

....画面のレンダリングが乱れておりますが(涙)... 
そのまま[ロケーターを作成]を選択します
　　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/f2f4389d-3ab5-144a-df72-636f772d11db.png)


Locator が作成されます
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/88897c5b-9e8d-bc80-1076-c3b1e9dcd593.png)

作成後、Azure Media Services Explorer Tools 上では、`Publication` 列に 2つのアイコンが確認できます
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/f95e904c-89c8-2c52-2c5c-0db3d64d226d.png)

## 4. 再生してみましょう

[Azure Media Player での再生] を選択します
  ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/99635f8b-ab80-b2b6-deee-c46aa7cf2f77.png)

Locator が2つありますので、どちらを使うのか、というダイアログボックスが表示されます。
- 末尾が**manifest**で終わっているものを選択します。

  - こちら
    ![vi4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/891b044e-4fc4-6589-8c7c-0e5280a8a7f4.jpeg)

  - こちらは認証+暗号化設定 されている**オリジナル**。今回は使いません。Video Indexer の Portal 用
    ![vi5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/e7163bb9-3302-e5d6-f283-b38aee368cdd.jpeg)
        - ここ超大事です。実際には、コンテンツに必要な保護設定をしてください
        - ここでは動作確認のため、**保護設定なし**、にしています。データの暗号化も、認証も設定してませんので、ご注意ください **

!!! ばっちり再生 !!!
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/a8d96da3-5311-4931-1065-2b104eaa7f0c.png)

## 5. 後始末

Video Indexer でジョブ実行後、必要に応じて Azure Portal から Azure Media Services のリソースの停止を行ってください。

- Azure Media Servicesの [メディア占有ユニット] の `S3` が1つ残っています
    - S1 に変更
    - 数を0に
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/108143/2fcaf708-6564-839a-1e0e-f0bee7e22515.png)


- [ストリーミング エンドポイント] を `停止`

# 自動化のために

Azure Media Services は、APIベースのサービスであるため、自動化が可能です。
サンプルが幾つかありますので、適時ご参照ください。

ストリーミング ロケーター:
https://docs.microsoft.com/ja-jp/azure/media-services/latest/streaming-locators-concept

.NET / Java などのサンプル:
https://docs.microsoft.com/ja-jp/samples/browse/?products=azure-media-services

REST のサンプル:
https://github.com/Azure-Samples/media-services-v3-rest-postman

# まとめ
有料版ならではの選択肢を Video Indexer は提供しています。内部機能が、ご自身のアカウントで使えている事実を確認しながら、うまく作業フローの中で、自動化して使ってください。