基于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视频播放器三 音频封装格式解码播放