FFmpeg二次开发
本文主要讲解 FFmpeg 的二次开发,ffmpeg.exe
的命令行功能特别强大,很多需求都能直接用命令行实现,但是总有一些需求用 命令行实现不太好做。
而你实现那些特殊需求,通常需要把 ffmpeg.exe
里面的某部分代码抄过来,本文讲的主要就是如何抄代码。
我们需要新加一个程序 loken.exe
,由于 FFmpeg 项目的惯例是编译生成 xxx_g.exe
,然后 strip
之后再生成没有 _g
的程序。
本文也使用这种惯例来编译。在 FFmpeg 的 fftools
目录下新建一个 loken.c
文件,内容直接把 ffmpeg.c
的抄过来,然后在 main
函数那里加一句 printf
,如下:
然后修改一个 fftools
目录里的 makefile
文件,把我们自己的程序加进去。如下:
再需要修改一下 configure
里面的配置,这些是依赖,如下:
最后还要在 doc 目录下创建一个文件 loken.texi
内容直接复制 ffmpeg.texi
的即可,make 的时候需要这些 texi
文件生成文档。
现在可以执行 make 了,可以看到,会正常生成 loken 可执行文件,我们之前加的 printf
也打印出来了,如下:
现在,你可以随意修改 loken.c
里面的代码来满足你的项目需求。
我为什么不新建一个 clion 项目来调 FFmpeg 编译出来的动态库或者静态库呢?是因为,通常你抄代码,或者删掉一些不需要的代码的时候,你需要对照 ffmpeg.c
,有时候需要运行一个好的程序调试看看变量,才能知道自己写的程序有什么问题。原来 的 ffmpeg.c
就是好的,没有被改坏的程序
clion 调试方法请看《用Ubuntu18与clion调试FFmpeg》
loken.c
跟 ffmpeg.c
在同一个项目可以很方便切换调试。
TODO,这里还有一个地方需要修改。
ffmpeg_deps="avcodec avfilter avformat"
ffmpeg_select="aformat_filter anull_filter atrim_filter format_filterhflip_filter null_filtertranspose_filter trim_filter vflip_filter"
ffmpeg_suggest="ole32 psapi shell32"
ffplay_deps="avcodec avformat swscale swresample sdl2"
ffplay_select="rdft crop_filter transpose_filter hflip_filter vflip_filter rotate_filter"
ffplay_suggest="shell32"
ffprobe_deps="avcodec avformat"
ffprobe_suggest="shell32"
最后,讲一下 FFmpeg 的 doc
目录的文档作为扩展知识,doc
里面其实有很多非常有用的文档,例如 ffmpeg.txt
就画了一个流程图给你看,如下:
上图其实是 ffmpeg.c
文件的一部分逻辑流程。
还有一些其他的文档,如下:
1,doc/build_system.txt,编译 FFmpeg 的一些教程。
2,doc/filter_design.txt ,filter 滤镜的设计原理。
3,doc/writing_filters.txt,如何自己写一个滤镜加进去 FFmpeg。
4,doc/issue_tracker.txt,FFmpeg 的 bug 或者 feature 的跟踪流程
5,doc/multithreading.txt,FFmpeg 里面的多线程,有两种,Slice threading 跟 Frame threading
6,doc/optimization.txt ,编解码器的优化方法,FFmpeg 还有一部分函数是可以用汇编 SIMD 优化,他的一些函数如果被优化得晦涩难懂,可以查看早期的 gitlog
。
7,doc/rate_distortion.txt,对失真率的简单讨论。
8,doc/swscale.txt ,The official guide to swscale for confused developers.
分析完毕,我要去抄 ffmpeg.c
的代码了。
推荐一个零声学院免费公开课程,个人觉得老师讲得不错,分享给大家:
Linux,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK等技术内容,立即学习
FFmpeg二次开发相关推荐
- 搭建rtmp直播流服务之4:videojs和ckPlayer开源播放器二次开发(播放rtmp、hls直播流及普通视频)...
前面几章讲解了使用 nginx-rtmp搭建直播流媒体服务器; ffmpeg推流到nginx-rtmp服务器; java通过命令行调用ffmpeg实现推流服务; 从数据源获取,到使用ffmpeg推流, ...
- VLC播放器Demo(录像,截图等功能),Android播放器Demo可二次开发。ffmpeg-Kit (录像,截图,合流播放,合流推送,等一些列视频操作功能),可二次开发。
VLC播放器Demo(录像,截图等功能),可二次开发. ffmpeg-Kit (录像,截图,合流播放,合流推送,等一些列视频操作功能),可二次开发. 如果帮助的到了您,请您不要吝啬你的Star,先谢谢 ...
- 海康大华天地伟业网络摄像头chrome浏览器web二次开发
海康大华天地伟业网络摄像头chrome浏览器二次开发 海康大华天地伟业网络摄像头chrome浏览器web二次开发 由于工作的原因需要开发海康和大华,还有天地伟业的摄像头,而且必须是本地部署开发,每个厂 ...
- 语音控制+人脸识别——二次开发 Parrot 无人机!
继"如何用100美元和 TensorFlow 来造一个能'看'东西的机器人" 之后,Lukas 又一最新力作. 在"造"出能进行物体识别的机器人后,下一步就很清 ...
- 音视频开发6. 搭建 ffmpeg Linux远程开发环境
音视频开发6. 搭建 ffmpeg Linux远程开发环境 一.准备环境 二.操作步骤 1. 在CentOS 编译安装 ffmpeg 2. 编译安装ffmpeg后的环境 3. 本地在vscode安装 ...
- 【ReactiveX】基于Golang pmlpml/RxGo程序包的二次开发
基于Golang pmlpml/RxGo程序包的二次开发[阅读时间:约20分钟] 一.ReactiveX & RxGo介绍 1.ReactiveX 2.RxGo 二.系统环境&项目介绍 ...
- 20150411--Dede二次开发-01
20150411--Dede二次开发-01 目录 一.目前市场流行的电子商城系统 1 二.ecshop的介绍 1 三.安装 2 四.echsop 的目录结构 5 五.分析ecshop里面程序的架构 5 ...
- android系统二次开发,Andorid系统二次开发界面
Andorid系统二次开发界面 给大家介绍完外观,下面我们一起再来看下魅族MX的系统界面.本次魅族MX仍然采用的是Andorid操作系统,并且加入了二次开发界面.UI界面整体上保持了和M9的特色,不过 ...
- wordpress php教程 pdf,wordpress二次开发全能教程.pdf
wordpress 二次开发全能教程 1. 根据分类来制定导航条 A. 修改页面 header.php! <?php wp_list_categories('title_li='); ?> ...
最新文章
- NodeJS是用来做什么的
- io多路复用的原理和实现_IO多路复用的三种机制:select 、poll 、epoll
- xx是一个类型 这在给定的上下文_BERT, ELMo, amp; GPT-2: 这些上下文相关的表示到底有多上下文化?...
- 【~~~】POJ-1006
- 第一代计算机主要用于科学计算和数据处理,计算机一级第一章练习题.doc
- directdraw显示yuv视频,出现屏保时,yuv显示不出来,表面丢失
- 77GHz毫米波雷达快速chirp信号技术(三):测角原理
- m 序列性质的简单证明
- malloc函数的用法详解:
- select_io(LVDS) 参数设置与物理层的对应关系
- uniapp H5端与APP端压缩图片
- 物联网嵌入式——学习分享
- 伊利诺伊理工大学舒凯招收多名全奖博士生
- 大数据分析原地踏步 原来是分析工具面临信任问题
- 泪目!上海00后小伙AI「复活」奶奶,100%还原音容笑貌,却引发巨大争议
- MySQL 格式化日期(DATE_FORMAT)
- MATLAB群智能开源第十五期-闪电优化算法(LAPO)
- 【Rust 日报】2022-04-10 适用于Rust的异步CQL驱动
- 基础平台项目之集成Jquery.pagination.js实现分页
- .Net开发 开发工具使用vs C盘占用空间不断增大