ドルビーの統合ガイドライン(Fire TV向け)


ドルビーの統合ガイドライン(Fire TV向け)

このドキュメントでは、ドルビーデジタルやドルビーデジタルプラスのオーディオコンテンツ対応アプリを手がけたい開発者を対象に、ドルビーの統合ガイドラインについて説明します。

Amazon Fire TVでドルビー設定を確認するには、[設定] > [ディスプレイとサウンド] > [オーディオ] > [Dolby Digital出力] を選択します。

用語

このドキュメントでは次の略語を使用します。

  • EAC3: ドルビーデジタルプラス(DDP)
  • AC3: ドルビーデジタル(DD)

ドルビーオーディオを再生する4つの方法

アプリでドルビー(DD/DDP)オーディオ対応コンテンツを再生する方法は次の4つです。

  1. カスタムメディアプレーヤーを使用する方法
  2. ExoPlayerを使用する方法
  3. そのほかのメディアプレーヤーを使用する方法
  4. Android MediaPlayerを使用する方法

選択肢その1: カスタムメディアプレーヤーを使用する方法

AudioManagerAudioTrack、オプションのMediaCodec APIを使用するカスタムプレーヤーを実装します。このセクションでは、AudioManager、AudioTrack、オプションのMediaCodec APIを使用してドルビーオーディオ対応コンテンツを再生する方法を説明します。これはAndroid推奨のアプローチです。

AudioManagerの概要

Android Lによって、受信側のシンク機能を報告する、AudioManagerACTION_HDMI_AUDIO_PLUGインテントが拡張されました。このインテントは、HDMIがデバイスに接続されたときや切断されたときにブロードキャストされます。

また、このインテントでは、EXTRA_ENCODINGSを介して、接続されたエンドポイントの機能(AVRまたはTV)をアプリが検出するように設定することもできます。使用できる値は、ENCODING_XXXXという値です。たとえば、次のようになります。

AudioTrackの概要

Android Lでは、AudioFormatにENCODING_AC3ENCODING_E_AC3エンコード形式のサポートが追加されました。AudioTrackがドルビーエンコード形式で構成され、接続されるエンドポイントもその形式をサポートしている場合、AudioTrackはドルビーのRAWビットストリームを入力として受け入れます。そのビットストリームは、IEC61937に準じてパケット化され、エンドポイントに伝送されます。AudioTrackは、クリアな(暗号化されていない)入力ビットストリームのみサポートします。

また、接続されたエンドポイントがこのエンコード形式をサポートしていなければ、AudioTrackの作成はできません。

アプリはACTION_HDMI_AUDIO_PLUGインテントを使用して、接続デバイスでサポートされるドルビーエンコード形式のリストを確認し、そのいずれかの形式でAudioTrackを作成することができます。対応するドルビーのRAWビットストリーム(クリア)は入力としてAudioTrackに渡され、パススルー方式でドルビーの再生が実行されます。

また、AudioTrackでは、接続されたエンドポイントがDDのみサポートしている場合、DDPビットストリームをDDにトランスコードすることもできます。エンドポイントがDDのみをサポートしている場合にこの機能をアプリに取り入れるには、ACTION_HDMI_AUDIO_PLUGインテントのEXTRA_ENCODINGSエクストラにENCODING_E_AC3を追加します。

こうすることで、アプリの立場から見ると、DDをサポートするエンドポイントはDDPもサポートできることになります。DDPビットストリームはそのままAudioTrackに送信され、内部でDDにトランスコードされてからパススルーされます。

MediaCodec(オプション)の概要

ドルビーオーディオ対応コンテンツがDRMキーで暗号化されている場合、AudioTrackではサポートされません。そのため、ドルビーオーディオビットストリームが暗号化されているときは、MediaCodec APIを使用してビットストリームを復号してからAudioTrackに伝送する必要があります。

