HTMLMediaElement、Media Source Extension、Encrypted Media Extensionの各メソッドを(ポリフィルとして)実装しています。
開始の手順
セットアップ
- package.jsonファイルの
dependenciesセクションに、以下のライブラリ依存関係を追加します。
-
ターミナルウィンドウを開き、アプリフォルダに移動します。npmを実行して、このパッケージをアプリにインストールします。
-
babel.config.jsファイルを更新します。更新しない場合、実行時にアプリから「ReferenceError: Property ‘React’ doesn’t exist」という例外がスローされます。
-
manifest.tomlに、以下の権限を追加します。
使用方法
React NativeのVideoコンポーネント
Videoは、HTMLMediaElementインターフェイスを継承するHTMLVideoElementインターフェイスを実装するReact Nativeコンポーネントです。
このコンポーネントを使用すると、オーディオとビデオの両方を含むMP4、MPEG DASH、HLSなどの形式のオーディオおよびビデオコンテンツを再生できます。
このコンポーネントは、デフォルトのメディアコントロールGUIをサポートしています。
コンポーネントをレンダーツリーに追加し、その参照を保存します。この参照に対してHTMLMediaElementやHTMLVideoElementのメソッドを呼び出します。このコンポーネントでは、ビデオを画面上に表示する前にアプリでコンテンツをプレバッファリングすることはできません。プレバッファリングが必要な場合は、VideoPlayer JavaScriptクラスコンポーネントを使用します。
VideoPlayerコンポーネント
VideoPlayerコンポーネントは、HTMLMediaElementインターフェイスを継承するHTMLVideoElementインターフェイスを実装します。
HTMLVideoElementはTypeScriptクラスであり、React Nativeコンポーネントではありません。
デフォルトでは、ビデオは画面上にレンダリングされず、メディアコントロールのGUIも表示されません。
アプリは、独自のメディアコントロールUIを構築し、再生エクスペリエンスを制御する必要があります。
アプリは、VideoPlayerのインスタンスを作成し、それを使用して、画面上にビデオをレンダリングせずに、コンテンツのバッファリングを開始する必要があります。
ビデオを画面に表示するには、アプリで次の処理を行う必要があります。
KeplerVideoSurfaceViewReact Nativeコンポーネントをレンダーツリーに追加するonSurfaceViewCreatedイベントを受信する- イベントコールバックで取得したサーフェスハンドルを、
setSurfaceHandleメソッドを介してVideoPlayerに渡す
React NativeのAudioコンポーネント
Audioは、HTMLMediaElementインターフェイスを継承するHTMLAudioElementインターフェイスを実装するReact Nativeコンポーネントです。
オーディオのみを含むMP3やMPEG DASH/HLSなどのオーディオを再生するには、このコンポーネントを使用します。
このコンポーネントは、デフォルトのメディアコントロールGUIをサポートしています。
コンポーネントをレンダーツリーに追加し、その参照を保存します。
この参照に対してHTMLMediaElementやHTMLAudioElementのAPIを呼び出します。
このコンポーネントを使用して、オーディオをデバイス上で再生する前にアプリでコンテンツをプレバッファリングすることはできません。プレバッファリングが必要な場合は、AudioPlayer JavaScriptクラスコンポーネントを使用します。
AudioPlayerコンポーネント
AudioPlayerコンポーネントは、HTMLMediaElementインターフェイスを継承するHTMLAudioElementインターフェイスを実装します。
AudioPlayerはTypeScriptクラスであり、React Nativeコンポーネントではありません。
オーディオのみを含むMP3やMPEG DASH/HLSなどの形式を再生するには、このコンポーネントを使用します。
アプリでは、AudioPlayerのインスタンスを作成し、それを使用して、再生を開始せずにコンテンツのバッファリングを開始する必要があります。
メディアコントロールのGUIは表示されません。アプリには、独自のメディアコントロールUIを構築し、再生エクスペリエンスを制御することが求められます。
KeplerVideoSurfaceView
KeplerVideoSurfaceViewは、画面上にビデオフレームをレンダリングするReact Nativeコンポーネントです。
KeplerVideoSurfaceViewを使用できるのは、VideoPlayerをプレバッファリングモードで使用しており、複数のプレーヤーが異なるコンテンツを同時にプリバッファリングする場合のみです。
アプリでは、onSurfaceViewCreatedイベントコールバックで渡されたサーフェスハンドルを、画面上にレンダリングする必要のあるビデオプレーヤーインスタンスに関連付けます。
KeplerCaptionsView
KeplerCaptionsViewは、クローズドキャプションと字幕を画面上にレンダリングするReact Nativeコンポーネントです。このコンポーネントを使用できるのは、VideoPlayerコンポーネントやAudioPlayerコンポーネントを使用してプレバッファリングモードで動作している場合のみです。
アプリは、onCaptionViewCreatedイベントコールバックで渡されたキャプションハンドルを、setCaptionViewHandleメソッドを通じてVideoPlayerとAudioPlayerに関連付けて、プレーヤーがキャプションや字幕を画面上にレンダリングできるようにします。
現在、キャプションはデフォルトではレンダリングされません。
レンダリングを有効にするには、以下のコマンドを実行します。
HTMLMediaElement
HTMLMediaElementは、Vega向けReact Nativeアプリが再生を制御するために使用するメインのプレーヤーインターフェイスです。このインターフェイスは、React NativeのVideoおよびAudioコンポーネントと、TypeScriptのVideoPlayerおよびAudioPlayerコンポーネントに実装されています。
詳細については、https://html.spec.whatwg.org/multipage/media.html(英語のみ)を参照してください。
以下で説明するように、アプリはコンテンツのタイプ(アダプティブまたは非アダプティブ)に応じて2つのモードで再生を開始できます。
-
URLモードによる非アダプティブストリーミング形式(MP4、MP3、MKVメディアファイルなど)の再生。AudioコンポーネントとVideoコンポーネントは、「src」属性により、MP4、MP3、MKVなどの非アダプティブストリーミング形式の再生をサポートします。
-
src属性にメディアURLを設定します。
アプリで「src」属性にコンテンツのURLを設定します。
`
video.src = [some url] or audio.src = [some url]`
-
src属性にメディアURLを設定します。
アプリで「src」属性にコンテンツのURLを設定します。
`
-
Media Source Extension(MSE)モードによるアダプティブストリーミング形式(HLS、MPEG DASHなど)の再生。MSE APIは、HLSやMPEG DASHなどのアダプティブストリーミング形式をサポートしています。このAPIを使用すると、アプリでHLSやDASHなどのアダプティブストリーミングコンテンツのメディアセグメントをプレーヤーに挿入できます。アプリは、マニフェストをダウンロードして解析し、コンテンツがサポートするさまざまなビットレート品質レベルとバリエーションを判断します。アプリは、利用可能なネットワーク帯域幅に基づいて、適切な品質レベルのメディアセグメントをダウンロードします。続けて、
MediaSourceメソッドとSourceBufferメソッドを介してプレーヤーにそのメディアセグメントを渡します。 これらのAPIの使用方法の詳細については、https://www.w3.org/TR/media-source-2/(英語のみ)を参照してください。-
MediaSourceオブジェクトを作成します。
let mediaSource = new MediaSource(); -
MediaSourceのBlob URLを作成します。
let url = URL.createObjectURL(mediaSource) -
MediaSourceをビデオコンポーネントまたはオーディオコンポーネントに関連付けます。
video.src = urloraudio.src = url -
MIMEタイプに基づいて
SourceBufferを追加します。
let sourceBuffer = mediaSource.addSourceBuffer(mimeType)
SourceBufferに追加します。 -
MediaSourceオブジェクトを作成します。
一般的なメディア操作
HTMLMediaElementのメソッドを通じてメディア再生やその他の一般的な操作を制御するには、以下に示すように、React NativeのAudioコンポーネントまたはVideoコンポーネントの参照を使用します。
再生の開始
video.play()またはaudio.play()
再生の一時停止
video.pause()またはaudio.pause()
現在の再生時間の取得
現在の再生位置を取得するには、currentTime属性を読み取ります。
console.log('${video.currentTime}');またはconsole.log('${audio.currentTime}');
目的の位置へのシーク
目的の位置にシークするには、currentTime属性を設定します。
video.currentTime = seekPosition;またはaudio.currentTime = seekPosition;
イベントの処理
Vega W3C Media APIでは、W3Cのメディア仕様に記載されているすべてのイベントがサポートされています。VideoまたはAudioにイベントハンドラーを登録するには、以下の2つの方法があります。-
React NativeのAudio/Videoコンポーネントのプロパティを使用します。サポートされているプロパティの一覧については、
MediaPropsを参照してください。たとえば、endedのイベントハンドラーは次のように登録できます。
-
EventTarget addEventListener()メソッドを使用します。 VideoコンポーネントとAudioコンポーネントには、EventTargetインターフェイスの2つのメソッド、addEventListenerとremoveEventListenerが実装されています。 アプリでは、これらのメソッドを使用して、React NativeのAudio/Videoコンポーネントの参照にイベントハンドラーを登録できます。たとえば、次のようにイベントハンドラーを登録できます。video.addEventListener("ended", onEnded);
AudioTrackList、VideoTrackList、MediaSource、SourceBuffer、SourceBufferListなど、イベントを生成するものがあります。これらのイベントは、EventTargetのaddEventListenerメソッドによって処理されます。これらのメソッドはすべて、addEventListenerをサポートしています。
注:これらのメソッドのEventHandler属性はサポートされません。
次の例は、VideoTrackListのaddtrackイベントを処理する方法を示しています。
video.videoTracks.addEventListener("addtrack", onVideoTrackAdded);
また、MediaSourceのsourceopenイベントを処理するには、次のようにします。
mediasource.addEventListener("sourceopen", onMediaSourceOpen)
Encrypted Media Extensionは、MSEモードでのみDRMで保護された再生をサポートします。詳細については、https://w3c.github.io/encrypted-media/(英語のみ)を参照してください。
サポート対象外のHTMLMediaElementの機能
- networkState
- load
- canPlayType - すべてのタイプをサポートしていることを示します。
- fastSeek -
currentTimeの設定によるシークと同じ動作をします。 - getStartDate
- addTextTrack
- preload
- defaultPlaybackRate、playbackRate
- preservesPitch
- loop
- ボリューム、ミュート
サポート対象外のMedia Source Extension(MSE)の機能
MediaSource API(https://www.w3.org/TR/media-source-2/#mediasource(英語のみ))
-
EventHandler属性はサポートされません。アプリでは、MediaSourceに実装されているEventTargetインターフェイスのaddEventListenerメソッドを使用してイベントハンドラーを登録できます。 -
audioTracks、videoTracks、textTracks
SourceBuffer API(https://www.w3.org/TR/media-source-2/#sourcebuffer(英語のみ))
-
changeType -
EventHandler- 以下の属性はサポートされません。現在、アプリでは、SourceBufferに実装されているEventTargetインターフェイスのaddEventListenerメソッドを使用してイベントハンドラーを登録できます。
SourceBufferList API(https://www.w3.org/TR/media-source-2/#sourcebufferlist(英語のみ))
-
以下の
EventHandler属性はサポートされません。現在、アプリでは、SourceBufferListに実装されているEventTargetインターフェイスのaddEventListenerメソッドを使用できます。
関連トピック
APIリファレンス
クラス
- Audio -
HTMLAudioElementインターフェイスを実装するReact Nativeコンポーネントです。 - AudioPlayer - *
- Event
- HTMLAudioElement
- HTMLMediaElement - https://html.spec.whatwg.org/multipage/media.html#htmlmediaelement(英語のみ)
- HTMLVideoElement
- InvalidStateError
- KeplerCaptionsView - クローズドキャプションや字幕をレンダリングするReact Nativeコンポーネントです。
- KeplerMediaControlHandler
- KeplerShareableSurfaceView - これは、画面上にビデオフレームをレンダリングするReact Nativeコンポーネントです。
- KeplerVideoSurfaceView - これは、画面上にビデオフレームをレンダリングするReact Nativeコンポーネントです。
- Media - https://html.spec.whatwg.org/multipage/media.html#htmlmediaelement(英語のみ)
- MediaError - すべてのメディア要素にはエラーステータスが関連付けられています。
- MediaSource -
MediaSourceインターフェイスを実装します。EventEmitterを使用してイベントを発行します。 - NotSupportedError
- SourceBufferImpl - このクラスはSourceBufferインターフェイスを実装しています。
- TextDecoder
- TextTrackImpl - それぞれ別の実装が必要です。
- TrackEvent - https://html.spec.whatwg.org/multipage/media.html#trackevent(英語のみ)
- Video -
HTMLVideoElementインターフェイスを実装するReact Nativeコンポーネントです。 - VideoPlayer - *
- VTTCue - https://www.w3.org/TR/webvtt1/#the-vttcue-interface(英語のみ)
- W3CLibPolyfill
- WebCrypto
インターフェイス
- AudioConfiguration - https://w3c.github.io/media-capabilities/#dictdef-audioconfiguration(英語のみ)
- AudioTrack - オーディオトラックオブジェクトを表します。
- AudioTrackList - 追加情報については、以下を参照してください。
- CDMiInterface
- EventListener
- EventTarget - https://dom.spec.whatwg.org/#interface-eventtarget(英語のみ)
- KeySystemTrackConfiguration - https://www.w3.org/TR/media-capabilities/#keysystemtrackconfiguration(英語のみ)
- MediaCapabilities - https://w3c.github.io/media-capabilities/#media-capabilities-interface(英語のみ)
- MediaCapabilitiesDecodingInfo - https://w3c.github.io/media-capabilities/#dictdef-mediacapabilitiesdecodinginfo(英語のみ)
- MediaCapabilitiesInfo - https://w3c.github.io/media-capabilities/#dictdef-mediacapabilitiesinfo(英語のみ)
- MediaCapabilitiesKeySystemConfiguration - https://w3c.github.io/media-capabilities/#mediacapabilitieskeysystemconfiguration(英語のみ)
- MediaConfiguration - https://w3c.github.io/media-capabilities/#dictdef-mediaconfiguration(英語のみ)
- MediaDecodingConfiguration - デコード機能への入力は、MediaDecodingConfigurationディクショナリで表されます。
- MediaKeys - MediaKeysオブジェクトは、関連付けられたキーのセットを表します。
- MediaKeySession - これはメディアキーセッションを表します。
- MediaKeysSystemAccess - MediaKeySystemAccessオブジェクトはキーシステムへのアクセスを提供します。
- MediaKeySystemConfiguration - https://www.w3.org/TR/encrypted-media/#mediakeysystemconfiguration-dictionary(英語のみ)
- MediaKeySystemMediaCapability - MIMEタイプのキーシステムの堅牢性を指定します。
- MediaProvider
- MediaSourceHandle - TextTrackCue。
- SourceBuffer - 追加情報については、以下を参照してください。
- SourceBufferList - 追加情報については、以下を参照してください。
- TextTrack - https://html.spec.whatwg.org/multipage/media.html#texttrack(英語のみ)
- TextTrackCue - https://html.spec.whatwg.org/multipage/media.html#texttrackcue(英語のみ)
- TextTrackCueList - https://html.spec.whatwg.org/multipage/media.html#texttrackcuelist(英語のみ)
- TextTrackList - 追加情報については、以下を参照してください。
- TimeRanges - 時間の範囲(期間)のリストを表します。
- VideoConfiguration - https://w3c.github.io/media-capabilities/#dictdef-videoconfiguration(英語のみ)
- VideoTrack
- VideoTrackList - 追加情報については、以下を参照してください。
- W3CMediaTurboModuleInterface
列挙型
- AppendMode - 追加情報については、以下を参照してください。
- AudioContentType - オーディオコンテンツのタイプを表します。
- AudioUsageType - オーディオ使用タイプを表します。
- EndOfStreamError - 追加情報については、以下を参照してください。
- ReadyState - 追加情報については、以下を参照してください。
型エイリアス
- BufferSource - 詳細については、以下を参照してください。
- CanPlayTypeResult -「未定」:
- ColorGamut - VideoConfigurationには、次のいずれかのタイプを含めることができます。
- HdrMetadataType - HdrMetadataTypeが存在する場合、指定されたタイプのHDRメタデータを解釈する機能を表します。
- InitDataType - 暗号化関連の初期化データ形式を指定します。
- MediaDecodingType - MediaDecodingConfigurationには次の3つのタイプがあります。
- MediaKeySessionType - メディアキーセッションのタイプを指定します。
- MediaKeysRequirement - 必須:
- MediaPlayerDeInitStatus - このファイルはATVKeplerNFPBindingsInterface vmpf-devブランチからコピーされます。
- Robustness - SECURE:セキュアなビデオバッファーを使用します。
- TextTrackKind - テキストトラックのタイプを表します。
- TextTrackMode - テキストトラックの表示モードを表します。
- TransferFunction - VideoConfigurationには、次のいずれかのタイプを含めることができます。
関数
- decodingInfo
- KeplerVideoView - これは以下の要素をレンダリングするReact Nativeコンポーネントです。
- QuotaExceededError
- requestMediaKeysSystemAccess - TODO:将来のリリース(MR32以降)では’requestMediaKeysSystemAccess’を廃止します。
- requestMediaKeySystemAccess - https://www.w3.org/TR/encrypted-media/#dom-navigator-requestmediakeysystemaccess(英語のみ)

