音视频项目—基于FFmpeg和SDL的音视频播放器解析(十八)
介绍
在本系列,我打算花大篇幅讲解我的 gitee 项目音视频播放器,在这个项目,您可以学到音视频解封装,解码,SDL渲染相关的知识。您对源代码感兴趣的话,请查看基于FFmpeg和SDL的音视频播放器
如果您不理解本文,可参考我的前一篇文章音视频项目—基于FFmpeg和SDL的音视频播放器解析(十七)
解析
之前解析的 fill_audio_pcm 函数有点复杂,先不继续讲这个了。
我们讲最后一个类 videooutput,可见这是负责视频播放的函数,先看 .h 文件
#ifndef VIDEOOUTPUT_H_
#define VIDEOOUTPUT_H_
#ifdef __cplusplus
extern "C"{
#include"libavutil/avutil.h"
#include"SDL.h"
#include"libavutil/time.h"
}
#endif
#include"avframequeue.h"
#include"avsync.h"
class VideoOutput{
public:
VideoOutput(AVSync* avsync, AVRational time_base, AVFrameQueue* frame_queue, int video_width, int video_height);
~VideoOutput();
int Init();
int MainLoop();
void RefreshLoopWaitEvent(SDL_Event* event);
private:
void videoRefresh(double* remaining_time);
AVFrameQueue* frame_queue = nullptr;
SDL_Event event;
SDL_Rect rect;
SDL_Window* win = nullptr;
SDL_Renderer* renderer = nullptr;
SDL_Texture* texture = nullptr;
AVSync* avsync = nullptr;
AVRational time_base;
int video_width = 0;
int video_height = 0;
uint8_t* yuv_buf = nullptr;
int yuv_buf_size = 0;
};
#endif
公有成员,都是构造函数,析构函数,初始化函数,循环函数,等待函数。
私有成员有比较多,我们这篇文章解析一下。
? ? void videoRefresh(double* remaining_time);? ? ? ? 负责刷新的函数
? ? AVFrameQueue* frame_queue = nullptr;? ? ? ? ? ? ? 视频帧数据队列
? ? SDL_Event event;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?SDL 事件
? ? SDL_Rect rect;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? SDL rectangle
? ? SDL_Window* win = nullptr;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? SDL 窗口
? ? SDL_Renderer* renderer = nullptr;? ? ? ? ? ? ? ? ? ? ? ? SDL 渲染器
? ? SDL_Texture* texture = nullptr;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? SDL 纹理
? ? AVSync* avsync = nullptr;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?负责音视频同步的类
? ? AVRational time_base;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?用于计算时间戳与帧率
? ? int video_width = 0;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 视频窗口的宽度
? ? int video_height = 0;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?视频窗口的高度
? ? uint8_t* yuv_buf = nullptr;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?存放 yuv 数据的数组
? ? int yuv_buf_size = 0;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?存放 yuv 数据的数组长度
好了,这篇文章讲解了 VieoOutput 类的私有成员变量,下一篇文章开始讲解函数。
欲知后事如何,请听下回分解。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!