当前位置: 首页 > news >正文

音视频项目—基于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 类的私有成员变量,下一篇文章开始讲解函数。

欲知后事如何,请听下回分解。

http://www.lryc.cn/news/246966.html

相关文章:

  • 绿色能源守护者:光伏运维无人机
  • i已学赋能智慧教育时代的幼儿教育
  • [栈迁移+ret滑梯]gyctf_2020_borrowstack
  • PTA:用函数实现从数列中删除一个数
  • C++设计模式之工厂模式(中)——工厂模式
  • 关于el-table的二次封装及使用,支持自定义列内容
  • 【Vue】Vue3 配置全局 scss 变量
  • C语言—二维数组
  • GUI加分游戏
  • 多线程的重要资料-信号量
  • 区块链相关技术、概念以及技术实现过程中的一些关键问题 Smart Contracts and Blockchains
  • 黑马点评Redis笔记
  • MX6ULL学习笔记 (一)交叉工具链的安装
  • uni-app中的onLoad不执行
  • EFAK-v3.0.1版部署与使用
  • 股票技术从初级到高级,从实盘进阶到摩尔缠论
  • 力扣105. 从前序与中序遍历序列构造二叉树
  • Windows环境下的JDK安装与环境配置
  • 【密码学引论】Hash密码
  • 【传智杯】儒略历、评委打分、萝卜数据库题解
  • java基础-IO
  • Java变量理解
  • 西南科技大学信号与系统A实验二(信号频谱分析)
  • C++-youtube cherno C++视频的一些知识点
  • sed命令
  • 【经验分享】开发问题记录总结(持续更新)
  • MySQL导出数据库中每个表前 3000 条数据
  • Spring事件注解@EventListener【观察】
  • 玩转Spring中强大的spel表达式!
  • HTTPS攻击原理 被攻击该如何防护