Androidでは、「OMX.google.raw.dec」というMediaCodecインターフェイスを介して一般的なRAW形式のオーディオデコーダーを提供しています。これは、基本的にNOP(no operation)コピーデコーダーです。ビットストリームが暗号化されている場合は、MediaCrypto APIでビットストリームを復号してから出力します。アプリはこのデコーダーを使用して、暗号化されたドルビービットストリームを復号し、クリアなドルビービットストリームをAudioTrackに伝送する必要があります。

必要に応じて、MediaCodecインターフェイスを介するドルビーデコーダーをプラットフォームでサポートできます。このデコーダーは、ドルビーオーディオビットストリームをPCMに復号します。アプリはfindDecoderForFormatを使用して、ドルビーMIMEタイプをサポートするデコーダーの存在を検出できます。

次の表は、DDPからDDへのトランスコードがAudioTrackでサポートされていない一般的なAndroid TVでドルビーを再生する場合のさまざまなシナリオをまとめたものです。

接続エンドポイントの機能(AVRまたはTV) ACTION_HDMI_AUDIO_PLUGインテントの
EXTRA_ENCODINGS
ソースのオーディオストリーム MediaCodec(オプション) AudioTrackエンコード形式 シナリオ
EAC3、AC3、PCM ENCODING_E_AC3、ENCODING_AC3、ENCODING_PCM_16BIT クリアなEAC3またはAC3 なし ENCODING_E_AC3またはENCODING_AC3 DDPまたはDDパススルー
暗号化されたEAC3またはAC3 OMX.google.raw.dec
AC3、PCM ENCODING_AC3、ENCODING_PCM_16BIT クリアなAC3 なし ENCODING_AC3 DDパススルー
暗号化されたAC3 OMX.google.raw.dec
PCM ENCODING_PCM_16BIT AACまたはドルビー非対応(推奨) OMX.google.aac.decoder ENCODING_PCM_16BIT PCM再生
AC3またはEAC3(ドルビー非対応ストリームを利用できない場合でドルビーデコーダーをプラットフォームで利用できる場合のみ) OMX.google.aac.decoder、OMX.dolby.eac3.decoder ENCODING_PCM_16BIT DDまたはDDPデコード

Amazon Fire TV(第2世代)とFire TV Edition(日本未対応)でのドルビーサポート

Fire TV(第2世代)では、Android LをベースとしたFire OS 5の採用とともに4Kのサポートが開始され、Android L推奨のドルビーアーキテクチャに完全に準拠するようになりました。このセクションでは、Fire TV(第2世代)でのドルビーサポートについて説明します。

AudioTrack:Amazon Fire TV(第2世代)、Fire TV Edition(日本未対応)

AudioTrackは、DDP/DDパススルーとDDPからDDへのトランスコーダーの両方をサポートします。AudioTrackは、ドルビーのRAWビットストリームを受信すると、エンドポイントのドルビー機能に応じて、DD/DDPパススルーを実行するか、DDPからDDにトランスコードしてからパススルーを実行するか判断します。

AudioManager:Amazon Fire TV(第2世代)、Fire TV Edition(日本未対応)

AudioTrackでは、接続先のエンドポイントがDDのみをサポートする場合に、DDPビットストリームをDDにトランスコードすることもできます。AudioManagerでこれを指示するには、エンドポイントがDDのみをサポートする場合に、ACTION_HDMI_AUDIO_PLUGインテントのEXTRA_ENCODINGSエクストラにENCODING_E_AC3を追加します。

こうすることで、アプリの立場から見ると、DDをサポートするエンドポイントはDDPもサポートできることになります。DDPビットストリームはそのままAudioTrackに送信され、内部でDDにトランスコードされてからパススルーされます。

MediaCodec:Amazon Fire TV(第2世代)、Fire TV Edition(日本未対応)

MediaCodecのドルビーデコーダー(OMX.dolby.ac3.decoder、OMX.dolby.eac3.decoder)は、PCMのみへのデコードをサポートします。さらに、ドルビーデコーダーは、マルチチャネル出力をステレオにダウンミックスします。したがって、コンテンツの入力チャネル数にかかわらず、出力は常にステレオPCMになります。Fire TV(第2世代)でのドルビー再生シナリオについては、下表をご覧ください。

