网站开发 参考文献,外贸网站建设 三方登录,wordpress两个头部,263邮箱登录入口官网介绍 在本系列#xff0c;我打算花大篇幅讲解我的 gitee 项目音视频播放器#xff0c;在这个项目#xff0c;您可以学到音视频解封装#xff0c;解码#xff0c;SDL渲染相关的知识。您对源代码感兴趣的话#xff0c;请查看基于FFmpeg和SDL的音视频播放器
如果您不理解本… 介绍 在本系列我打算花大篇幅讲解我的 gitee 项目音视频播放器在这个项目您可以学到音视频解封装解码SDL渲染相关的知识。您对源代码感兴趣的话请查看基于FFmpeg和SDL的音视频播放器
如果您不理解本文可参考我的前一篇文章音视频项目—基于FFmpeg和SDL的音视频播放器解析十二 解析 上篇文章我们解析了 audiooutput 的一部分我们接下来继续解析函数InitDeInitfill_audio_pcm。
我们先看 Init
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_InitSDL_OpenAudioSDL_PauseAudio。
首先SDL_InitSDL_INIT_AUDIO初始化 SDL 的音频部分。
接着我们声明了两个 SDL_AudioSpec这个包含音频输出格式的结构体
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恢复音频。
好了今天就先到这里明天讲的函数很重要因为比较多而且设计的音频数据的播放。
欲知后事如何请听下回分解。