ffmpeg 音乐循环_ffmpeg 播放音频

这篇博客详细介绍了如何使用ffmpeg库结合SDL回调函数实现音频的循环播放。通过解码音频帧,将数据拷贝到SDL缓冲区,并在回调函数中进行播放。在解码过程中,确保正确处理解码失败的情况,以及当解码数据大于SDL缓冲区时的填充策略。
摘要由CSDN通过智能技术生成

播放音频,设置好SDL_AudioSpec播放参数,然后由SDL回调函数进行解码和数据的拷贝,解码播放音频无需设置延迟,因为声卡播放音频是阻塞的

int audio_decode_frame(AVCodecContext *aCodecCtx, uint8_t *audio_buf, int buf_size)

{

static AVPacket pkt;

static uint8_t *audio_pkt_data = NULL;

static int audio_pkt_size = 0;

static AVFrame frame;

int len1, data_size = 0;

for(;;)

{

//while循环解码,直到将Packet中的多个音频帧数据解码完成了,再读取下一个包,每次解码一个音频帧数据后饭后解码后的大小,如果一直未解码出数据,则直到将该packet解码完

//了后都没有解码出数据,则读取下一个包,一直到有数据解码成来后再返回解码成功后的数据大小

while(audio_pkt_size > 0)

{

int got_frame = 0;

len1 = avcodec_decode_audio4(aCodecCtx, &frame, &got_frame, &pkt);

if(len1 < 0)

{

//解码失败,则跳过该包数据,解码下一包数据

audio_pkt_size = 0;

brea

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值