• 小结
  • avdeviceffmpeg自定义输出设备OPENGL
  • avcodecffmpeg自定义字节流转换器MJPEG2JPEG
  • avcodecffmpeg自定义硬件加速解码器videotoolbox
  • avcodecffmpeg自定义解析器h264
  • avcodecffmpeg自定义解码器fdkaac
  • avcodecffmpeg自定义编码器fdkaac

小结

之前研究了下ffmpeg自定义编解码器的编写,为了避免忘记,现在小结一下。如果我们想添加自己的库到ffmpeg中,比如添加私有的协议,自定义编解码器等,都可以按照本文描述去添加。

(avdevice)ffmpeg自定义输出设备(OPENGL)

研究opengl自定义输出设备是怎么在ffmpeg中接入的.
接入包含文件如下:opengl-enc.c:
1).定义上下文结构体OpenGLContext
2).定义函数opengl_write_headeropengl_write_packetopengl_write_frameopengl_write_traileropengl_control_message
3).定义AVOutputFormat的结构体ff_opengl_muxer
AVOutputFormat ff_opengl_muxer={.name="opengl",
.long_name=NULL_IF_CONFIG_SMALL("OpenGLoutput"),
.priv_data_size=sizeof(OpenGLContext),
.audio_codec=AV_CODEC_ID_NONE,
.video_codec=AV_CODEC_ID_RAWVIDEO,
.write_header=opengl_write_header,
.write_packet=opengl_write_packet,
.write_uncoded_frame=opengl_write_frame,
.write_trailer=opengl_write_trailer,
.control_message=opengl_control_message,
.flags=AVFMT_NOFILE|AVFMT_VARIABLE_FPS|AVFMT_NOTIMESTAMPS,
.priv_class=&opengl_class,};
4).修改alldevices.c文件: REGISTER_OUTDEV(OPENGL,opengl);

(avcodec)ffmpeg自定义字节流转换器(MJPEG2JPEG)

研究mjpeg2jpeg自定义转换器是怎么接入的.
接入包含文件如下:
mjpeg2jpeg_bsf.c:
1).定义函数mjpeg2jpeg_filter
2).定义mjpeg2jpeg自定义转换器结构体ff_mjpeg2jpeg_bsf
AVBitStreamFilter ff_mjpeg2jpeg_bsf={
.name="mjpeg2jpeg",
.filter=mjpeg2jpeg_filter,
};
3).修改allcodec.c:REGISTER_BSF(MJPEG2JPEG,mjpeg2jpeg);

(avcodec)ffmpeg自定义硬件加速解码器(videotoolbox)

研究videotoolbox自定义硬件加速解码器是怎么在ffmpeg中接入的.
接入包含文件如下:videotoolbox.c:
1).定义函数ff_videotoolbox_alloc_frameff_videotoolbox_h264_start_frameff_videotoolbox_h264_decode_slicevideotoolbox_h264_end_frameff_videotoolbox_uninit
2).定义硬件加速解码器ff_h264_videotoolbox_hwaccel
AVHWAccel ff_h264_videotoolbox_hwaccel={
.name="h264_videotoolbox",
.type=AVMEDIA_TYPE_VIDEO,
.id=AV_CODEC_ID_H264,
.pix_fmt=AV_PIX_FMT_VIDEOTOOLBOX,
.alloc_frame=ff_videotoolbox_alloc_frame,
.start_frame=ff_videotoolbox_h264_start_frame,
.decode_slice=ff_videotoolbox_h264_decode_slice,
.end_frame=videotoolbox_h264_end_frame,
.uninit=ff_videotoolbox_uninit,
.priv_data_size=sizeof(VTContext),};
修改allcodecs.c:REGISTER_HWACCEL(H264_VIDEOTOOLBOX,h264_videotoolbox);
总结:自定义解码器就是AVCodec增加新的支持,并在最开始的时候,注册到列表中

(avcodec)ffmpeg自定义解析器(h264)

研究h264自定义解析器是怎么接入的.
接入包含文件如下:
h264_praser.c:
1).定义h264解析上下文H264ParseContext
2).定义函数init/h264_parse/h264_close/h264_split
3).定义解析器结构体ff_h264_parser
AVCodecParser ff_h264_parser={
.codec_ids={AV_CODEC_ID_H264},
.priv_data_size=sizeof(H264ParseContext),
.parser_init=init,
.parser_parse=h264_parse,
.parser_close=h264_close,
.split=h264_split,};
4).修改allcodec.c:REGISTER_PARSER(H264,h264);

(avcodec)ffmpeg自定义解码器(fdkaac)

研究fdkaac自定义解码器是怎么在ffmpeg中接入的.
接入包含文件如下:
libfdk-aacdec.c:
1).定义解码器上下文FDKAACDecContext
2).定义fdk_aac_dec_options默认解码选项
3).定义解码类fdk_aac_dec_class
4).定义get_stream_info函数
5).定义fdk_aac_decode_close
fdk_aac_decode_init
fdk_aac_decode_frame
fdk_aac_decode_flush
6).定义解码器ff_libfdk_aac_decoder
7).修改allcodecs.c:REGISTER_ENCODER(LIBFAAC,libfaac);
包含fdkaac编解码器注册这样就导出了解码器
#defineREGISTER_DECODER(X,x)\{\externAVCodecff_##x##_decoder;\if(CONFIG_##X##_DECODER)\avcodec_register(&ff_##x##_decoder);\}
总结:自定义解码器就是AVCodec增加新的支持,并在最开始的时候,注册到列表中

