11.FFmpeg学习笔记 - 解复用分离aac码流

本文介绍了如何使用FFmpeg解复用AAC码流,特别是针对不同格式如TS、mp4、flv、mkv的情况。在某些情况下,直接分离的AAC数据缺少ADTS头,无法直接播放。通过理解`aac_adtstoasc`过滤器的作用,了解到必须手动添加ADTS头才能使AAC数据在某些格式中播放。示例代码展示了从TS文件中分离AAC数据并添加ADTS头,以及处理mp4/flv/mkv等格式的方法。
摘要由CSDN通过智能技术生成

 

上一篇文章,是分离视频文件里的mp3音频码流,分离出来后是可以直接播放的。但是对于aac编码的音频,直接分离aac码流是不一定能播放的。如果视频复用格式是TS,则直接存储AVPacket的data是可以播放的。如果是mp4/flv/mkv等格式则不行,因为调用av_read_frame()后得到的AVPacket里面的内容是AAC纯数据,就是那种不包含ADTS文件头的AAC数据。

本以为仿照分离h264的方法,用 “aac_adtstoasc” bitstream filter会起作用,没想到还是不能播放,官方文档对aac_adtstoasc的解释:

aac_adtstoasc只是把带ADTS头的AAC流封装进MOV/MP4等格式时,创建MPEG-4 AudioSpecificConfig(asc),并去掉ADTS header。并没有相反的过程。所以只能手动添加7字节的ADTS头。

下面代码输入是一个ts格式的视频,分离aac数据,直接可播放。

void demux_ts(void)
{
    const char *src_filename = "/Users/zhw/Desktop/resource/sintel_h264_aac.ts";
    const char *audio_dst_filename = "/Users/zhw/Desktop/sintel.aac";
    
    
    int audio_index;
    AVFormatContext *i
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值