使用FFMPEG进行音视频编解码(C++) 0.简介
FFMPEG介绍
FFMPEG是一个开源的编解码软件,读作“ef ef em peg”。官方网址是:http://ffmpeg.org/。FFMPEG几乎支持所有的格式,当然了像一些特殊的格式FFMPEG是无法支持的,例如爱奇艺的QLV等等,如果自己做一个格式,加入一些视频信息或者专门用于加密的,并且不公开格式,FFMPEG当然是无法支持的。国内的好多音视频转码、播放工具都是基于FFMPEG的,例如:格式工厂、完美解码。其实,这两款软件还是不错的,使用起来相当便利,而且功能也是比较完善的,强烈推荐。
FFMPEG是开源的,所以理论上支持所有的系统,官方直接编译好的有Windows/Linux/Mac,安装方法都很简单。简单介绍一下windows和Debian/Ubuntu的安装方式,其他的可以去FFMPEG的下载页面查看http://ffmpeg.org/download.html。
Linux安装方法(Debian/Ubuntu/Deepin等)
很简单,只需要通用APT软件包的安装方法就可以。
sudo apt install ffmpeg
Windows安装方法
可以通过上面的下载页面,点击Windows的下载图标,然后点击build来跳转,也可以直接点击https://ffmpeg.zeranoe.com/builds/来打开页面,打开后的页面如下:
在version列中有两栏:第一栏是每夜版,是正在开发中最新的版本,缺点就是可能包含大量的BUG,不建议用在实际使用中,也不建议下载;第二栏是最新的稳定版,可以看到现在的最新版本是4.0.2,就采用这个版本。在Architecture中有3栏,第3栏MacOS栏不必多说,主要来讨论下Windows 64bit和32bit。64bit的系统可以采用64bit的软件,也可以采用32bit的软件,但是32bit的系统只能采用32bit的软件。在实际开发中,建议无论系统是32bit还是64bit都采用32bit的来进行开发,当然如果包含的其他库中部分库没有32bit的,导致所有的库都采用64bit的话,那么FFmpeg也建议采用64bit的。
在Linking列中有三栏,如果是日常使用,仅仅使用命令行的方式的话,那么可以使用static版本和share版本,static版本中有3个目录:bin、doc、preset,bin目录中包含3个文件:ffmpeg.exe、ffplay.exe、ffprobe.exe,ffmpeg主要用于转码,也是日常用的比较频繁的,ffplay主要用于播放,也很实用,不过目前我使用VLC比较多,这个软件也是很强大,ffprobe就用的比较少了,主要是用来查看元数据,doc文件夹中主要是ffmpeg的文档内容,preset中有一些预配置文件。
share版本与static版本不同的是,share版本是动态编译,static版本是静态编译的。所以,share版本中的bin文件夹,除了3个可执行程序,还有一些DLL文件,不过可执行程序的体积与static相比,小了很多。
对于开发来讲,最重要的是share版本和dev版本,简单介绍dev版本:include、lib、example三个目录,分别是C/C++头文件、链接文件以及例子源代码,都挺重要的。开发完成后,动态编译,所以还需要有share版本中的dll动态编译库。
其实对于开发来讲,最好是把static和源代码全部下载下来。可以用static做一些测试,毕竟static中拥有ffmpeg中所有的标准功能,有时候遇到些问题,可以查看一下是不是不是代码的问题,而是某些格式的特定要求,ffmpeg帮忙转换而自己却不知道,源代码也很重要,源代码目录中的doc下同样有个example文件夹,里面也有大量的例子程序参考,而且有时候当某个函数不太明白,看看源代码或许就有感觉了。
另外需要用一款MediaInfo的软件来查看生成的文件,很强大,使用起来很方便。网址:https://mediaarea.net/en/MediaInfo/Download/Windows。当然了,ffmpeg的官方文档也是非常重要的:http://ffmpeg.org/doxygen/4.0/index.html(最新的4.0的,拿好不谢,可惜是英文的)。另外比较重要的就是雷神的博客,我开始的入门其实都是看的雷神的博客,可惜的是雷神走的早,导致他大量的程序都是基于2点多的版本,当年雷神的文章中,h265还仅仅是一个新的标准,但是现在h265早就被各大厂商玩坏了。雷神的博客:https://blog.csdn.net/leixiaohua1020/,尤其是可以先看看这篇入门的文章:https://blog.csdn.net/leixiaohua1020/article/details/15811977/。虽然,雷神的博客都是基于2点多的版本,但是依然拥有极高的参考价值,曾听说过国内搞音视频的基本上没有没听说过雷神的。其实网上大部分都是2点多的,我猜测一方面是音视频不再像之前那么火爆了,另外一方面2点多也基本上够用了也就懒得去整新版本了。而且,其实网上很多的原程序都是盗用雷神的,最可恶的是没有提到雷神的名字,而且什么都没改,就把关于雷神的作者注释去掉了。。。
我写这篇博客的原因其实也很简单,无非是网络上的代码基于ffmpeg版本的代码太老,与现有版本有很大不同,其二就是要么只介绍一下思路,没有什么实质性的代码,想要源代码就需要付钱,当然了,没有白吃的午餐,这样无可厚非。
我的代码讲解部分会在这个系列的文章中慢慢介绍,最终的源代码将会托管到github或者gitee当中,喜欢我的代码可以给我star,转载我的文章或者使用我的代码请署名。如果有关于音视频相关的项目,可以联系我,当然不是无偿的,不过如果是技术性的问题或者探讨,欢迎大家在文章下评论或留言,我会经常回复的,虽然我也是菜鸟,但是如果我知道的,必然是知无不言。
项目介绍
接下来的FFmpeg项目主要有以下的功能:
- 3个rtsp流输入,1个话筒输入,进行转码后进行rtmp流输出(多线程)
- 可以调节4个输入流的延迟(音视频同步)
- 增加台标或水印,图片的或者是文字的
- 精彩片段的慢速回放(例如:进球后或者得分后,慢速回放10s进球时的视频)
- 台标(水印)的实时变化,例如:显示秒数或者是增加字幕(都是动态的)
- 这个项目最主要的用处肯定是用来直播的,所以还会增加一些直播的服务器配置和网页(PC端、移动端)HTML5直播代码
目前想到的就只有这些,后续有什么补充的,还会增加的。
目录
使用FFMPEG进行音视频编解码(C++) 0.简介
使用FFMPEG进行音视频编解码(C++) 1.FFmpeg的命令行使用及代码开发的环境配置
使用FFMPEG进行音视频编解码(C++) 0.简介相关推荐
- FFMPEG总结 -- 音视频编解码和转码(全)
在经过一周的学习后,现将其稍加总结下:附代码及详细注释. 简单分为如下六个部分 一.播放一个视频文件的流程 二.ffmpeg 视频编码 (YUV编码为H.264) 三.ffmpeg 视频解码 (解码为 ...
- 【FFmpeg】音视频编解码
FFmpeg 常识 常用数据结构: AVCodex 编码器结构体 AVCodexContext编码器上下文 AVFrame解码后的帧 结构体的分配与释放: av_frame_alloc() / av_ ...
- 【ffmpeg for wince】音视频编解码多平台移植(for window/wince)
from: http://www.cnblogs.com/windwithlife/archive/2009/05/31/1492728.html 终于完成了了第二个Client side原型(for ...
- 基于FFmpeg 实现RTSP, 音视频编解码,视频流添加文字,音视频合成MP4
前言: 最近闲这没事,整理了一下之前开发过的音视频编解码库,主要基于ffmpeg,实现音视频的编解码.视频流添加文字,音视频同步到MP4等功能.有需要的小伙伴可以参考参考,如果写的有什么不对的地方,欢 ...
- FFmpeg音视频编解码示例
FFmpeg示例程序集:https://www3.nd.edu/~sjiang1/docio/ffmpeg_doc/globals_eval.html FFmpeg音视频编解码示例:https://w ...
- 基于FFMPEG 的跨平台视频编解码研究
第33卷 第11期 2011年11月 武 汉 理 工 大 学 学 报 JOURNALOF WUHANUNIVERSITYOFTECHNOLOGY Vol.33 No.11 췍췍췍췍췍췍췍췍췍췍췍췍췍췍 ...
- mplayer 所支持的音视频编解码
这里我把mplayer 所支持的音视频编解码都罗列出来,方便大家查阅: ---------------------------------------------------------------- ...
- Android 音视频编解码 MediaCodec
MediaCodec 简介 Android中的MediaCodec是一个用于音视频编解码功能的API,使用它可以实现对音视频数据进行压缩.解压缩.编辑和转换.以下是MediaCodec的主要功能: 支 ...
- 各种音视频编解码学习详解之 编解码学习笔记(四):Mpeg系列——Mpeg 4
最近在研究音视频编解码这一块儿,看到@bitbit大神写的[各种音视频编解码学习详解]这篇文章,非常感谢,佩服的五体投地.奈何大神这边文章太长,在这里我把它分解成很多小的篇幅,方便阅读.大神博客传送门 ...
最新文章
- Attribute在.net编程中的应用
- leetcode--链表的设计--python
- C++程序设计(第二版)谭浩强----程序题课后习题答案第二章
- 完美日记的微服务实践和优化思路
- 网络编程 UDP套接字
- error: Microsoft Visual C++ 14.0 is required问题解决方案
- LiveVideoStack线上分享第三季(十四):FLV封装格式介绍及解析
- 判断是否是完全二叉树_【数据结构】二叉树高频考试题目【代码模板】!
- caioj1522: [NOIP提高组2005]过河
- 朋友圈消失的人,都在偷偷读哪些书?
- MySQL模糊查询的那些谣言
- 两条信号之间加电容_模电总结:第七章、波形的发生和信号的转换,正弦波振荡的电路...
- Eclipse或SVN—如何在Eclipse中安装SVN客户端插件
- ArcGIS设置默认金字塔弹出框
- 人脸数据集——亚洲人脸数据集
- C# 判断字符串中文汉字
- 机器学习的应用——关于正确应用机器学习
- Windows系统安装失败日志分析
- JAVA语言程序设计 第十六章 (16.10、16.11、16.12、16.13、16.14、16.15、16.16)
- python any函数_python中的any函数是什么?如何使用any函数?
热门文章
- Chapter3、色调映射
- php 上传到爱奇艺,php 爬虫爱奇艺 视频、内容
- Win11和Win10家庭版添加组策略gpedit.msc
- Delphi测试题——将字符串10ad200d3 中的数字合计
- python中griddata_python – 来自xyz数据的Matplotlib轮廓:griddata无效索引
- 海洋工作室——网站建设专家:送两个高级可信的IT方面的电子书下载地址给大家【关键是完全免费,无需额外Q币或积分什么的】...
- 「FVWM」 - 控制窗口状态 @20210120
- CreateCompatibleDC 介绍
- 华北科技学院计算机考研资料汇总
- python 论坛爬虫代码_python博客文章爬虫实现代码