(avcodec)ffmpeg自定义编码器(fdkaac)

研究fdkaac自定义编码器是怎么在ffmpeg中接入的.
接入包含文件如下:libfdk-aacenc.c:
1).定义编码器上下文AACContext
2).定义编码器配置选项aac_enc_options
3).定义aac_get_error
aac_encode_close
aac_encode_init
aac_encode_frame
4).定义ff_libfdk_aac_encoder
5).修改allcodecs.c:REGISTER_ENCODER(LIBFAAC,libfaac);
包含fdkaac编解码器注册这样就导出了编码器#defineREGISTER_ENCODER(X,x)\{\externAVCodecff_##x##_encoder;\if(CONFIG_##X##_ENCODER)\avcodec_register(&ff_##x##_encoder);\}

ffmpeg自定义编解码器相关推荐

  1. 【Android FFMPEG 开发】FFMPEG 获取编解码器 ( 获取编解码参数 | 查找编解码器 | 获取编解码器上下文 | 设置上下文参数 | 打开编解码器 )

    文章目录 博客简介 . FFMPEG 编解码器获取流程 I . FFMPEG 获取音视频流的编解码参数 AVCodecParameters *codecpar II . FFMPEG 查找解码器 av ...

  2. android多媒体自定义编解码器

    媒体 Android 包含 Stagefright.Stagefright 是位于 Native 层的媒体播放引擎,内置了基于软件的编解码器,且适用于热门媒体格式. Stagefright 音频和视频 ...

  3. Netty使用篇:自定义编解码器

    我们今天还是继续Netty,Netty的编码器和解码器就是Netty对Handler这个组件的一种使用场景而已,SpringWebFlex就是基于这个Netty来做的,在往上引深一层GateWay服务 ...

  4. Mina学习(4):实现自定义编解码器并解决半包,丢包,粘包问题

    一.编码器:将要发送的数据转化成byte[] 进行传输 自定义编码器的实现: package filter;import org.apache.mina.core.buffer.IoBuffer; i ...

  5. FFmpeg 预设编解码器

    为了简化在某些编解码器中使用的大量选项,我们可以使用预设置文件,其中的选项更好地格式化并保存以便将来使用. 关于预设文件的介绍 预置文件是用于各种选项的文本文件,包括特定的编解码器.它们包含键=值对, ...

  6. ffmpeg 自定义数据来源, 可以是文件,可以是内存,可以是网络, 爱咋的咋的...

    2019独角兽企业重金招聘Python工程师标准>>> // ffmpeg_custom_context.cpp : Defines the entry point for the ...

  7. 使用fastjson提供的接口实现自定义的编解码器

    FastJson中文 API 在项目开发中经常会遇到一些业务需要对某些数据进行特殊的定制化处理,fastjson为我们提供了接口可以用于实现自定义的编解码器来完成我们的业务要求. ObjectSeri ...

  8. Netty 源码分析系列(十五)自定义解码器、编码器、编解码器

    前言 我们今天继续来分析 Netty 的编解码器,这次我们要自己动手实现自定义的编码器.解码器和编解码器. 自定义基于换行的解码器 LineBasedFrameDecoder 类 LineBasedF ...

  9. Mina基础(五):编写自定义协议及编解码器

    为什么要制定协议呢? 我们知道,底层传输的都是二进制数据,服务端和客户端建立连接后进行数据的交互,接受这对方发送来的消息,如何判定发送的请求或者响应的数据结束了呢?总不能一直傻等着,或者随意的就结束消 ...

最新文章

  1. [android] 从gallery获取图片
  2. 算法--------------------寻找两个有序数组的中位数
  3. SpringMVC+Spring+Mybatis整合,使用druid连接池,声明式事务,maven配置
  4. Django REST framework 开始
  5. JsonUtils 工具类
  6. 初识斯蒂尔杰斯积分(Stieltjes integral)
  7. 2019王小的Java学习之路
  8. 伪样式:hover ,:active,:focus
  9. log4j slf4j实现_日志那点事儿——slf4j源码剖析
  10. JAVA day10、11、12 飞机大战
  11. 语音识别如何处理工作 语音识别功能三个处理阶段
  12. python报表自动化系列 - 获取某月日历并以列表形式返回(公历)
  13. Python3+Selenium3自动化测试-(四)
  14. linux 压缩文件的命令总结
  15. 图像处理笔记1一上采样与下采样
  16. 京东智能客服言犀启发式问答技术探秘
  17. 实话实说,现在的结婚,真就是走个形式!
  18. int,long,double数值类的基本类型导致更新数据被清零
  19. 【安卓源码】简单分析smaps节点
  20. c++ 小游戏 NO6 跑酷游戏

热门文章

  1. SQL SERVER使用STUFF函数拼接
  2. HTML编写个人日记,HTML学习日记(1-基础)
  3. 【2019-CVPR-3D人体姿态估计】Weakly-Supervised Discovery of Geometry-Aware Representation for 3D HPE..
  4. 大江东去浪涛尽,千古风流人物故垒西边。
  5. 用vue写的移动端车牌号输入法
  6. 10大经典数据分析模型,收藏了!
  7. 发现中国地铁名字的秘密
  8. 网站开发-实用SQL语句大全
  9. 正大国际期货:你身边有朋友或者亲人做期货挣钱的没有?
  10. Win10 2004版本中关于VT-x技术的大坑