ffmpeg推送AAC音频处理ADTS

原来取rtmp流如:rtmp://live.hkstv.hk.lxdns.com/live/hks

或者录播保存的文件,它们的aac音频包都没有ADTS头部,

但客户提供的一个http流:http://cntv.hls.cdn.myqcloud.com/asp/hls/850/0303000a/3/default/1ee473b960054ae29256751f50033d34/850.m3u8

它的每个aac音频包有adts头,

不去掉头直接调用ffmpeg的av_interleaved_write_frame会失败的,

简单去掉7字节adts头,接口调用成功了,但fms地址播放没有声音,用vlc播放器有断续的声音。

用ffmpeg可执行程序推送要对音频加上-bsf:a  aac_adtstoasc才能推送,但视频还是有问题的。

原因是音频输出流中的codec的extra_data为空,要分配2字节的空间,将音频采样率和音频通道数设置进去。

out_stream2->codec->extradata = (uint8_t*)av_malloc(2);
out_stream2->codec->extradata_size = 2;
unsigned char dsi1[2];
unsigned int sampling_frequency_index = (unsigned int)get_sr_index((unsigned int)out_stream2->codec->sample_rate);
make_dsi(sampling_frequency_index, (unsigned int)out_stream2->codec->channels, dsi1 );  
memcpy(out_stream2->codec->extradata, dsi1, 2);

这个get_sr_index就是根据采样率返回下标,与adts的sampling_frequency_index定义相同,如48000返回3


void make_dsi(unsigned int sampling_frequency_index, 
 unsigned int channel_configuration, 
 unsigned char* dsi )

unsigned int object_type = 2; // AAC LC by default 
dsi[0] = (object_type<<3) | (sampling_frequency_index>>1); 
dsi[1] = ((sampling_frequency_index&1)<<7) | (channel_configuration<<3);
}


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ffmpeg 是一款非常强大的音视频处理工具,可以用于各种音视频格式的转码、剪辑、合并等操作。它支持多种音视频格式,包括 AAC 音频格式。 如果你遇到了无法解析 AAC 音频格式的问题,可能是因为 ffmpeg 编译时未添加对 AAC 格式的支持。在编译 ffmpeg 时,需要添加相应的编解码库来支持 AAC 格式,如 FAAC、FDK-AAC 等。 如果你已经编译了支持 AAC 格式的 ffmpeg,但仍然无法解析 AAC 音频,可能是因为输入的 AAC 音频文件格式存在问题。在这种情况下,可以尝试使用其他工具对 AAC 音频文件进行修复或转换,或者尝试使用不同的 AAC 解码器进行解码。 以下是一些常用的 ffmpeg 命令,可以用来处理 AAC 音频文件: 1. 转码为其他格式 ``` ffmpeg -i input.aac -c:a libmp3lame output.mp3 ``` 上述命令将输入的 AAC 音频文件转码为 MP3 格式。 2. 提取音频 ``` ffmpeg -i input.mp4 -vn -acodec copy output.aac ``` 上述命令将从输入的 MP4 视频文件中提取音频,并将音频保存为 AAC 格式。 3. 剪辑音频 ``` ffmpeg -i input.aac -ss 00:00:10 -t 00:00:30 -c copy output.aac ``` 上述命令将从输入的 AAC 音频文件中剪辑出从第 10 秒到第 40 秒的音频,并将音频保存为 AAC 格式。 4. 合并音频 ``` ffmpeg -i "concat:input1.aac|input2.aac" -c copy output.aac ``` 上述命令将合并输入的两个 AAC 音频文件,并将合并后的音频保存为 AAC 格式。注意,在使用 concat 滤镜时,输入文件的编解码器要一致。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值