ffplay源码刨析
文章平均质量分 95
坎坎坷坷.
编程改变世界
展开
-
略有小成-ffplay数据读取线程分析(上)
该部分主要是通过函数avcodec_find_decoder来查找所需的解码器,如果用户指定了解码器,则会设置全局变量forced_codec_name的值,并通过avcodec_find_decoder_by_name来查找指定的解码器。这里就是通过流中的参数来设置窗口的相关宽高等信息。通过了前面的步骤,文件成功打开,获取了流的基本信息,并成功选择的需要的流进行读取,该部分会根据所选的流来打开对应的解码器。如果设置了相关流,由于av_find_best_stream的第三个参数,会查找用户指定的流。原创 2023-12-14 20:53:09 · 54 阅读 · 1 评论 -
初窥门径Ⅱ-ffplay-FrameQueue详细解析
写队列时,我们向队列写入一个新的帧的时候,总是会同时更新写索引。而读队列时,读取一个可读帧和更新读索引是独立的操作, 可以只读取帧而不更新索引, 或者只更新索引而不读取帧。调用frame_queue_peek_readable获取可读的frame根据是否需要跟新读索引调用frame_queue_next来更新读索引。原创 2023-11-30 21:05:58 · 166 阅读 · 1 评论 -
初窥门径-ffplay-PacketQueue结构体详细分析
PacketQueue结构体在之前的文章中已经有所介绍,这里再重复一遍,已经熟知的可自行跳过。//数据存储缓存区域//包的数量, 即队列的元素数量int size;//队列所有元素的数据大小的综合//队列所有节点播放时间总和//用户请求退出标志int serial;//播放序列号ffplay使用MyAVPacketList来保存解封装后的数据,而使用PacketQueue来存储MyAVpacketList数据。原创 2023-11-24 16:57:57 · 97 阅读 · 1 评论 -
初来驾到——ffplay总体框架和核心数据结构分析
serial用于标记当前节点的播放序列号,主要用来区分是否是连续数据,每一次进行seek操作,都会使得serial做+1的操作,以区分不同的播放序列. 每次 seek 以后 以前的队列中的东西当然就不能用了呗 应该放弃的放弃 要free 的 free。ffplay中,视频,音频,字幕有各自的解码线程和播放线程,故ffplay中其实也存在着对应的三种frameQueue,每个队列都有一个读端和写端,读端位于播放线程,而写端自然而然在解码线程接受数据。AVFifo 是一个按字节存储数据的结构体。原创 2023-11-22 19:21:29 · 175 阅读 · 0 评论