基于FFmpeg的视频播放器之二:解复用

Posted 草上爬

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于FFmpeg的视频播放器之二:解复用相关的知识,希望对你有一定的参考价值。

一.流程

解复用就是读取本地文件或网络流,将解封装后的音频和视频数据分别保存到缓存队列中
解复用的一般流程如下:


1.avformat_open_input

int avformat_open_input(AVFormatContext **ps, const char *url, AVInputFormat *fmt, AVDictionary **options);
该函数的作用就是打开文件,尽可能的收集各方面的信息并填充AVFormatContext结构体,基本上是做了除过解码之外的所有工作
这里要注意参数fmt和options,fmt用来指定输入格式,如果非空,强制以此参数指定的格式打开,否则自动检测输入格式,因此通常将fmt设置为nullptr
options可以打开码流前指定各种参数,比如:探测时间/超时时间/最大延时等,在打开网络流的时候非常有用

2.avformat_find_stream_info

int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options);
该函数的作用是获取完整的流信息。为什么在调用了avformat_open_input后,仍然需要调用avformat_find_stream_info才能获取正确的流信息呢?
在avformat_open_input()函数中会调用与输入文件格式相对应的read_header()函数,比如flv格式的flv_read_header()函数

以上是关于基于FFmpeg的视频播放器之二:解复用的主要内容,如果未能解决你的问题,请参考以下文章

FFmpegffplay 播放视频命令 ( 播放 | 暂停 | 停止 | 音量控制 | 进度控制 | 音频流 / 视频流 / 字幕流 / 节目切换 )

Android FFmpeg视频播放器三 音频封装格式解码播放

QT软件开发-基于FFMPEG设计视频播放器-GPU硬解图像

QT软件开发-基于FFMPEG设计视频播放器-软解图像

FFmpeg之ffplay源码简要分析

FFmpeg之ffplay源码简要分析