# 起動方法

プレイヤーはURLによる暗黙的インテントにより起動できます。URLの仕様と、インテント起動の例を示します。

# URL仕様

URLのSchemeは環境変数で設定されたものを使用してください。Scheme以外の構成要素(ホスト名、パス、クエリパラメータなど)に関しては、ユーザーガイドの「インテント起動(動画再生)」を参照してください。

以下にURLの注意事項を示します。

  • インテント起動のURLに含めるクエリ文字列は、RFC 2396の仕様に基づきURLエンコードしてください。
  • HLSコンテンツを再生する場合
    <content_path>に指定するパスの拡張子は.m3u8です。
  • MP4コンテンツを再生する場合
    <content_path>に指定するパスの拡張子は.mp4です。
  • DASH(Widevine)コンテンツを再生する場合
    <content_path>に指定するパスの拡張子は.mpdです。
    wvstreamidが必須です。(ライセンス取得に使用します)
  • DASH(Clear)コンテンツを再生する場合
    <content_path>に指定するパスの拡張子は.mpdです。

# Androidでのインテント起動例

以下にインテント起動の実装例を示します。URLは後述する各コンテンツのURLの例を参考にしてください。

String url = "<scheme>://example.co.jp/bigbuckbunny.wvm?sid=…";
Intent intent = new Intent("android.intent.action.VIEW", Uri.parse(url));
getActivity().startActivity(intent);

# iOSでのインテント起動例

以下にインテント起動の実装例を示します。URLは後述する各コンテンツのURLの例を参考にしてください。

NSString *url = @"<scheme>://example.co.jp/bigbuckbunny.wvm?sid=...";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];

# HLSコンテンツの再生

# ストリーミング再生(VOD Streaming, Live Streaming)

HLSコンテンツの再生は以下の再生の場合においても、インテント起動のURLに変わりはありません。

  • VOD
  • LIVE
  • DVR

以下はインテント起動のURLの例です。

<scheme>://example.co.jp/bigbuckbunny.m3u8?videoquery=v%3D1%26e%3Dsample_episode%26w%3D1234567890&sid=1234567890&title=HLS%20Test&aduri=https%3A%2F%2Fexample.co.jp%2FVMAP.php%3Fad%3D200

このURLにより以下のコンテンツ(本編)および広告を再生します。

本編:https://example.co.jp/bigbuckbunny.m3u8?v=1&e=sample_episode&w=1234567890(表示するタイトルは"HLS Test")

広告:https://example.co.jp/VMAP.php

# ローカル再生

端末内のHLSコンテンツを再生するには、以下の条件を満たす必要があります。

  • HLSコンテンツは、プレイヤーを組み込んだアプリが書き込む権限のあるフォルダに配置されていること
    • Androidの例
      • Context#getExternalFilesDir(String)を用いて取得したパスを推奨します。
      • Androidのシステムによって生成されるフォルダ(/sdcard/Moviesなど)や、内部ストレージや外部ストレージ直下に作成したフォルダは推奨していません。
    • iOSの例
      • アプリのDocumentsフォルダ以下のパスを推奨します。
  • HLSコンテンツを構成するメディアプレイリストファイル(.m3u8)/メディアセグメントファイル(.ts)/キーファイル(AESで暗号化されている場合のみ必要)はすべて同じフォルダ内に配置されていること
  • マスタープレイリストファイルを用いた再生はサポートしていません。
  • メディアプレイリストファイル内のパスは、ファイル名のみとすること(相対パスは不可)
  • メディアセグメントファイルのファイル名、キーファイルのファイル名はすべて異なること
  • キーファイルは、以下の条件をすべて満たすこと
    • キーのファイル名は、メディアプレイリストファイルのEXT-X-KEYタグに記載したファイル名のMD5ハッシュ値とすること(アルファベットはすべて小文字とすること)
    • キーファイルは以下のパラメータを用いて暗号化(アルゴリズムはAES/CBC)されていること
    • Androidの場合
      • 暗号化に使用する鍵:SharedPreferencesよりキー"hlsKeyEncryptionKey"で取得できる文字列のBASE64デコードで得られる16byteのバイナリデータ
      • 暗号化に使用する初期化ベクトル(IV):SharedPreferencesよりキー"hlsKeyEncryptionIV"で取得できる文字列のBASE64デコードで得られる16byteのバイナリデータ
    • iOSの場合
      • 暗号化に使用する鍵:UserDefaultsよりキー"hlsKeyEncryptionKey"で取得できる16byteのバイナリデータ
      • 暗号化に使用する初期化ベクトル(IV):UserDefaultsよりキー"hlsKeyEncryptionIV"で取得できる16byteのバイナリデータ

以下のようなメディアプレイリスト(hls.m3u8)を端末内に保存して再生する場合、

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:11
#EXT-X-KEY:METHOD=AES-128,URI="key.dat"
#EXTINF:10.031011,
segment_000.ts
#EXTINF:10.015600,
segment_001.ts
#EXTINF:10.000167,
segment_002.ts
#EXT-X-ENDLIST

以下のようにファイルを配置してください。

/(コンテンツ保存先ルートパス)/hls_demo/hls.m3u8

/(コンテンツ保存先ルートパス)/hls_demo

/segment_000.ts

/(コンテンツ保存先ルートパス)/hls_demo

/segment_001.ts

/(コンテンツ保存先ルートパス)/hls_demo

/segment_002.ts

/(コンテンツ保存先ルートパス)/hls_demo

