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

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

介绍

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

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

解析

我们继续解析 videooutput 的函数

RefreshLoopWaitEvent:
#define REFRESH_RATE 0.01
void VideoOutput::RefreshLoopWaitEvent(SDL_Event* event){double remaining_time = 0.0;SDL_PumpEvents();while (!SDL_PeepEvents(event, 1, SDL_GETEVENT, SDL_FIRSTEVENT, SDL_LASTEVENT)){if(remaining_time > 0.0){this_thread::sleep_for(chrono::milliseconds(int64_t(remaining_time * 1000.0)));}remaining_time = REFRESH_RATE;videoRefresh(&remaining_time);SDL_PumpEvents();}   
}

SDL_PumpEvents:用于更新事件队列并处理事件

SDL_PeepEvents:用于从事件队列中获取特定类型的事件

如果 remaining_time 大于 0,则等待一会

接着给 remaining_time 赋值 0.01

接着调用 videoRefresh,更新 SDL

MainLoop:
int VideoOutput::MainLoop(){SDL_Event event;while (true){RefreshLoopWaitEvent(&event);switch (event.type){case SDL_KEYDOWN:if(event.key.keysym.sym == SDLK_ESCAPE){return 0;}break;case SDL_QUIT:return 0;default:break;}}return 0;
}

主循环函数

检测 SDL_Event 的类型

SDL_KEYDOWN:检测到按键的按压,如果是 escape,则退出

SDL_QUIT:如果类型为 QUIT(停止),则退出

好了,videooutput 这个类解析完了,我们最后可以看一下,main 函数是如何运行的,把总体运行起来。

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

相关文章:

  • Missing file libarclite_iphoneos.a 问题解决方案
  • Halcon Solution Guide I basics(4): Blob Analysis(连通性解析)
  • 【Java】认识异常
  • 数据提取PDF SDK的对比推荐
  • Photoshop下载秘籍:附送7款不用下载的在线PS工具!
  • 12.docker的网络-host模式
  • ModuleNotFoundError: No module named ‘torch_sparse‘
  • 浅谈Linux bash脚本----getopts获取脚本POSIX标准传参
  • 弹窗msvcp140_1.dll丢失的解决方法,超简单的方法分享
  • TrustAsia亮相Matter开发者大会,荣获Matter优秀赋能者奖
  • 【Spring进阶系列丨第四篇】学习Spring中的Bean管理(基于xml配置)
  • Vue 2使用element ui 表格不显示
  • iOS APP包分析工具 | 京东云技术团队
  • 分库分表、分布式数据库、MPP
  • appium2.0+ 单点触控和多点触控新的解决方案
  • [deviceone开发]-do_Webview的基本示例
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • es6
  • EventListener原理
  • Github访问慢解决办法
  • HashMap ConcurrentHashMap
  • Java 最常见的 200+ 面试题:面试必备
  • Java多态
  • java取消线程实例
  • Redis字符串类型内部编码剖析
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • 对象引论
  • 跨域
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 七牛云假注销小指南
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • Java总结 - String - 这篇请使劲喷我
  • 选择阿里云数据库HBase版十大理由
  • 组复制官方翻译九、Group Replication Technical Details
  • ​configparser --- 配置文件解析器​
  • ​MySQL主从复制一致性检测
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (9)YOLO-Pose:使用对象关键点相似性损失增强多人姿态估计的增强版YOLO
  • (day 12)JavaScript学习笔记(数组3)
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (不用互三)AI绘画工具应该如何选择
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (转)h264中avc和flv数据的解析
  • (转)编辑寄语:因为爱心,所以美丽
  • (转)四层和七层负载均衡的区别
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .cn根服务器被攻击之后