ts文件不能正常播放的问题

本文探讨了在处理TS文件时遇到的AAC音频解码失败问题。通过详细调试,定位到问题是由于ADTS头部解析错误导致,进而采取措施解决了异常的framelength问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们对ts文件的播放流程是:

 

 

我们之所以将audio通路放到一个单独的bin里,是因为我们录出的文件可能只有视频,没有音频。

我们录出的视频文件频繁的出现不能播放的情况,我大概一下几个步骤debug这个问题:

1、首先发现了sink audiobin did not post STREAM_START yet,发现其调用的过程是:

2、发现sink alsasink did not post STREAM_START yet,

3、怀疑音频解码出错了(faad是一个bad级别的element),没有解码数据,所以在gst_audio_decoder_push_buffers中打印信息,发现解码函数gst_audio_decoder_handle_frame始终没有被调到。说明parse部分出来问题,aac的parser就是一个解adts头的过程,到gst_faad_parse发现是因为gst_faad_sync返回false造成的。gst_faad_sync是一个解析adts头的函数,最后分析发现,是因为gst_faad_sync找错了adts头,所以,找到的aac的frame_length特别的大,使得pipeline总是得不到音频数据。所以,对aac的framelength做了保护,发现不正常(特别长)的frame_length后,不承认这是一个adts头。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值