一个视频的播放,播放器的执行步骤大致如下:读取原始数据、解复用、解码、显示。对于vlc和ijk播放器的编解码部分都是使用ffmpeg,在这里以开源项目ijkplayer为例分析播放器在读取原始数据后的解码执行步骤:
1. avformat_open_input()该函数用于打开多媒体数据并且获得一些相关的信息,声明位置libavformat\avformat.h,函数执行成功的话,其返回值大于等于0。该函数调用成功之后会对结构体AVFormatContext进行一些处理。
int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options)
ps:函数调用成功之后处理过的AVFormatContext结构体。
file:打开的视音频流的URL。
fmt:强制指定AVFormatContext中AVInputFormat的。这个参数一般情况下可以设置为NULL,这样FFmpeg可以自动检测AVInputFormat。
dictionay:附加的一些选项,一般情况下可以设置为NULL。
2. avformat_find_stream_info()函数可以读取一部分视音频数据并且获得一些相关的信息。函数正常执行后返回值大于等于0。
int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options);
ic:输入的AVFormatContext。
options:额外的选项,目前没有深入研究过。
该函数上下文部分是调节起播延迟效果最明显的地方。函数分析流的时间主要由传入的AVFormatContext的probesize 和 max_analy
1. avformat_open_input()该函数用于打开多媒体数据并且获得一些相关的信息,声明位置libavformat\avformat.h,函数执行成功的话,其返回值大于等于0。该函数调用成功之后会对结构体AVFormatContext进行一些处理。
int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputFormat *fmt, AVDictionary **options)
ps:函数调用成功之后处理过的AVFormatContext结构体。
file:打开的视音频流的URL。
fmt:强制指定AVFormatContext中AVInputFormat的。这个参数一般情况下可以设置为NULL,这样FFmpeg可以自动检测AVInputFormat。
dictionay:附加的一些选项,一般情况下可以设置为NULL。
2. avformat_find_stream_info()函数可以读取一部分视音频数据并且获得一些相关的信息。函数正常执行后返回值大于等于0。
int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options);
ic:输入的AVFormatContext。
options:额外的选项,目前没有深入研究过。
该函数上下文部分是调节起播延迟效果最明显的地方。函数分析流的时间主要由传入的AVFormatContext的probesize 和 max_analy

本文探讨了基于ffmpeg的播放器在起播延迟方面的优化问题,重点关注了av_read_frame()和avcodec_decode_video2()等函数的优化可能性。目前,probesize的设置成为了一个可调整的参数,允许在初始化播放器时由外部进行设定,以减少延迟。
最低0.47元/天 解锁文章
2987

被折叠的 条评论
为什么被折叠?