接続エンドポイントの機能(AVRまたはTV) ACTION_HDM_AUDIO_PLUGインテントの
EXTRA_ENCODINGS
ソースのオーディオストリーム MediaCodec MediaCodecの出力MIMEタイプ AudioTrackエンコード形式 シナリオ
EAC3、AC3、PCM ENCODING_E_AC3、ENCODING_AC3、ENCODING_PCM_16BIT EAC3またはAC3 OMX.google.raw.dec** audio/eac3またはaudio/ac3 ENCODING_E_AC3またはENCODING_AC3 DDP/DDパススルー
AC3、PCM ENCODING_E_AC3*、ENCODING_AC3、ENCODING_PCM_16BIT EAC3またはAC3 OMX.google.raw.dec** audio/eac3またはaudio/ac3 ENCODING_E_AC3またはENCODING_AC3 DDPからDDへのトランスコードまたはDDパススルー
PCMのみ ENCODING_PCM_16BIT AAC
(推奨)
OMX.google.raw.dec** audio/raw ENCODING_PCM_16BIT AACデコード
EAC3 OMX.dolby.eac3.decoder audio/raw ENCODING_PCM_16BIT DDPデコード
AC3 OMX.dolby.ac3.decoder audio/raw ENCODING_PCM_16BIT DDPデコード

*DDPからDDへのトランスコードがサポートされているため。
**コンテンツが暗号化されていない場合のオプションです。

Fire TV Stick(第1世代)でのドルビーサポート

Fire TV Stick(第1世代)は、JellyBean Android OSをベースとしており、Android Lが世に出る前にリリースされました。その後、Android Lが登場し、Android TVでドルビーオーディオのパススルーが公式にサポートされるようになりました。

プラットフォームでドルビーに対応するうえでの推奨アーキテクチャはAndroid Lとされていますが、これは残念ながら、Fire TV Stick(第1世代)のドルビー対応アーキテクチャとしては適用できません。このセクションでは、Fire TV Stick(第1世代)でのドルビーサポートについて説明します。

MediaCodec:Fire TV Stick(第1世代)

ドルビービットストリームを処理するMediaCodecは、 ドルビーのパススルー、トランスコード、デコードなど、あらゆるシナリオに対応しています。MediaCodecは、接続されたエンドポイントのドルビー機能とシステムのドルビー設定に応じて、ドルビービットストリームの入力を処理する適切なモードを選択します。

  • パススルーまたはトランスコードモードの場合、デコーダーがRAW入力のドルビービットストリームをIEC61937パケット形式に変換する。
  • デコードモードの場合、ドルビーデコーダーがマルチチャネル出力をステレオPCMにダウンミックスする。したがって、コンテンツの入力チャネル数にかかわらず、出力は常にステレオPCMになります。デコーダーでは、DDPビットストリームを処理するOMX.dolby.ec3.decoderと、DDビットストリームを処理するOMX.dolby.ac3.decoderを使用できます。

MediaCodecの機能は下表のとおりです。

エンドポイントの機能 入力ストリームタイプ コーデック ドルビー設定 出力形式のMIMEタイプ コメント
DDP、DD、PCM DDP OMX.dolby.ec3.decoder DDP over HDMIまたはDDP Auto audio/ec3* DDPパススルー
DDP OFF audio/raw DDPデコード
DD OMX.dolby.ac3.decoder DDP over HDMI、DD over HDMI、DDP Auto audio/ac3 DDパススルー
DD、PCM DDP OMX.dolby.ec3.decoder DDP over HDMI、DD over HDMI、DDP Auto audio/ec3* DDPからDDへのトランスコード
DDP OFF audio/raw DDPデコード
DD OMX.dolby.ac3.decoder DDP over HDMI、DD over HDMI、DDP Auto audio/ac3 DDパススルー
DDP OFF audio/raw DDデコード
PCM DDP OMX.dolby.ec3.decoder なし audio/raw DDPデコード
DD OMX.dolby.ac3.decoder なし audio/raw DDPデコード

