FFmpeg av_probe_input_buffer函数剖析以及优化

函数调用关系
av_probe_input_buffer调用av_probe_input_buffer2进行整一个码流格式的分析过程。
其中调用avio_read进行码流数据的读取,将缓存数据保存在AVProbeData定义的buf里面,
然后调用av_probe_input_format2(AVProbeData *pd, int is_opened, int *score_max)
函数去猜测码流格式,其中包裹最终的调用函数av_probe_input_format3。

优化方向
如果知道AVInputFormat的码流格式,就可以直接调用av_find_input_format函数,返回
码流格式,避免了数据的探测延时,而且不再需要调用av_probe_input_buffer函数

例子,指定h264码流格式,代码如下:av_find_input_format("h264")

时间: 2024-11-05 20:31:39

FFmpeg av_probe_input_buffer函数剖析以及优化的相关文章

FFmpeg avio_alloc_context函数剖析

函数原型AVIOContext *avio_alloc_context(                  unsigned char *buffer,                  int buffer_size,                  int write_flag,                  void *opaque,                  int (*read_packet)(void *opaque, uint8_t *buf, int buf_siz

FFmpeg avcodec_parameters_to_context函数剖析

函数说明    将AVCodecParameters结构体中码流参数拷贝到AVCodecContext结构体中,并且重新拷贝一份extradata内容,涉及到的视频的关键参数有format, width, height, codec_type等,这些参数在优化avformat_find_stream_info函数的时候,手动指定该参数通过InitDecoder函数解码统一指定H264,分辨率是1920*1080 int avcodec_parameters_to_context(AVCodecC

FFmpeg init_input函数剖析

函数调用逻辑avformat_open_input       init_input            av_probe_input_buffer2 函数原型 static int init_input(AVFormatContext *s, const char *filename, AVDictionary **options) 函数说明主要是调用av_probe_input_buffer2函数探测码流格式.AVFormatContext结构体flags变量,在经过avformat_al

FFmpeg mov_read_ftyp函数剖析

函数说明 读取文件格式,最小版本以及兼容格式,然后存储到metadata,metadata作为AVFormatContext成员变量,可以通过t = av_dict_get(pAVFormatContext->metadata, "major_brand", NULL, AV_DICT_IGNORE_SUFFIX);查看文件格式 /* read major brand, minor version and compatible brands and store them as m

FFmpeg ff_h264_parse_sprop_parameter_sets函数剖析

SDP中SPS内容        sprop-parameter-sets=Z0IAKpY1QPAET8s3AQEBQAABwgAAV+QB,aM48gA== 该函数主要是读取Z0IAKpY1QPAET8s3AQEBQAABwgAAV+QB的内容到data_ptr,一共32个字节还没有读取SPS的每一个字段,然后赋值给SPS相应的字段int ff_h264_parse_sprop_parameter_sets(AVFormatContext *s,                        

自执行匿名函数剖析

引入 在很多js代码中我们常常会看见这样一种写法: (function( window, undefined ) { // code })(window); 这种写法我们称之为自执行匿名函数(self-executing anonymous function). 正如它的名字一样,它是自己执行自己的,前一个括号是一个匿名函数,后一个括号代表立即执行. 函数和函数表达式的区别 语法 function keqing(){ //函数 alert('Hi~'); } var keqing = funct

函数的调用优化

函数的调用优化 在类中有四大成员函数,构造函数,拷贝构造函数,赋值函数和析构函数,在类外进行实例化时,若调用函数的方法不当则会产生时间和空间的浪费. 以下,将用几个小栗子来说明函数的调用优化的常见办法 类: class Test { public: Test(int d = 0) : _data(d) { cout << "Create Test Object:"<<this << endl; } Test(const Test&x) :_d

写日志函数和持续优化

首先看下面的函数 <span style="font-size:18px;">void writelog(char* file, char* msg) { FILE*fp=NULL; int nDataLen = strlen(msg); fp=fopen(file,"ab+");//只供读取 if(fp!=NULL) { fwrite(msg, nDataLen, 1, fp); } fclose(fp);//关闭文件 }</span> 这

WebService之nginx+(php-fpm)结构模型剖析及优化

随着php脚本语言使用的普及,目前webserice服务大部分都在用nginx+(php-fpm)的结构,了解了其工作过程后才可以在各个方面想办法做调整优化和故障排查,从以下几点总结一下这种模型. 一.nginx和php-fpm的关系和分工 nginx是web服务器,php-fpm是一个PHPFastCGI进程管理器,两者遵循fastcgi的协议进行通信,nginx负责静态类似html文件的处理,php-fpm负责php脚本语言的执行,这么设计的目的是为了解耦前端nginx和后端的php,不至于