在本系列,我打算花大篇幅讲解我的 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_Window* win = nullptr; SDL 窗口
SDL_Renderer* renderer = nullptr; SDL 渲染器
SDL_Texture* texture = nullptr; SDL 纹理
AVSync* avsync = nullptr; 负责音视频同步的类
AVRational time_base; 用于计算时间戳与帧率
uint8_t* yuv_buf = nullptr; 存放 yuv 数据的数组
int yuv_buf_size = 0; 存放 yuv 数据的数组长度
好了,这篇文章讲解了 VieoOutput 类的私有成员变量,下一篇文章开始讲解函数。
欲知后事如何,请听下回分解。
原文地址:https://blog.csdn.net/weixin_60701731/article/details/134562254
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_7591.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!