*「eac3」ではなく「ec3」です。Fire TV Stick(第1世代)とAmazon Fire TVが若干違っているのはこの部分です。

AudioTrack:Fire TV Stick(第1世代)

Fire TV Stick(第1世代)のAudioTrackには一定の制限があります。ドルビートランスコードやドルビーデコードには対応しておらず、ドルビーパススルーのみをサポートしています。さらに、ドルビー入力ビットストリームは、MediaCodecデコーダーの出力と同じIEC61937パケット形式でなければなりません。

Fire TV Stick(第1世代)とAndroid Lには、このようなアーキテクチャ上の違いがあります。したがって、アプリ開発者は、アプリでドルビーオーディオ対応コンテンツの再生をサポートする場合に大幅な変更を加える必要があります。アプリでは、ドルビービットストリームの処理に必ずMediaCodecを使用し(コンテンツが暗号化されていない場合も)、MediaCodecが示す出力のMIMEタイプに基づいてAudioTrackを構成する必要があります。このプロセスの詳細については、下記の手順を参照してください。

A.MIMEタイプによるデコーダーの作成

MIMEタイプ(audio/eac3、audio/ec3、audio/ac3)に基づいてMediaCodecを作成します。これは、Androidの一般的なコーデック作成方法です。カスタマイズは必要ありません。

B.MediaCodecの出力形式変更通知の処理

MediaCodecを使用して入力ビットストリームの処理を開始したアプリは、出力形式の変更を検出し、dequeueOutputBuffer API呼び出しでINFO_OUTPUT_FORMAT_CHANGEDを返します。アプリは、このレスポンスを処理し、getOutputFormatAPIを使用して出力形式のMIMEタイプを検出する必要があります。次の表に従って、該当のMIMEタイプを使用してAudioTrackを構成します。

MIMEタイプのAudioFormatの値  
audio/eac3 ENCODING_E_AC3
audio/ac3 ENCODING_AC3
audio/raw ENCODING_PCM_16BIT

C.ドルビーのエンコード形式に対するAudioTrackの制限

ドルビーエンコード形式のENCODING_E_AC3とENCODING_AC3に関して、AudioTrackには次の制限と既知の問題があります。

  • AudioTrackの開始/一時停止のAPIが有効にならない。作成直後にAudioTrackへのデータの書き込みを開始しようとしても、アプリは再生を開始します。開始APIが呼び出されるのを待機しません。
  • AudioTrackのgetTimeStamp API(KitKatで導入されたAPI)がJelly BeanベースのAmazon Fire TV(第1世代)とFire TV Stick(第1世代)にバックポートされているため、A/V同期ロジックに使用されうる。

Amazon Fire TV(第1世代)でのドルビーサポート

Fire TV(第1世代)は、Jelly BeanベースのOSを基盤に開発されました。後に、Android Lが公式にAndroid TVでドルビーオーディオのパススルーをサポートすることになりますが、それよりもかなり前の話です。

プラットフォームでドルビーに対応するうえでの推奨アーキテクチャはAndroid Lとされていますが、これは残念ながら、Fire TV(第1世代)のドルビー対応アーキテクチャとしてそのまま適用することはできません。このセクションでは、Fire TV(第1世代)のドルビーアーキテクチャについて説明します。

MediaCodec:Amazon Fire TV(第1世代)

Fire TV(第1世代)で利用可能なドルビーMIMEタイプのデフォルトMediaCodecは、パススルーデコーダーのみです。これは、MIMEタイプを変更することなく入力データを出力データにコピーします。つまり、出力形式と入力形式のMIMEタイプは同じになります。

