トンネルモードの再生
Fire TVデバイスの中には、ハードウェアデコーダーが4K@60fpsの再生をサポートしているものがあります。そのように高い解像度とフレームレートでビデオを再生する場合、メディアパイプラインのタイミング要件が非常に厳しくなります。カーネルのスレッドやプロセスのスケジューリング制限によって、アプリが4Kフレームを16ミリ秒間隔でレンダリングできないことがあります。これは結果的にドロップフレームを招き、映画のユーザーエクスペリエンスを標準以下に落としてしまうこともあります。ハードウェア性能を最大限に発揮させるには、トンネルモードでの再生が有効です。
トンネルモードの再生を有効にする方法
トンネルモードの再生を有効にするために必要となる主な変更は、次のとおりです。
-
AudioManagerからAudioTrackセッションIDを問い合わせます。
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); int audioSessionId = audioManager.generateAudioSessionId();
-
トンネルモードに対応するようにビデオデコーダーを構成します。
format.setFeatureEnabled(MediaCodecInfo.CodecCapabilities.FEATURE_TunneledPlayback, true);
-
AudioTrackセッションIDをビデオデコーダーに設定します。
format.setInteger(android.media.MediaFormat.KEY_AUDIO_SESSION_ID, audioSessionId);
-
問い合わせた上記のセッションIDでAudioTrackを作成し、AudioAttributesフラグ
FLAG_HW_AV_SYNC
を設定します。AudioAttributes attributes = new AudioAttributes.Builder() .setLegacyStreamType(AudioManager.STREAM_MUSIC) .setFlags(AudioAttributes.FLAG_HW_AV_SYNC) .build(); AudioFormat format = new AudioFormat.Builder() .setEncoding(targetEncoding) .setSampleRate(sampleRate) .setChannelMask(channelConfig) .build(); int mode = AudioTrack.MODE_STREAM; AudioTrack audioTrack = new AudioTrack(attributes, format, bufferSize, mode, audioSessionId);
-
ビデオデコーダーに対して
dequeueOutputBuffer
とreleaseOutputBuffer
を呼び出さないでください。 -
AudioTrackには、追加のヘッダー情報を自動的に作成するwrite APIが用意されています。詳細については、こちら(英語のみ)を参照してください。
注: 追加のパラメーターは、書き込まれるデータに対応するタイムスタンプです。
トンネルモードの再生についての関連項目
トンネルモードの再生を実装する方法の詳細については、以下のExoplayer 2のページを参照してください。
- Enable tunneling end-to-end(英語のみ)
- Support tunneling in video renderer(英語のみ)
- Report tunneling support via RendererCapabilities API(英語のみ)
- Plumbing to enable tunneling on AudioTrack from renderers(英語のみ)
トンネルモードの制限
このドキュメントに記載されたトンネルモードの再生に関する情報は、Fire OS 6以降で動作するすべてのFire TVデバイスに適用されます。ただし、これには以下の制限があります。
-
Fire OS 6以降を搭載するすべてのFire TVストリーミングメディアプレーヤーでは、VP9およびHEVCデコーダーのトンネルモードがサポートされます。ただし、次のような制限事項があります。
- Fire TV Cube - 第2世代(2019): zトンネルモードはセキュアデコーダーでのみサポートされます。ただし、暗号化されていないコンテンツをアプリがトンネルモードで再生する場合は、再生にセキュアデコーダーパイプラインを使用できます。詳細については、セキュアデコーダーの要件を参照してください。
-
すべてのFire TVでは、セキュア再生と非セキュア再生の両方で、h264、h265、VP9などの一般的なビデオコーデックのトンネルモードがサポートされます。ただし、次のような制限事項があります。
- Insignia HD - Fire TV(2018、日本未対応)、Toshiba HD - Fire TV(2018、日本未対応)、Toshiba 4K - Fire TV(2018、日本未対応)では、モノラルまたはマルチチャンネルのPCMはサポートされません。
Last updated: 2021年8月23日