6
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[MPEG-DASH] dashJSでアダプティブストリーミングを再生する

Last updated at Posted at 2020-05-24

はじめに

dash.jsでアダプティブストリーミングを行う方法を紹介します。(2020年5月現在)

動作環境
OS: Windows 10 Pro
Google Chrome: 81.0.4044.129
Mozilla Firefox: 75.0
Microsoft Edge: 81.0.416.64(Chromium版)
dashJS: 3.1.0

JavaScript 拡張API

dash.js では、下記のMSEEMEの拡張APIが含まれております。そのため、これらの拡張APIを意識することなく再生することができます。

MSE

HTML5 video(Media Element)がアダプティブストリーミングにサポートしていないブラウザがあります。MSE(Media Source Extensions)では、サポートするためのHTML5拡張APIです。拡張APIのMediaSourceSourceBufferオブジェクトを使用して、マニフェストファイルを解析してセグメントファイルを読み込むことを行っています。

EME

  • EME = Encrypted Media Extensions
  • HTMLMediaElement を拡張してDRM再生を制御するJavaScript API
  • W3C によって標準化
  • CDMと対話するためのインタフェースを提供する。CDMが特定の何かに依存しない。
  • メディアファイル自体の復号化する機能はない。CDMが復号化する。

HTML5 video(Media Element)は標準でDRMがサポートされていません。EME(Encrypted Media Extensions)は、DRMの使用を可能にするHTML5拡張APIです。MediaKeysMediaKeySessionオブジェクトを使用して、ライセンスサーバーからKeyを取得してメディアファイルを復号するCDMにリクエストします。

ライブラリの読み込み

dashJS
https://github.com/Dash-Industry-Forum/dash.js

<script src="../lib/dash.all.debug.js"></script>

DRMなし

デモはこちら

DRMなし
let player = dashjs.MediaPlayer().create();
player.initialize(document.getElementById('video'), '../../mpd/std/profile_live/Bullfinch.mpd', true);
player.updateSettings({
    'debug': {
        'logLevel': dashjs.Debug.LOG_LEVEL_INFO
    }
});
ブラウザ名 動作可否
Google Chrome
Mozilla Firefox
Microsoft Edge

initializeの第2引数にビデオリソースを指定します。

DRMあり

ClearKey

デモはこちら

ClearKey
player.initialize(document.getElementById('video'), '../../mpd/drm/clearkey/Bullfinch.mpd', true);
player.setProtectionData({
    'org.w3.clearkey': {
        'clearkeys': {
            'OCYfniLWkYVAQNXDwaqUeQ': 'jfUe14GofJhw1Sw0yde2eQ'
        }
    }
});

ClearKeyでは、setProtectionDataにClearyKeyのDRMシステム名、clearkeysにKeyID:Key を指定します。

ブラウザ名 動作可否
Google Chrome
Mozilla Firefox
Microsoft Edge

Widevine

デモはこちら

Widevine
player.initialize(document.getElementById('video'), '../../mpd/drm/widevine/Bullfinch.mpd', true);
player.setProtectionData({
    'com.widevine.alpha': {
        serverURL: 'https://widevine-proxy.appspot.com/proxy',
    }
});

Widevineでは、setProtectionDataにWidevineのDRMシステム名、serverURLにライセンスサーバーURLを指定します。

ブラウザ名 動作可否
Google Chrome
Mozilla Firefox
Microsoft Edge

PlayReady

デモはこちら

PlayReady
player.initialize(document.getElementById('video'), '../../mpd/drm/playready/Bullfinch.mpd', true);
player.setProtectionData({
    'com.microsoft.playready': {
        serverURL: 'https://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(kid:header,contentkey:jfUe14GofJhw1Sw0yde2eQ==)',
    }
});

PlayReadyでは、setProtectionDataにPlayReadyのDRMシステム名、serverURLにライセンスサーバーURLを指定します。

ブラウザ名 動作可否
Google Chrome ×
Mozilla Firefox ×
Microsoft Edge

マルチDRM(Widevine+PlayReady)

デモはこちら

マルチDRM
player.initialize(document.getElementById('video'), '../../mpd/drm/multi/Bullfinch.mpd', true);
player.setProtectionData({
    'com.widevine.alpha': {
        serverURL: 'https://widevine-proxy.appspot.com/proxy',
    },
    'com.microsoft.playready': {
        serverURL: 'https://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(kid:header,contentkey:O9ovQDRMfe9hQie5wPA+Jg==)',
    }
});

マルチDRMでは、setProtectionDataにDRMシステム名を複数指定します。ブラウザ側が対応しているDRMで再生を行います。

ブラウザ名 動作可否
Google Chrome
Mozilla Firefox
Microsoft Edge

おわりに

今回、dashJSによるアダプティブストリーミングの再生について纏めました。
メディアファイルの作成方法については別の投稿で紹介していますので
是非ご覧ください。ありがとうございました。

関連リンク

以上です。

6
11
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
6
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?