把自定义的muxer加入ffmpeg源码

59 篇文章 25 订阅
2 篇文章 0 订阅

.简介:把上一篇文章中的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_MUXER
AVOutputFormat 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。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dancing_night

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值