multi_media-ffmpeg-get_format

格式获取
本质上是通过文件的后缀、文件头部信息,在既定的格式集合中,找出最匹配的格式。
前提是先要有既定格式集合(av_format_register_all,并在编译的时候把demuxer打开),并且要有数据才能分析。
结构上:
avio_alloc_context(创建pb) -> av_prob_input_buffer(探测输入格式) -> avformat_open_input(取得格式) -> avformat_find_stream_info(取得更细的信息,像duration)


推导发散:
1.在编译configure的时候,可以enable或disable特定的demuxer,以修改既定的格式集合。
2.既然是匹配,就存在在猜测的因素,还是有可能匹配错格式。--可以修改匹配的逻辑或分数值,把自己关心的格式提高分数。
3.格式就是结构,获取格式就是获取结构,有了结构,就可以找到对应这个结构的编解码器。--在拿到formatcontext后,可以拿到所有流,进而拿到每个流的codecContext,进而拿到codec。
技巧:

1.可以把获取格式的代码抽离出来,写成一个app,支持把文件拉进来,就解析出文件的格式并显示出来。这是一个mac平台上的app,供下载。--木有得上传

获取格式的部分代码:
int FFmpegExtractor::readData(void* obj, uint8_t* buf, int bufsize) {
DataSourceBase* source = (DataSourceBase*)obj;
if (source) {
int realsize = source->ds_read(buf, bufsize);
return realsize;
}
return 0;
}


int64_t FFmpegExtractor::seekData(void* obj, int64_t offset, int whence) {
DataSourceBase* source = (DataSourceBase*)obj;
if (source) {
if (whence == AVSEEK_SIZE) {
int size = source->ds_size();
return size;
}
}
    return offset;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值