把自定义的muxer加入ffmpeg源码

来源:互联网 发布:淘宝网电动工具 编辑:程序博客网 时间:2024/05/18 00:55

.简介:把上一篇文章中的muxer加入ffmpeg源码中去,使可以用命令行方式调用自定义的muxer

第一步:

在libavformat目录下新建mkmuxer.c和mkmuxer.h,代码如下:

mkmuxer.c:

/**实现一个自己的muxer(只为了熟悉框架,这个muxer其实是yuv,muxer)*作者:缪国凯(MK)*821486004@qq.com*2015-6-2*/#include "mkmuxer.h"int mk_write_header(AVFormatContext *fmt){//这些地方就可以加入自己的格式定义return 0;}int mk_write_packet(AVFormatContext *fmt, AVPacket *pkt){avio_write(fmt->pb, pkt->data, pkt->size);//简单的用file协议写文件return 0;}int mk_write_trailer(AVFormatContext *fmt){//这些地方就可以加入自己的格式定义return 0;}//#if CONFIG_MK_MUXERAVOutputFormat ff_mk_muxer = {.name= "mk",.long_name=  NULL_IF_CONFIG_SMALL("mk (MK Video Container)"),.mime_type=  "mkvideo/x-msvideo",.extensions=  "mk",.audio_codec        =  AV_CODEC_ID_NONE,.video_codec        =  AV_CODEC_ID_RAWVIDEO,//这里先用ffmpeg自带的yuv编码器,以后改成自己的.subtitle_codec   =  AV_CODEC_ID_NONE,.flags=  AVFMT_NOTIMESTAMPS,.priv_data_size =  0,.write_header   =  mk_write_header,.write_packet   =  mk_write_packet,.write_trailer  =  mk_write_trailer,};//#endif

mkmuxer.h:

/**实现一个自己的muxer(只为了熟悉框架,这个muxer其实是yuv,muxer)*作者:缪国凯(MK)*821486004@qq.com*2015-6-2*/#ifndef AVFORMAT_MKMUXER_H#define AVFORMAT_MKMUXER_H#include "avformat.h"int mk_write_header(AVFormatContext *fmt);int mk_write_packet(AVFormatContext *fmt, AVPacket *pkt);int mk_write_trailer(AVFormatContext *fmt);#endif /* AVFORMAT_RAWENC_H */

第二步:

在libavformat下的allformats.c的av_register_all里加入:
REGISTER_MUXER (MK,              mk);//add ByMK for mk muxer


第三步:

在libavformat目录下的makefile文件的# muxers/demuxers后加入:
OBJS-$(CONFIG_MK_MUXER)                  += mkmuxer.o


第四步:

在ffmpeg根目录的config.h里加入:

#define CONFIG_MK_MUXER 1


OK,按照正常的编译去编译ffmpeg,然后运行ffmpeg.exe输入ffmpeg -formats 看到有mk这个muxer了,如下:

 DE m4v             raw MPEG-4 video  E matroska        Matroska D  matroska,webm   Matroska / WebM  E md5             MD5 testing D  mgsts           Metal Gear Solid: The Twin Snakes DE microdvd        MicroDVD subtitle format DE mjpeg           raw MJPEG video  E mk              mk (MK Video Container)</span>  E mkvtimestamp_v2 extract pts as timecode v2 format, as defined by mkvtoolnix
再试一下命令:ffmpeg -i test.avi -y test.mk。
拿结果改为yuv后缀,用播放器试试。

成功!OK,大功告成。


原理在上一篇的博文中已经讲到了,下一步,实现自己的demuxer。



0 0
原创粉丝点击