FFmpeg demuxer如何

来源:互联网 发布:阿里云app服务器价格表 编辑:程序博客网 时间:2024/05/21 06:23

FFmpeg demuxer如何
注册demuxer
libavformat/allformats.c
增加一个demuxer:
REGISTER_DEMUXER(DEMUXERNAME, demuxername)
为一个muxer:
REGISTER_MUXER(MUXERNAME, muxername)
宏将增加_demuxer或任何适当的。在顶级目录中运行configure和make clean,as config.h将自动被修改。
make distclean
./configure
Make
libavforamt/Makefile
增加
OBJS-$(CONFIG_DEMUXERNAME_DEMUXER)    += filename.o

demuxer代码
本节仅仅是一个概述;请看一个实际的demuxer来看它怎样做到这一点。
demuxername_probe
probe将被框架调用;这是你能检测该文件是不是你的格式的地方。不应依赖文件名,事实上你可能不能访问它。多数视频容器以一些固定字节序列开始。如果有4个字节和它们总是相同的与唯一的则返回AVPROBE_SCORE_MAX。否则返回0。如果该格式错误设计和没有这个则AVPROBE_SCORE_MAX除以某数(例如2)来对文件对应你的demuxer指定有限的信心。
demuxername_read_header
在这你应得到任何头信息,例如如果它是视频则是帧宽,如果它是音频则是采样速率等。你也应设置你的流(通常在例子说明大多数的事情,也许除了时间戳信息);设置codec_type、codec_id、视频的可能width、height、pix_fmt以及音频的channels、sample_rate、bits_per_sample和bit_rate。返回0。

demuxername_read_packet
多数格式被分成音频和视频块。read_packet函数设置pkt。这包括用av_new_packet或更好是av_get_packet(其也得到作为一个参数的文件流)初始化该包。你初始化该包后,你应设置(按任何顺序)pos和data(如果你使用了av_new_packet)、流索引(设置发送包到哪个解码器,通常音频或视频,其对应你初始化它们用的顺序)和pts,演示时间戳。

原创粉丝点击