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

音视频项目—基于FFmpeg和SDL的音视频播放器解析(十九)

介绍

在本系列,我打算花大篇幅讲解我的 gitee 项目音视频播放器,在这个项目,您可以学到音视频解封装,解码,SDL渲染相关的知识。您对源代码感兴趣的话,请查看基于FFmpeg和SDL的音视频播放器

如果您不理解本文,可参考我的前一篇文章音视频项目—基于FFmpeg和SDL的音视频播放器解析(十八)

解析

接着上文,我们继续解析 videooutput 的函数

首先,我们看构造函数

VideoOutput::VideoOutput(AVSync* avsync, AVRational time_base, AVFrameQueue* frame_queue, int video_width, int video_height){this->avsync = avsync;this->time_base = time_base;this->frame_queue = frame_queue;this->video_width = video_width;this->video_height = video_height;
}

这比较好理解,就是一些私有成员变量的赋值

Init 函数
int VideoOutput::Init(){if(SDL_Init(SDL_INIT_VIDEO)){return -1;}win = SDL_CreateWindow("player", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, video_width, video_height, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);if(!win){return -1;}renderer = SDL_CreateRenderer(win, -1, 0);if(!renderer){return -1;}texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_IYUV, SDL_TEXTUREACCESS_STREAMING, video_width, video_height);if(!texture){return -1;}yuv_buf_size = video_width * video_height * 1.5;yuv_buf = new uint8_t[yuv_buf_size];
}

SDL_Init 初始化视频设备

SDL_CreateWindow 创建窗口,后面是参数,这里不做深究。

SDL_CreateRenderer 创建渲染器,后面的参数也不做深究

SDL_CreateTexture 创建纹理

然后,赋值 yuv 数组长度为 1.5 倍,这设计到 YUV420 原理,这篇文章不做深究

最后,创建 yuv 数组

好了,今天就解析到这里。下文解析后面的函数。

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

相关文章:

  • Docker的registry
  • ELK分布式日志管理平台部署
  • zlmediakit实现rtsp流服务器
  • 力扣104. 二叉树的最大深度
  • pytorch导出rot90算子至onnx
  • 24. 深度学习进阶 - 矩阵运算的维度和激活函数
  • 嵌入式硬件电路·电平
  • Linux中vi常用命令-批量替换
  • 智能医疗越发周到!新的机器人系统评估中风后的活动能力
  • 从零开始学习管道:管道程序的优化和文件描述符继承问题
  • gitee推荐-1Panel
  • 搜索百度可以直接生成代码拉
  • 【广州华锐互动】节约用水VR互动教育:身临其境体验水资源的珍贵!
  • ubuntu/vscode下的c/c++开发之-CMake语法与练习
  • Git多库多账号本地SSH连接配置方法
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【Linux系统编程】快速查找errno错误码信息
  • ABAP的include关键字,Java的import, C的include和C4C ABSL 的import比较
  • canvas 五子棋游戏
  • ComponentOne 2017 V2版本正式发布
  • happypack两次报错的问题
  • Intervention/image 图片处理扩展包的安装和使用
  • JavaScript设计模式与开发实践系列之策略模式
  • JAVA之继承和多态
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • PHP变量
  • Python学习之路13-记分
  • Twitter赢在开放,三年创造奇迹
  • 笨办法学C 练习34:动态数组
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 聊聊directory traversal attack
  • 前端
  • 微信开放平台全网发布【失败】的几点排查方法
  • 你对linux中grep命令知道多少?
  • mysql面试题分组并合并列
  • ​你们这样子,耽误我的工作进度怎么办?
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • #{}和${}的区别?
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (11)MSP430F5529 定时器B
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (分类)KNN算法- 参数调优
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (六)vue-router+UI组件库
  • (转载)Linux网络编程入门
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • ***通过什么方式***网吧
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .NET 事件模型教程(二)
  • .net操作Excel出错解决
  • .NET多线程执行函数
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • @Bean有哪些属性