您的位置:首页 > 其它

把自定义的muxer加入ffmpeg源码

2015-06-02 17:10 218 查看
.简介:把上一篇文章中的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(***FormatContext *fmt)
{
	//这些地方就可以加入自己的格式定义
	return 0;
}

int mk_write_packet(***FormatContext *fmt, ***Packet *pkt)
{
	avio_write(fmt->pb, pkt->data, pkt->size);//简单的用file协议写文件
	return 0;
}

int mk_write_trailer(***FormatContext *fmt)
{
	//这些地方就可以加入自己的格式定义
	return 0;
}

//#if CONFIG_MK_MUXER
***OutputFormat ff_mk_muxer = 
{
	.name			= "mk",
	.long_name		=  NULL_IF_CONFIG_SMALL("mk (MK Video Container)"),
	.mime_type		=  "mkvideo/x-msvideo",
	.extensions		=  "mk",

	.audio_codec	        =  ***_CODEC_ID_NONE,
	.video_codec	        =  ***_CODEC_ID_RAWVIDEO,//这里先用ffmpeg自带的yuv编码器,以后改成自己的
	.subtitle_codec   	=  ***_CODEC_ID_NONE,

	.flags			=  ***FMT_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 ***FORMAT_MKMUXER_H
#define ***FORMAT_MKMUXER_H

#include "avformat.h"

int mk_write_header(***FormatContext *fmt);
int mk_write_packet(***FormatContext *fmt, ***Packet *pkt);
int mk_write_trailer(***FormatContext *fmt);

#endif /* ***FORMAT_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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: