辽宁省网站建设,开发公司可以顾保安,合肥瑶海区最新房价,建站公司不给源码介绍 在本系列#xff0c;我打算花大篇幅讲解我的 gitee 项目音视频播放器#xff0c;在这个项目#xff0c;您可以学到音视频解封装#xff0c;解码#xff0c;SDL渲染相关的知识。您对源代码感兴趣的话#xff0c;请查看基于FFmpeg和SDL的音视频播放器
如果您不理解本… 介绍 在本系列我打算花大篇幅讲解我的 gitee 项目音视频播放器在这个项目您可以学到音视频解封装解码SDL渲染相关的知识。您对源代码感兴趣的话请查看基于FFmpeg和SDL的音视频播放器
如果您不理解本文可参考我的前一篇文章音视频项目—基于FFmpeg和SDL的音视频播放器解析十二 解析 我们到了后面就应该播放出音频和视频了这就了两个包audiooutputvideooutput。我们今天解析负责播放音频的包audiooutput。
我们先来看看 .h 文件的代码
#ifndef AUDIOOUTPUT_H_
#define AUDIOOUTPUT_H_#ifdef __cplusplusextern C{
#includelibavutil/avutil.h
#includeSDL.h
#includelibswresample/swresample.h
}#includeavsync.h
#includeavframequeue.htypedef struct AudioParams{int freq;int channels;int64_t channel_layout;enum AVSampleFormat fmt;int frame_size;
} AudioParams;class AudioOutput
{
public:AudioOutput(AVSync* avsync, AVRational time_base, const AudioParams audio_params, AVFrameQueue* frame_queue);~AudioOutput();int Init();int DeInit();
private:int64_t pts AV_NOPTS_VALUE;AudioParams src_tgt;AudioParams dst_tgt;AVFrameQueue* frame_queue nullptr;struct SwrContext* swr_ctx nullptr;uint8_t* audio_buf nullptr;uint8_t* audio_buf1 nullptr;uint32_t* audio_buf_size 0;uint32_t* audio_buf1_size 0;uint32_t* audio_buf_index 0;AVSync* avsync nullptr;AVRational time_base;
};#endif#endif
大体上看一遍首部有 AudioParams然后是 AudioOutput 的类。
AudioParams
typedef struct AudioParams{int freq;int channels;int64_t channel_layout;enum AVSampleFormat fmt;int frame_size;
} AudioParams;
这个结体体负责记录音频的各类参数
freq频率
channels频道数
channel_layout
fmt音频格式
frame_size帧大小 AudioOutput
我们先看私有成员 int64_t pts AV_NOPTS_VALUE显示时间戳 AudioParams src_tgt源音频参数 AudioParams dst_tgt目标音频参数 AVFrameQueue* frame_queue nullptr音频帧队列 struct SwrContext* swr_ctx nullptr uint8_t* audio_buf nullptr音频缓冲区 uint8_t* audio_buf1 nullptr音频缓冲区 uint32_t* audio_buf_size 0音频缓冲区大小 uint32_t* audio_buf1_size 0音频缓冲区大小 uint32_t* audio_buf_index 0音频缓冲区 index AVSync* avsync nullptr音视频同步 AVRational time_base帧率 构造函数
AudioOutput::AudioOutput(AVSync* avsync, AVRational time_base, const AudioParams audio_params, AVFrameQueue* frame_queue){this-avsync avsync;this-time_base time_base;this-src_tgt audio_params;this-frame_queue frame_queue;
}
将私有成员变量进行赋值
好了今天先讲这么多下一篇文章讲解的函数会比较多且难大家慢慢来。
欲知后事如何请听下回分解。