开发者控制台

隧道模式播放

隧道模式播放

某些Fire TV设备的硬件解码器支持以60 FPS播放4K内容。如需以上述分辨率和帧速率播放视频,媒体管道的计时要求会非常高,由于内核的线程和进程调度限制,应用可能无法以16毫秒间隔渲染4K帧。可能导致丢帧,以及观赏体验欠佳。请使用隧道模式播放,以便发挥硬件的最佳性能。

如何启用隧道模式播放

如需启用隧道模式,需作如下更改:

  1. 从AudioManager查询AudioTrack会话ID:

    AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
    int audioSessionId = audioManager.generateAudioSessionId();
    
  2. 配置隧道模式的视频解码器:

    format.setFeatureEnabled(MediaCodecInfo.CodecCapabilities.FEATURE_TunneledPlayback, true);
    
  3. 通过AudioTrack会话ID配置视频解码器。

    format.setInteger(android.media.MediaFormat.KEY_AUDIO_SESSION_ID, audioSessionId);
    
  4. 用上述查询到的会话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);
    
  5. 对于视频解码器,请勿调用dequeueOutputBufferreleaseOutputBuffer

  6. AudioTrack提供一个写入API,将会自动构建附加标头信息。有关详细信息,请参阅此处

    注意:​ 附加参数是与正在写入的数据对应的时间戳。

有关隧道模式播放的详细信息

详细信息,请参阅Exoplayer 2中的“隧道模式播放”:

隧道模式的限制

本文关于隧道模式播放的信息适用于所有运行Fire OS 6或更高版本的Fire TV设备,且受以下条件约束:


Last updated: 2021年8月23日