デコーダーでは、DDPビットストリームを処理するOMX.qcom.audio.decoder.passthrougheac3と、DDビットストリームを処理するOMX.qcom.audio.decoder.passthroughac3を使用できます。これらのデコーダーは、DRMスキームで暗号化されているデータも復号します。したがって、コンテンツがDRMで暗号化されている場合、アプリはこのデコーダーを使用する必要があります。DRMで暗号化されていなければ、このデコーダーを使用しなくても、ドルビービットストリームはAudioTrackに直接伝送されます。

AudioTrack:Amazon Fire TV(第1世代)

AudioTrackは、ドルビーのパススルー、ドルビーのデコード、ドルビーのトランスコードを内部で処理します。つまり、接続されるエンドポイントのドルビー機能とシステムのドルビー設定に応じて、AudioTrackは入力されるドルビービットストリームの処理に適したモードを選択します。

エンドポイントの機能 入力ストリームタイプ ドルビー設定 HDMI出力 コメント
DDP、DD、PCM DDP DDP over HDMI/OpticalまたはDDP Auto DDP DDPパススルー
DDP OFF PCM DDPデコード
DD DDP over HDMI/Optical、DD over HDMI、DDP Auto DD DDパススルー
DD、PCM DDP DDP over HDMI/Optical、DD over HDMI、DDP Auto DD DDPからDDへのトランスコード
DDP OFF PCM DDPデコード
DD DDP over HDMI/Optical、DD over HDMI、DDP Auto DD DDパススルー
DDP OFF PCM DDデコード
PCM DDPまたはDD なし PCM DDまたはDDPデコード

ドルビーのエンコード形式に対するAudioTrackの制限:Amazon Fire TV(第1世代)

ドルビーエンコード形式のENCODING_E_AC3とENCODING_AC3に関して、AudioTrackには次の制限と既知の問題があります。

  • AudioTrackのgetPlaybackHeadPosition APIが実装されていない。したがって、A/Vの同期にこのAPIが使用されることはありません。アプリがこのAPIを呼び出すこともできません。呼び出すとクラッシュする可能性があります。
  • AudioTrackの開始/一時停止のAPIが有効にならない。作成直後にAudioTrackへのデータの書き込みを開始しようとしても、アプリは再生を開始します。開始APIが呼び出されるのを待機しません。
  • AudioTrackのgetTimeStamp API(KitKatで導入されたAPI)がJelly BeanベースのFire TV(第1世代)とFire TV Stick(第1世代)にバックポートされているため、リフレクションを通じてA/V同期ロジックに使用されうる。

選択肢その2: ExoPlayerを使用する方法

ExoPlayerは、Googleによるオープンソースのプレーヤーで、ドルビーオーディオストリームの再生をサポートしています。ただし、標準のAndroid LデバイスとAmazon Fire TV(第1世代)デバイスファミリーには、ドルビーサポートに対するアーキテクチャ上の違いがあります(これについては前のセクションで説明しました)。このため、ExoPlayerでドルビーオーディオ対応コンテンツを再生することはできません。

Amazonは、Fire TV(第1世代)デバイスファミリーでドルビーオーディオ対応コンテンツを再生できるように、ExoPlayer用のパッチを開発しています。このパッチは、オープンソースのexoplayer-amazon-portとして提供されています。このAmazon版には、PlayReady DRM保護のコンテンツを再生するために必要なパッチも含まれます (各「amazon/rx.y.z」ブランチがExoPlayerバージョンx.y.zに対応します)。

選択肢その3: そのほかのメディアプレーヤーを使用する方法

Amazon Fire TVでは、ドルビーオーディオ対応コンテンツやDRMコンテンツの再生に、VisualOn、NexPlayerなどのメディアプレーヤーも使用できます。詳細については、メディアプレーヤーを参照してください。

選択肢その4: Android MediaPlayerを使用する方法

アプリでは、Android MediaPlayerを使用して、ドルビー対応コンテンツを再生することもできます。

ドルビー非対応のエンドポイントとプライベートリスニングモードの処理

