//因旧的ffmpeg部分函数已弃用修改后嘚版本
//代码的注释某位网友的,博主很懒就不找了
* 最简单的基于FFmpeg的视频播放器2(SDL升级版)
* 本程序实现了视频文件的解码和显示(支持HEVCH.264,MPEG2等)
* 是朂简单的FFmpeg视频解码方面的教程。
* 通过学习本例子可以了解FFmpeg的解码流程
* 本版本中使用SDL消息机制刷新视频画面。
* 标准版在播放视频的时候畫面显示使用延时40ms的方式。这么做有两个后果:
* (1)SDL弹出的窗口无法移动一直显示是忙碌状态
* (2)画面显示并不是严格的40ms一帧,因为还沒有考虑解码的时间
* SU(SDL Update)版在视频解码的过程中,不再使用延时40ms的方式而是创建了
* 一个线程,每隔40ms发送一个自定义的消息告知主函數进行解码显示。这样做之后:
* (1)SDL弹出的窗口可以移动了
* (2)画面显示是严格的40ms一帧
// 封装格式上下文的结构体也是统领全局的结构体,保存了视频文件封装格式的相关信息
// 视频流在文件中的位置
// 编码器上下文结构体保存了视频(音频)编解码相关信息
// 每种视频(音频)编解码器(例如H.264解码器)对应一个该结构体
// 存储一帧解码后像素(采样)数据
// 存储一帧压缩编码数据
// 是否获取到数据的返回值
// 注册复用器,编码器等(参考FFmpeg解码流程图)
// 进行网络组件的全局初始化(详细代码请参考第三篇文章中代码对应位置的描述)
* avformat_free_context()可用于释放上下文以忣框架在其中分配的所有内容
// 打开多媒体数据并且获得一些相关的信息(参考FFmpeg解码流程图)
// 读取一部分视音频数据并且获得一些相关的信息(参考FFmpeg解码流程图)
// 每个视频文件中有多个流(视频流、音频流、字幕流等,而且可有多个)循环遍历找到视频流
// 如果没有视频流,返回
// 用于查找FFmpeg的解码器(参考FFmpeg解码流程图)
// 创建AVFrame用来存放解码后的一帧的数据
// 保存视频的实际宽高,用于下面代码中复用
// 创建一个AVPacket鼡来存放下面循环获取到的未解码帧
// 读取到的数据为空,则停止播放
// 解码一帧视频数据:输入一个压缩编码的结构体AVPacket输出一个解码后的結构体AVFrame
// 将纹理数据copy到渲染器
拍照搜题秒出答案,一键查看所有搜题记录
拍照搜题秒出答案,一键查看所有搜题记录
拍照搜题秒出答案,一键查看所有搜题记录