把自定义的muxer加入ffmpeg源码
2015-06-02 17:10
218 查看
.简介:把上一篇文章中的muxer加入ffmpeg源码中去,使可以用命令行方式调用自定义的muxer
mkmuxer.c:
mkmuxer.h:
OK,按照正常的编译去编译ffmpeg,然后运行ffmpeg.exe输入ffmpeg -formats 看到有mk这个muxer了,如下:
拿结果改为yuv后缀,用播放器试试。
成功!OK,大功告成。
原理在上一篇的博文中已经讲到了,下一步,实现自己的demuxer。
第一步:
在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。
相关文章推荐
- GIT自动更新操作说明
- Base64编码及其作用
- 【牛腩新闻发布系统】——表格边框显示问题
- jquery的$.extend和$.fn.extend作用及区别
- Windows Server2008 开启多用户远程链接
- 智能指针总结
- 网易游戏2015年暑期实习生面试经历-游戏研发工程师
- Tiny4412汇编流水灯代码,Tiny4412裸机LED操作[1]
- 黑马程序员_java语言_正则表达式以及Date类
- Java静态代码块(static block)调用陷阱小记
- eclipse点击一个变量使相同名称变量高亮显示的方法
- THC SSL DoS的安装过程
- mysql数据库中group by和sum一起使用语句的简单介绍 .
- Description Resource Path Location Type Java compiler level does not match the version of the instal
- jax-ws webservice编程
- NSMutableArray
- fragment+Radiobutton实现顶部导航切换
- HeartBleed漏洞详解与利用
- storm多语言机制的一个例子
- 5.1.2 Binary Tree Level Order Traversal II