このセクションでは、ドルビー非対応のエンドポイントやヘッドホンなどに接続したAmazon Fire TVデバイスファミリーでドルビーオーディオ対応コンテンツを再生する際の推奨事項とベストプラクティスについて説明します。これは、ドルビーオーディオ対応コンテンツを再生するユーザーエクスペリエンスを最大限に高めるためのガイドラインです。

既に説明したように、Android Lでは、AudioManagerACTION_HDMI_AUDIO_PLUGインテントと呼ばれる新しいAPIを導入しています。このインテントによって、アプリは接続先のエンドポイント(AVRまたはTV)の機能を検出することができます。この検出に基づいて、プライベートリスニングを含むさまざまな状況でドルビーオーディオ対応コンテンツの再生がサポートされます。

Q.Amazon Fire TVやFire TV Stick(第1世代)では、アプリはどのようにして接続先エンドポイントの機能を検出するのですか?
アプリはブロードキャストレシーバーを登録し、ACTION_HDMI_AUDIO_PLUGインテントを受信して、インテントにあるEXTRA_ENCODINGSエクストラの値を読み取る必要があります。このエンコードの値がエンドポイントの機能を示します。可能な値は、ENCODING_XXXX(例:ENCODING_PCM_16BITENCODING_AC3ENCODING_E_AC3など)のいずれかです。
Q.Fire TV Edition(日本未対応)の場合、接続されるエンドポイントの機能をアプリはどのように検出しますか(上記のACTION_HDMI_AUDIO_PLUGなど)?
デフォルトでは、Fire TV Edition(日本未対応)のスピーカーはステレオ出力のみサポートしています。このため、アプリはデフォルトでステレオコンテンツをストリーミングできます。ただし、(Fire TV Edition(日本未対応)でユーザーがドルビーシステム設定を選択した場合)テレビがオプティカルオーディオ出力またはHDMI経由でAVRやサウンドバーに接続されていれば、アプリはドルビーオーディオ形式でサラウンドサウンドのストリーミングを選択できます。

これをサポートするには、アプリがグローバル設定external_surround_sound_enabledを読み取り、サラウンドサウンド(AC3、EAC3)がサポートされているかどうかを判断できる必要があります。値が1の場合はドルビーオーディオがサポートされています。値が0の場合、アプリはさらに別の手段(ACTION_HDMI_AUDIO_PLUGなど)を使用することで、サラウンドサウンドのサポート状況を判断できます。詳細については、このExoPlayerパッチ(Added support for Surround Sound detection for Optical out)を参照してください。

Q.接続先のエンドポイントがDDまたはDDPをサポートしていない場合、再生にはどのオーディオストリームを選択すればよいですか?
このような場合、再生にはドルビー非対応のオーディオコンテンツを選択してください(AACなど)。そうすれば、ドルビーオーディオ対応コンテンツよりも帯域幅の使用を減らすことができます。

ただし、アプリが代わりのドルビー非対応オーディオコンテンツを選択できず、ドルビー(DDまたはDDP)オーディオのストリームを継続する場合には、各デバイスで次のことを実行する必要があります。

  • Fire TV(第1世代): ドルビーのRAWビットストリームをAudioTrackに送信し、その内部でデコードしてステレオPCMにダウンミックスします。
  • Fire TV Stick(第1世代)とAmazon Fire TV(第2世代): ドルビー用のMediaCodecを使用します(OMX.dolby.ac3.decoderまたはOMX.dolby.eac3.decoder)。このMediaCodecは、ドルビービットストリームをデコードしてステレオPCMにダウンミックスし、ENCODING_PCM_16BITオーディオ形式でAudioTrackを構成したうえでPCMデータをレンダリングします。ドルビーデコーダーはあらゆるプラットフォームでマルチチャネルコンテンツをステレオにダウンミックスします。このため、エンドポイントがDDまたはDDPをサポートしていない場合にドルビーオーディオコンテンツを選択しても具体的なメリットはありません。
