有趣生活

当前位置:首页>科技>ffplay 同步播放多个音开发-FFplay播放流程

ffplay 同步播放多个音开发-FFplay播放流程

发布时间:2026-07-21阅读(1)

导读背景说明FFmpeg是一个开源,免费,跨平台的视频和音频流方案,它提供了一套完整的录制、转换以及流化音视频的解决方案。而ffplay是有ffmpeg官方提供....

背景说明

FFmpeg是一个开源,免费,跨平台的视频和音频流方案,它提供了一套完整的录制、转换以及流化音视频的解决方案。而ffplay是有ffmpeg官方提供的一个基于ffmpeg的简单播放器。学习ffplay对于播放器流程、ffmpeg的调用等等是一个非常好的例子。本文就是对ffplay的一个基本的流程剖析,很多细节内容还需要继续钻研。

注:本文师基于ffmpeg-2.0版本进行分析,具体代码行还请对号入座,谢谢!

主框架流程

下图是一个使用“gcc eygpt graphviz 手工调整”生成的一个ffplay函数基本调用关系图,其中只保留了视频部分,去除了音频处理、字幕处理以及一些细节处理部分。

注:图中的数字表示了播放中的一次基本调用流程,X?序号表示退出流程。

从上图中我们可以了解到以下几种信息:

  • 三个线程:主流程用于视频图像显示和刷新、read_thread用于读取数据、video_thread用于解码处理;
  • 视频数据处理:由read_thread读取原始数据解复用后,按照packet的方式放入到队列中;由video_thread从packet队列中读取packet解码后,按照picture的方式放入到队列中;由主流程从picture队列中依次取picture进行显示;
  • 启动流程:启动流程如上图中的数字部分
  • 退出流程:退出流程如上图中的X?序号部分

下面将对三个线程分别加以详细描述。

read_thread线程

从read_thread开始说起而不是从main线程,主要原因是考虑按照视频数据转换的方式比较好理解。

read_thread的创建是在main-->stream_open函数中:

TAGS标签:  ffplay  同步  播放  多个  开发  ffplay 同步播

Copyright © 2024 有趣生活 All Rights Reserve吉ICP备19000289号-5 TXT地图HTML地图XML地图