音视频项目—基于FFmpeg和SDL的音视频播放器解析(十四)

介绍

在本系列,我打算花大篇幅讲解我的 gitee 项目音视频播放器,在这个项目,您可以学到音视频解封装,解码,SDL渲染相关的知识。您对源代码感兴趣的话,请查看基于FFmpeg和SDL的音视频播放器

如果您不理解本文,可参考我的前一篇文章音视频项目---基于FFmpeg和SDL的音视频播放器解析(十二)

解析

上篇文章,我们解析了 audiooutput 的一部分,我们接下来继续解析函数,Init,DeInit,fill_audio_pcm。

我们先看 Init

cpp 复制代码
int AudioOutput::Init(){
    if(SDL_Init(SDL_INIT_AUDIO) != 0){
        return -1;
    }
    SDL_AudioSpec wanted_spec;
    SDL_AudioSpec spec;
    wanted_spec.channels = 2;
    wanted_spec.format = AUDIO_S16SYS;
    wanted_spec.silence = 0;
    wanted_spec.callback = fill_audio_pcm;
    wanted_spec.userdata = this;
    wanted_spec.samples = 1024;

    int ret = SDL_OpenAudio(&wanted_spec, nullptr);
    if(ret != 0){
        return -1;
    }
    dst_tgt.channels = wanted_spec.channels;
    dst_tgt.fmt = AV_SAMPLE_FMT_S16;
    dst_tgt.freq = wanted_spec.freq;
    dst_tgt.channel_layout = av_get_default_channel_layout(2);
    dst_tgt.frame_size = 1024;
    SDL_PauseAudio(0);
}

这个函数是负责初始化 SDL 播放音频。其中有三个函数比较重要,SDL_Init,SDL_OpenAudio,SDL_PauseAudio。

首先,SDL_Init(SDL_INIT_AUDIO)初始化 SDL 的音频部分。

接着,我们声明了两个 SDL_AudioSpec,这个包含音频输出格式的结构体

cpp 复制代码
typedef struct SDL_AudioSpec
{
    int freq;                   /**< DSP frequency -- samples per second */
    SDL_AudioFormat format;     /**< Audio data format */
    Uint8 channels;             /**< Number of channels: 1 mono, 2 stereo */
    Uint8 silence;              /**< Audio buffer silence value (calculated) */
    Uint16 samples;             /**< Audio buffer size in samples (power of 2) */
    Uint16 padding;             /**< Necessary for some compile environments */
    Uint32 size;                /**< Audio buffer size in bytes (calculated) */
    SDL_AudioCallback callback;
    void *userdata;
} SDL_AudioSpec;

然后,我们将 wanted_spec 的各项参数进行赋值。

接着,我们通过 SDL_OpenAudio,打开音频设备。

然后,我们给 AVParams 的一个变量 dst_tgt 赋值。

最后,SDL_PuaseAudio,这是负责恢复或者暂停音频的函数,我们在其中传入的参数为 0,恢复音频。

好了,今天就先到这里,明天讲的函数很重要,因为比较多而且设计的音频数据的播放。

欲知后事如何,请听下回分解。

相关推荐
微帧Visionular5 小时前
AI视频单帧清晰,播放时却闪烁,原因是什么?
人工智能·深度学习·音视频
辰辰观影6 小时前
Windows网盘视频播放器推荐:无广告4K HDR怎么选
音视频
2601_966827458 小时前
电视端云盘在线播放怎么选?支持4K HDR的应用推荐
音视频
开开心心就好9 小时前
音频降噪剪辑工具,音量裁剪一键处理
运维·服务器·前端·spring·ocr·音视频·1024程序员节
zslefour13 小时前
使用ffmpeg遍历获取音频文件相关信息
ffmpeg
AI视频工具指南13 小时前
AI视频的声音和画面怎么配合?先分清谁在传递信息
人工智能·aigc·音视频
辰辰观影15 小时前
无广告播放器推荐来啦
音视频
TrueDei15 小时前
GStreamer 使用 valve 分别控制音视频流的暂停与恢复
音视频
Android系统攻城狮15 小时前
Linux FFmpeg深度解析之avcodec_parameters_from_context调用流程与实战(十六)
linux·运维·ffmpeg·音视频进阶·ffmpeg音视频·车载音视频进阶
一条破秋裤16 小时前
基于 Hi3516CV610 的立定跳远视频测量系统调研与实施方案
arm开发·音视频