/407fec7332fb8af4008186b39e1042ee
  • "407fec7332fb8af4008186b39e1042ee"は、EXT-X-KEYタグに指定されている"key.dat"のMD5ハッシュ値です。
  • Androidの場合、コンテンツ保存先ルートパスは、以下のようなパスです。
    "/storage/emulated/0/Android/data/jp.co.example.app/files/"
  • iOSの場合、コンテンツ保存先ルートパスは、以下のようなパスです。
    "/var/mobile/Containers/Data/Application/00000000-0000-0000-0000-00000000/Documents/"

以下はインテント起動のURLの例です。インテント起動時のコンテンツのパスは絶対パスで指定してください。

  • Android
<scheme>:///storage/emulated/0/Android/data/jp.co.example.app/files/hls_demo/hls.m3u8?sid=1234567890&title=HLS%20Test

上記例のjp.co.example.appはアプリごとに異なりますので注意してください。

  • iOS
<scheme>:///var/mobile/Containers/Data/Application/00000000-0000-0000-0000-00000000/Documents/hls_demo/hls.m3u8?sid=1234567890&title=HLS%20Test

上記の例の00000000-0000-0000-0000-00000000はアプリごとに異なりますので注意してください。

それぞれのURLへのアクセスの際、インテント起動時に指定された以下のパラメータを使用します。

  • セッションID(URLのクエリパラメータ"sid"に指定された値)

# DASHコンテンツの再生

# ストリーミング再生(VOD Streaming, Live Streaming)

DASHコンテンツの再生は以下どちらの再生の場合においても、インテント起動のURLに変わりはありません。

  • VOD
  • LIVE

以下はインテント起動のURLの例です。

<scheme>://example.co.jp/bigbuckbunny.mpd?sid=1234567890&title=Widevine%20Test&aduri=https%3A%2F%2Fexample.co.jp%2FVMAP.php%3Fad%3D100&wvstreamid=bigbuckbunny&ticket=abcdefg

上記の例のインテント起動URLで再生するコンテンツがDASH(Widevine)コンテンツの場合、DASH(Widevine)コンテンツライセンス要求URLにアクセスしライセンスを取得、インストールを行います。DASHコンテンツがDASH(Widevine)コンテンツかDASH(Clear)コンテンツであるかの判定は、MPDファイルのContentProtection要素で判断します。ライセンス要求URLのアクセスの際、インテント起動時に指定された以下のパラメータを使用します。

  • ビデオID(URLのクエリパラメータ"wvstreamid"に指定された値)
  • チケット(URLのクエリパラメータ"ticket"に指定された値)

DASH(Clear)コンテンツの場合はライセンス要求を行わず、再生を開始します。

# ローカル再生

端末内のDASHコンテンツを再生するには、以下の条件を満たす必要があります。

  • DASHコンテンツは、プレイヤーを組み込んだアプリが書き込む権限のあるフォルダであること
    • Androidの例
      • Context#getExternalFilesDirString)を用いて取得したパスを推奨します。
      • Androidのシステムによって生成されるフォルダ(/sdcard/Moviesなど)や、内部ストレージや外部ストレージ直下に作成したフォルダは推奨していません。
    • iOSの例
      • アプリのDocumentsフォルダ以下のパスを推奨します。
  • DASHコンテンツを構成するMPDファイル/映像ファイル/音声ファイルはすべて同じフォルダ内に配置されていること
  • 映像ファイルのファイル名、音声ファイルのファイル名はすべて異なること
  • MPDファイル内のすべての映像ファイル、すべての音声ファイルはMPDファイルが配置されたフォルダに配置されていること
  • MPDファイルは拡張子が.mpdであること
  • 同フォルダ内にsidというファイルがないこと(プレイヤーにてsidというファイルを生成するため)

またiOSについては以下の条件も満たす必要があります。

  • 同フォルダ内に.licという拡張子のファイルが存在しないこと(プレイヤーにて.licという拡張子のファイルを生成、変更、削除するため)

以下はインテント起動のURLの例です。インテント起動時のコンテンツのパスは絶対パスで指定してください。

  • Android
<scheme>:///storage/emulated/0/Android/data/jp.co.example.app/files/dash_demo/widevine.mpd?sid=1234567890&title=DASH%20Test&wvstreamid= dash_demo

上記例のjp.co.example.appはアプリごとに異なりますので注意してください。

  • iOS
<scheme>:///var/mobile/Containers/Data/Application/00000000-0000-0000-0000-00000000/Documents/dash_demo/widevine.mpd?sid=1234567890&title=DASH%20Test&wvstreamid=dash_demo

上記の例の00000000-0000-0000-0000-00000000はアプリごとに異なりますので注意してください。

上記の例のインテント起動URLで再生が開始された場合、プレイヤー(Android)はライセンスが端末内にインストールされているか確認します。ライセンスが端末内にインストールされていない場合、または端末内にインストールされたライセンスの有効期限が切れている場合、以下の処理を行います。プレイヤー(iOS)は常に以下の処理を行います。ただし、DASH(Clear)コンテンツであった場合にはこれらの処理は行わず、再生を開始します。

  • DASH(Widevine)コンテンツライセンスコントローラーURLにアクセスしチケットを取得
  • DASH(Widevine)コンテンツライセンス要求URLにアクセスしライセンスを取得、インストール

それぞれのURLへのアクセスの際、インテント起動時に指定された以下のパラメータを使用します。

  • セッションID(URLのクエリパラメータ"sid"に指定された値)
  • ビデオID(URLのクエリパラメータ"wvstreamid"に指定された値)