基于Qt的FFmpeg--音频播放

本文档介绍了如何使用Qt和FFmpeg库进行音频播放。首先回顾了Qt+ffmpeg的环境配置和视频播放,接着详细讲解了音频播放的实现,重点在于`SDL_AudioSpec wanted_spec`的设置,它是SDL播放音频的基础参数。尽管可以使用Qt内置模块开发音频,但作者选择FFmpeg和SDL进行示例。最后提到,由于FFmpeg更新频繁,开发者需要不断学习新的API,并预告了下一篇文章将构建一个FFmpeg+Qt的音视频播放器来解决同步问题。

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

在前面文中已经提到了Qt+ffmpeg的环境配置和视频播放
下面是连接:
环境配置:
https://blog.youkuaiyun.com/birdlearn/article/details/116718558
视频播放:
https://blog.youkuaiyun.com/birdlearn/article/details/116752261
如果有兴趣的同学看了前面两节的内容应该大概就对ffmpeg有了一定的了解
本章就基于Qt的Ffmpeg做的一个音频播放,代码仍然使用的是雷神代码。
直接贴出代码

#include <QCoreApplication>

#define MAX_AUDIO_FRAME_SIZE 192000 // 1 second of 48khz 32bit audio
//Output PCM
#define OUTPUT_PCM 1
//Use SDL
#define USE_SDL 1
extern "C"
{
   
   
    #include "SDL2/SDL.h"
    #include "libavcodec/avcodec.h"
    #include "libavformat/avformat.h"
    #include "libswresample/swresample.h"
}
void  fill_audio(void *udata,Uint8 *stream,int len);
//chunk-------pos---len-----|
static  Uint8  *audio_chunk;
static  Uint32  audio_len;
static  Uint8  *audio_pos;

void  fill_audio(void *udata,Uint8 *stream,int len){
   
   
    //SDL 2.0
    SDL_memset(stream, 0, len);
    if(audio_len==0)		/*  Only  play  if  we  have  data  left  */
            return;
    len=(len>audio_len?audio_len:len);	/*  Mix  as  much  data  as  possible  */

    SDL_MixAudio(stream,audio_pos,len,SDL_MIX_MAXVOLUME);
    audio_pos += len;
    audio_len -= len;
}


#undef main
int main(int argc, char *argv[])
{
   
   
    QCoreApplication a(argc, argv);
    AVFormatContext	*pFormatCtx;
        int				i, audioStream;
        AVCodecContext	*pCodecCtx;
        AVCodec			*pCodec;
        AVPacket		*packet;
        uint8_t			*out_buffer;
        AVFrame			*pFrame;
        SDL_AudioSpec wanted_spec;
        int ret;
        uint32_t<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值