ExoPlayer 2.18.1对接DAI时杜比音轨播放冻结问题求助
DAI DASH多周期流切换广告卡顿/冻结问题排查
在FireTV Stick 4K(系统版本Fire OS 6.2.9.3)上,使用ExoPlayer 2.18.1播放支持DAI的DASH多周期流时,遇到以下问题:
- 当广告周期包含杜比(立体声/5.1)音轨时,从直播切到广告会出现视频卡顿
- 广告结束后播放完全冻结
- ADB日志中出现
Spurious audio timestamp (frame position mismatch)警告,日志内容如下:
09-21 17:34:57.312 19192 23498 W AudioTrack: Spurious audio timestamp (frame position mismatch): 28270119, 10923744015, 10923743917, 189528000, 9827328, 9827328 09-21 17:34:57.816 19192 23498 W AudioTrack: Spurious audio timestamp (frame position mismatch): 28294325, 10924248296, 10924248198, 189528000, 9827328, 9827328 09-21 17:34:58.211 19192 19231 V SessionStateManager: 2022-09-21 17:34:58,211 - Thread: [main] - player time 1663761496000ms program start time 1663759800000ms media session time 1696000ms 09-21 17:34:58.211 19192 19231 V SessionStateManager: 2022-09-21 17:34:58,211 - Thread: [main] - com.mobitv.client.connect.core.media.session.MobiMediaSession@34d0ee4 set media session playback state to PLAYING time 1696000ms 09-21 17:34:58.211 19192 19231 V SessionStateManager: 2022-09-21 17:34:58,211 - Thread: [main] - setting playback state PlaybackState {state=3, position=1696000, buffered position=0, speed=1.0, updated=10924643, actions=8963, error code=0, error message=null, custom actions=[], active item id=-1} 09-21 17:34:58.213 739 932 V Avrcp : MediaController playback changed: PlaybackState {state=3, position=1696000, buffered position=0, speed=1.0, updated=10924643, actions=8963, custom actions=[], active item id=-1, error=null} 09-21 17:34:58.322 19192 23498 W AudioTrack: Spurious audio timestamp (frame position mismatch): 28318587, 10924753767, 10924753671, 189528000, 9827328, 9827328
关键现象:该广告单独作为DASH VoD播放时完全正常,仅与直播周期拼接后出现问题。
拼接后清单信息
直播周期音视频轨
<Representation id="L_5000_W" codecs="avc1.64001f" bandwidth="5120000" width="1280" height="720" frameRate="60/2" sar="1:1"> <SegmentTemplate initialization="$RepresentationID$/init.mp4" media="$RepresentationID$/$Time$.m4s" timescale="90000" presentationTimeOffset="150764576748000"> ... </SegmentTemplate> </Representation> <Representation id="L_384_ENG" codecs="ac-3" bandwidth="384000" audioSamplingRate="48000"> <AudioChannelConfiguration schemeIdUri="tag:dolby.com,2014:dash:audio_channel_configuration:2011" value="F801"/> <SegmentTemplate initialization="$RepresentationID$/init.mp4" media="$RepresentationID$/$Time$.m4s" timescale="48000" presentationTimeOffset="80407774265537"> ... </SegmentTemplate> </Representation>
广告周期音视频轨
<Representation id="A_5000_W" codecs="avc1.4d4028" bandwidth="5120000" width="1920" height="1080" frameRate="60/2" sar="1:1"> <SegmentTemplate initialization="/prod-ad-1/$RepresentationID$/init.mp4" media="/prod-ad-1/$RepresentationID$/$Number$.m4s" timescale="90000" startNumber="1"> ... </SegmentTemplate> </Representation> <Representation id="A_384_ENG" codecs="ac-3" bandwidth="384000" audioSamplingRate="48000"> <AudioChannelConfiguration schemeIdUri="tag:dolby.com,2014:dash:audio_channel_configuration:2011" value="F801"/> <SegmentTemplate initialization="/prod-ad-1/$RepresentationID$/init.mp4" media="/prod-ad-1/$RepresentationID$/$Number$.m4s" timescale="48000" startNumber="1"> ... </SegmentTemplate> </Representation>
排查方向分析
时间戳对齐问题
- 直播周期的音频轨带有
presentationTimeOffset,广告周期无该参数。ExoPlayer切换周期时,可能未正确计算广告音频的起始时间戳,导致与视频或系统音频时钟不同步,触发Spurious audio timestamp警告,最终引发播放冻结。 - 验证:检查广告周期是否需要添加与直播周期时间线对齐的
presentationTimeOffset,或确认DAI拼接时是否正确处理跨周期的时间戳偏移。
- 直播周期的音频轨带有
杜比音轨的音频渲染兼容性
- FireTV Stick 4K的Fire OS 6.2.9.3对杜比AC-3音轨的周期切换处理存在兼容性问题。单独播放广告时音频渲染器初始化流程正常,但从带时间偏移的直播切换到广告时,音频轨道参数重置或时间戳传递出错。
- 验证:尝试将广告的杜比音轨替换为普通AAC音轨,测试切换是否正常;或升级ExoPlayer到更高版本(如2.19+),查看是否修复了相关音频时间戳处理bug。
多周期流的轨道匹配问题
- 直播视频为720p,广告视频为1080p,分辨率切换时的逻辑可能与音频时间戳不同步叠加触发问题。虽然单独播放广告时分辨率切换正常,但结合直播的时间偏移后,音视频同步逻辑出现异常。
- 验证:将广告视频分辨率调整为与直播一致的720p,测试播放是否正常。
ExoPlayer DAI多周期处理逻辑
- ExoPlayer 2.18.1的DAI模块在处理多周期流切换时,对带有杜比音轨的广告周期可能存在时间戳计算错误。查看该版本的发布说明,确认是否存在已知的多周期音频同步bug。
内容的提问来源于stack exchange,提问作者astre
相关产品推荐
相关产品推荐

