《ffplay的数据结构分析》
《ffplay分析(从启动到读取线程的操作)》
《ffplay分析(视频解码线程的操作)》
《ffplay分析(音频解码线程的操作)》
《ffplay分析 (视频从Frame(解码后)队列取数据到SDL输出)》
《ffplay分析 (音视频同步:主时钟为音频)》
《ffplay分析 (暂停 / 播放处理)》
《ffplay分析 (seek操作处理)》
《ffplay源码(版本:ffmpeg-4.2.1)》
ffplay 分析(音频从Frame(解码后)队列取数据到SDL输出)
- 一、分析:
- 1、audio_open():设置期望使用到SDL的音频参数
- 2、audio_open():使用期望的音频打开SDL设备
- 3、audio_open():判断打开SDL设备后参数的变化
- 4、audio_open():保存SDL设备使用的音频参数
- 5、sdl_audio_callback():SDL音频读取回调函数(判断待拷贝到SDL的缓冲区(is->audio_buf)中是否有数据,否则调用audio_decode_frame()添加数据到is->audio_buf)
- 6、audio_decode_frame():从Frame(解码后)队列中获取一帧数据
- 7、audio_decode_frame():获取这一帧数据的大小(字节)如果不用重采样操作就将这个数据和数据长度返回上一层了
- 8、audio_decode_frame():获取同步调整后采样数和判断是否需要重采样的操作
- 9、audio_decode_frame():需要重采样情况下,设置重采样的输入输入缓冲区
- 10、audio_decode_frame():需要重采样情况下,设置开启重采样的补尝功能
- 11、audio_decode_frame():需要重采样情况下,分配重采样输出缓冲区内存
- 12、audio_decode_frame():需要重采样情况下,调用swr_convert()进行重采样操作
- 13、audio_decode_frame():需要重采样情况下,将重采样缓冲区设置到is->audio_buf
- 13、audio_decode_frame():不需要重采样情况下,将重采样缓冲区设置到is->audio_buf
- 14、audio_decode_frame():设置音频时钟相关
- 15、sdl_audio_callback():将数据拷贝到SDL缓冲区中设置播放,并更新读取操作的位置索引
- 16、sdl_audio_callback():最后音频时钟设置