1 ffplay.c的意义

ffplay.c是FFmpeg源码⾃带的播放器,调⽤FFmpeg和SDL API实现⼀个⾮常有⽤的播放器。
例如哔哩哔哩著名开源项⽬ijkplayer也是基于ffplay.c进⾏⼆次开发。
ffplay实现了播放器的主体功能,掌握其原理对于我们独⽴开发播放器⾮常有帮助。

2 FFplay框架分析

2.1 通过 stream_open  方法 播放器初始化

2.1.1 初始化packet queue

创建音视频解码前的数据缓存队列
我们会将从 音频或者视频读取的数据 ,存储到 packet queue ,也就是调用 av_read_frame 后的packet会 使用 packet_queue_put方法 存储到 packet queue中。

2.1.2 初始化frame queue

创建音视频解码后的数据缓存队列

2.1.3初始化clock

初始化时钟(音频,视频,外部时钟)

2.1.4 创建数据读取线程

ffplay.c 重要逻辑解析

ffplay.c 代码 重要逻辑分析

avdevice_register_all

该函数用于注册输入和输出设备,属于libavdevice模块,是libavformat模块的补充,包含muxers与demuxers两部分。
这个函数何时调用呢?当需要基于硬件设备实现功能时,应该在应用程序开头调用该函数。


#if CONFIG_AVDEVICE
    avdevice_register_all();
#endif
    avformat_network_init();

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部