VLC rmvb视频seek后间断性无声问题分析

博客分析了在使用VLC播放rmvb视频时遇到的seek后间断性无声问题,指出问题源于ffmpeg中audio packet的pts和dts跳变。ffmpeg源码分析发现,部分音频帧缺少pts和dts,且在seek后计算的pts与后续有pts的帧不一致。目前尚未找到完善的解决方案。
摘要由CSDN通过智能技术生成

拿到问题首先还是看日志,可以明显看到触发了VLC的too early条件,往AudioTrack塞0导致的无声。

04-28 11:33:12.554 10825 11073 W VLC     : [a5a8d430/2b41] libvlc audio output: playback way too early (-1264388) than (-240000), cache 734153: playing silence

04-28 11:33:12.555 10825 11073 D VLC     : [a5a8d430/2b41] libvlc audio output: inserting 27879 zeroes

从上面日志可以看到,触发too early条件时,cache只有700ms数据,audio却来早了1.2s,基本可以确定不是AudioTrack的问题了。下一步还是开demux和decoder的log复现,进一步分析是demux出来的pts就已经跳变了:

05-19 17:42:39.038  2058  2147 D VLC     : [a17ef210/863] libvlc demux: tk[0] dts=904846001 pts=904846001 prc=904823001, pkt.dts 904846, pkt.pts 904846

05-19 17:42:39.056  2058  2147 D VLC     : [a17ef210/863] libvlc demux: tk[0] dts=906507001 pts=906507001 prc=904846001, pkt.dts 906507, pkt.pts 906507

问题又指向了ffmpeg,在ffplay中加日志,同样能够复制到问题,看来ffmpeg最新版本也没有修复该问题。

接下来又需要啃ffmpeg源码了,av_read_frame的pts发生了跳变,rmvb封装对应的avformat文件是rmdec.c,在rm_read_packet函数中加日志发现了一个有趣的问题:不是

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值