Q.DDだけをサポートし、DDPはサポートしていないエンドポイントに接続する場合、再生にはどのオーディオストリームを選択すればよいですか?
答えはFire TVデバイスによって異なります。
  • Amazon Fire TV(第1世代)とAmazon Fire TV(第2世代): AudioTrackで、DDPビットストリームをDDにトランスコードできます。そのため、エンドポイントがDDしかサポートしてなくても、AudioManagerがDDPをACTION_HDMI_AUDIO_PLUGインテントでサポート対象の機能として追加します。この結果、アプリにとっては、DDをサポートしているエンドポイントは、(AudioTrackでのトランスコードを介して)DDPもサポートできることになります。
  • Fire TV Stick(第1世代): MediaCodecがエンドポイントの機能に基づいてパススルー、トランスコード、デコードを判断するため、アプリでは再生に任意のオーディオコンテンツを選択することができます。この場合、DDをそのままパススルーするか、DDPからDDにトランスコードしてからDDをパススルーするかになります。
Q.接続先のエンドポイントがDDPとDDをサポートしている場合、再生にはどのオーディオストリームを選択すればよいですか?
Amazon Fire TV(第1世代)とAmazon Fire TV(第2世代): アプリでは、DDPまたはDDのオーディオコンテンツを再生に選択できます。オーディオが暗号化されていなければ、アプリはそのクリアなDD/DDPビットストリームデータをそのままAudioTrackに送信できます。内部で、AudioTrackはDD/DDPビットストリームを接続先のエンドポイントにパススルーします。

オーディオコンテンツがDRM保護されている場合、アプリは次のMediaCodecインスタンスを作成してビットストリームを復号する必要があります。

  • Amazon Fire TV(第1世代)の場合:OMX.qcom.audio.decoder.passthrougheac3またはOMX.qcom.audio.decoder.passthroughac3。これは復号をサポートする特別なNOPパススルーデコーダーです(必要に応じて復号してから入力ビットストリームを出力にコピーします)。

  • Amazon Fire TV(第2世代)の場合:OMX.google.raw.dec(名前)。これは復号をサポートする特別なNOPパススルーデコーダーです(必要に応じて復号してから入力ビットストリームを出力にコピーします)。

Fire TV Stick(第1世代): MediaCodecがエンドポイントの機能に基づいてパススルー、トランスコード、デコードを判断するため、アプリでは再生に任意のオーディオコンテンツを選択することができます。この場合、ドルビーオーディオコンテンツはパススルーされます。

Q.ドルビーパススルーでの再生中にオーディオヘッドセットやBluetooth A2DPヘッドセットを使用するプライベートリスニングを行う場合、アプリはこれをどのように処理しますか?
Fire TV(第1世代): Amazon Fire TV(第1世代):プライベートリスニングに対してアプリで特別な処理をする必要はありません。自動的にAudioTrackで内部処理されます(操作モードがパススルーからデコードに切り替えられます)。

Fire TV Stick(第1世代)とAmazon Fire TV(第2世代): ドルビーパススルーでの再生中に(ゲームコントローラーの)オーディオヘッドセットまたはBluetoothヘッドセットがデバイスに接続されると、修正されたエンコードエクストラの値が付いたACTION_HDMI_AUDIO_PLUGインテントがオペレーティングシステムによって再ブロードキャストされます。

ゲームコントローラーのオーディオヘッドセットやBluetoothヘッドセットはドルビーパススルーをサポートしていないため、現時点ではエンコードエクストラの値はENCODING_PCM_16BITのみとなります。アプリでは、再生中にこのインテントを受信するための登録を行い、次のいずれかを実行できるようにオーディオパイプラインを再構成する必要があります。

  • ほかのドルビー非対応オーディオコンテンツのミッドストリームに切り替える(AACなど)。
  • ほかのオーディオコンテンツを利用できない場合、MediaCodecドルビーデコーダーを使用してドルビーコンテンツをステレオPCMにデコードできるように、オーディオパイプラインを再構成する。Fire TV Stick(第1世代)の場合、オーディオパイプラインを再作成する一環としてMediaCodecの再作成が必要です。