隧道模式播放
隧道模式播放
某些Fire TV设备的硬件解码器支持以60 FPS播放4K内容。如需以上述分辨率和帧速率播放视频,媒体管道的计时要求会非常高,由于内核的线程和进程调度限制,应用可能无法以16毫秒间隔渲染4K帧。可能导致丢帧,以及观赏体验欠佳。请使用隧道模式播放,以便发挥硬件的最佳性能。
如何启用隧道模式播放
如需启用隧道模式,需作如下更改:
-
从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提供一个写入API,将会自动构建附加标头信息。有关详细信息,请参阅此处。
注意: 附加参数是与正在写入的数据对应的时间戳。
有关隧道模式播放的详细信息
详细信息,请参阅Exoplayer 2中的“隧道模式播放”:
隧道模式的限制
本文关于隧道模式播放的信息适用于所有运行Fire OS 6或更高版本的Fire TV设备,且受以下条件约束:
-
所有运行Fire OS 6或更高版本的Fire TV流媒体播放器均支持VP9隧道模式和HEVC解码器,但存在以下限制:
- 对于Fire TV Cube第2代(2019): 隧道模式仅支持安全解码器,如果希望应用在隧道模式中播放明文内容,仍可使用安全的解码器管道来实现这一目的。请参阅安全解码器要求。
-
所有Fire TV均支持主流视频编解码器(例如h265、h264和VP9)的隧道模式,适用于安全和不安全播放,但存在以下限制:
Last updated: 2021年8月23日