网站建设的系统设计,小程序模板在哪里买,免费的软件开发工具,网建是什么介绍 在本系列#xff0c;我打算花大篇幅讲解我的 gitee 项目音视频播放器#xff0c;在这个项目#xff0c;您可以学到音视频解封装#xff0c;解码#xff0c;SDL渲染相关的知识。您对源代码感兴趣的话#xff0c;请查看基于FFmpeg和SDL的音视频播放器
如果您不理解本… 介绍 在本系列我打算花大篇幅讲解我的 gitee 项目音视频播放器在这个项目您可以学到音视频解封装解码SDL渲染相关的知识。您对源代码感兴趣的话请查看基于FFmpeg和SDL的音视频播放器
如果您不理解本文可参考我的前一篇文章音视频项目—基于FFmpeg和SDL的音视频播放器解析十七 解析 之前解析的 fill_audio_pcm 函数有点复杂先不继续讲这个了。
我们讲最后一个类 videooutput可见这是负责视频播放的函数先看 .h 文件
#ifndef VIDEOOUTPUT_H_
#define VIDEOOUTPUT_H_#ifdef __cplusplus
extern C{
#includelibavutil/avutil.h
#includeSDL.h
#includelibavutil/time.h
}
#endif#includeavframequeue.h
#includeavsync.hclass 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 类的私有成员变量下一篇文章开始讲解函数。
欲知后事如何请听下回分解。