ffplay整体框架

本文介绍了ffplay的内部架构,包括三个主要子线程的工作内容,并重点解析了VideoState、MyAVPacketList、PacketQueue、Clock、Frame、FrameQueue和Decoder等关键数据结构。ffplay作为学习播放器开发的优秀实例,需要对音视频和多线程有深入理解。文章还提及播放序列的重要性,用于判断数据包和数据帧是否属于当前播放序列。
摘要由CSDN通过智能技术生成

前言

    虽说ffplay是一个简单的播放器,但是其实内部一点也不简单,其实笔者也不知道说它简单的理由是什么,是因为它只有一个点c文件???

    ffplay内部细节繁多,想要深入分析不单单要掌握音视频的相关概念,还要掌握多线程等相关知识,但是不得不说ffplay确实是学习的播放器开发的一个最佳例子。

    建议想要学习ffplay的童鞋们集成后边阅读边增加注释,多阅读几次,相信你每次阅读都会有不同的理解与收获...

本文使用的ffplay.c的版本是搭配ffmpeg5.0的版本。

ffplay代码大致架构

    关于fplay的架构很难三言两语说得清楚,而且本人对它的理解也不是很深,加上行笔比较啰嗦,可能就更加描述不清了,因此笔者制作了一张图,这张图描述了ffplay的三大子线程工作内容,当然如果加上字幕的话有四个子线程。

     图导出的可能有点模糊,再加上上传图床后不知道有没有更加模糊了,想要高清大图的可以后台留言,加v信索取。

    上图只是简单地画出了ffplay的大体架构,不同版本的代码API名称可能有点不同,但是大致思路肯定是一致的。这个图也忽略了一些细节,比如解码线程与读取线程的同步处理等。

ffplay关键数据结构

1、VideoState

    VideoState可以说是ffplay的内部管家了,几乎能拿到ffplay内部的所有变量以及相关状态。下面是笔者加了注释的的VideoState源码:

【学习地址】:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
【文章福利】:免费领取更多音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击1079654574加群领取哦~

  

/**
 * 统领全局的结构体,几乎能拿到ffplay内部所有的变量
 */
typedef struct V
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值