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_AVDEVICEavdevice_register_all();
#endifavformat_network_init();