FFmpeg是一个完整的、跨平台的解决方案,用于记录、转换和流化音/视频。
FFmpeg 采用 LGPL 或 GPL 许可证,提供了录制、转换及流化音/视频的完整解决方案。其包含了非常先进的音/视频编解码库 libavcodec。
FFmpeg 是在 Linux 平台下开发的 但是它同样也可以在其他操作系统环境中编译运行,包扩Windows、Mac OS 等系统。这个项目最早是由Fabrice Bellard 发起的,在 2004 年至 2015年由Michael Niedermayer 主要负责维护。许多 FFmpeg 的开发人员都来自 MPlayer 项目组,而
且当前FFmpeg也是被放在 MPlayer 项目组的服务器上的。其名称来自MPEG视频编码标准,“FF” 代表 “Fast Forward”。
FFmpeg的组件包括libavcodec、libavutil、libavformat、libavfilter、libavdevice、libswscale和libswresample(这些都是可以应用与应用程序),以及ffmpeg、ffplay和ffprobe(可以被终端用户进行编码和播放)。如下图所示。
FFmpeg锁支持的协议包括:HTTP、RTP、RTSP、RealMedia RTSP/RDT、TCP、UDP、Gopher、RTMP、RTMPE、RTMPTE、RTMPS、SDP、MMS over TCP。
先下载ffmpeg-x.x.x.tar.bz2(这里使用的版本为4.1.8版本)或通过wget命令在LInux系统中直接下载。
ffmpeg下载地址:https://ffmpeg.org/releases/ffmpeg-4.1.8.tar.bz2
[root@localhost download]# tar -jxvf ffmpeg-4.1.8.tar.bz2
执行安装命令:
[root@localhost download]# cd ./ffmpeg-4.1.8/
[root@localhost ffmpeg-4.1.8]# ./configure --prefix=/usr/local/ffmpeg
[root@localhost ffmpeg-4.1.8]# make && make install
如果出现以上问题请看这一步,如果没有问题则可以跳过这一步。
以上报错原因为没有NASM/YASM或其版本太旧导致的问题。
下载yasm的解压文件包,然后上传至服务器并配置选项、编译与安装。
这里使用的是1.3.0版本
YASM下载地址:http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
将文件上传至服务器,和前面几步上传一样都是使用xftp,这里就不贴图了。
安装过程如下:
[root@localhost download]# tar -zxvf yasm-1.3.0.tar.gz
[root@localhost yasm-1.3.0]# cd ./yasm-1.3.0/
[root@localhost yasm-1.3.0]# ./configure --prefix=/usr/local/yasm
[root@localhost yasm-1.3.0]# make && make install
将YASM添加到环境变量中:
[root@localhost yasm-1.3.0]# vim /etc/profile
# 文件输入一下内容
export YASM=/usr/local/yasm/
export PATH=$PATH:$YASM/bin
刷新一下配置文件:
[root@localhost yasm-1.3.0]# source /etc/profile
YASM安装完毕,再次执行ffmpeg安装命令:
[root@localhost ffmpeg-4.1.8]# ./configure --prefix=/usr/local/ffmpeg
[root@localhost ffmpeg-4.1.8]# make && make install
这时应该就安装成功了。
执行命令:
[root@localhost ffmpeg-4.1.8]# vim /etc/profile
添加以下代码:
刷新配置文件:
[root@localhost ffmpeg-4.1.8]# source /etc/profile
检查是否配置成功:
[root@localhost ffmpeg-4.1.8]# ffmpeg -version
安装成功。
FFmpeg可以选择多种音/视频编码器对媒体进行渲染。下面介绍几种常用的视频编码器。
libx264 是当下十分热门的 H264 编码器,有着非常广泛的应用H264 编码器的优势是低码率、具有流畅连续的高清图像、高容错率、强网络适应性和高压缩比。
H.264 的压缩比是 MPEG-2 倍以上,是 MPEG-4的1.5 ~2 倍。举一个例子,如果原始文件的大小为 88GB ,那么用 MPEG-2 压缩标准压缩后变成 3.5GB ,压缩比为 25 : 1;用H.264压缩标准压缩后变为 879MB ,压缩比达到 102 : 1。
在下面的命令中增加了-vcodec和-acodec,这里使用视频编码器libx264,使用音频编码器aac.
[root@localhost ffmpeg-4.1.8]# ffmpeg -i /tmp/ng.mp4 -vcodec libx264 -acodec aad -f flv rtmp://192.168.5.133:1935/mylive/66
重新配置及编译安装FFmpeg,将新的libx264配置到FFmpeg中。
[root@localhost ~]# cd /opt/download/ffmpeg-4.1.8/
[root@localhost ffmpeg-4.1.8]# ./configure --prefix=/usr/local/ffmpeg --enable-libx264 --enable-gpl
报错,因为x264会依赖NASM的汇编加速,因此,这里先安装NASM。如果不安装NASM,则会报错:Minimum version is nasm-2.13。
NASM下载地址:https://www.nasm.us/pub/nasm/releasebuilds/
下载版本不能低于2.13版本,这里使用的是2.14版本,然后通过xftp上传至服务器。
[root@localhost ffmpeg-4.1.8]# cd /opt/download/
[root@localhost download]# tar -zxvf nasm-2.14.tar.gz
[root@localhost download]# cd ./nasm-2.14/
[root@localhost nasm-2.14]# ./configure --prefix=/usr/local/nasm
[root@localhost nasm-2.14]# make && make install
安装成功。
[root@localhost nasm-2.14]# vim /etc/profile
刷新配置文件:
[root@localhost nasm-2.14]# source /etc/profile
下载最新版x264:
地址:https://www.videolan.org/developers/x264.html
下载完成使用xftp上传至服务器,或直接使用wget下载都行。
解压并安装:
[root@localhost download]# tar -jxvf x264-master.tar.bz2
[root@localhost download]# cd ./x264-master/
[root@localhost x264-master]# ./configure --prefix=/usr/local/x264 --enable-shared # 配置动态库
[root@localhost x264-master]# make && make install
[root@localhost x264-master]# cd /opt/download/ffmpeg-4.1.8/
[root@localhost ffmpeg-4.1.8]# ./configure --prefix=/usr/local/ffmpeg --enable-libx264 --enable-gpl
此时依旧报错找不到x264。
通过命令查看ffmpeg日志信息:
[root@localhost ffmpeg-4.1.8]# tailf -n 500 /opt/download/ffmpeg-4.1.8/ffbuild/config.log
报错找不到x264文件目录。因为我们在安装的时候手动选择了安装路径–prefix=/usr/local/x264,因此,x254目录下的lib和include目录中的文件无法被FFmpeg自动发现。
配置ffmpeg pkgconfig默认路径的环境变量:
[root@localhost ffmpeg-4.1.8]# vim /etc/profile
刷新一下配置文件:
[root@localhost ffmpeg-4.1.8]# source /etc/profile
# 修改ld.so.config文件
[root@localhost ffmpeg-4.1.8]# vim /etc/ld.so.conf
# 文件中加入x264 下的lib路径就行
/usr/local/x264/lib
//执行刷新命令
[root@VM-24-16-centos ffmpeg-4.1.8]# sudo ldconfig
执行命令:
[root@localhost ffmpeg-4.1.8]# ./configure --prefix=/usr/local/ffmpeg --enable-libx264 --enable-gpl
[root@localhost ffmpeg-4.1.8]# make && make install
到这里就安装成功了。
无论是rtmp标签,还是server标签,甚至是application标签,都可以算是核心配置信息中的成员。因为他们的存在,影响着整个NRM,必须要配置。
rtmp是根级标签,并且是配置中最关键的标签。
rtmp{
... }
一个rtmp中可以包含多个server标签,每个server标签可以通过端口隔离。
rtmp{
server {
listen 1935;
}
server {
listen 1955;
}
}
listen只能被放在server中,指定了所在server标签绑定的端口信息。
server {
listen 1935;
}
application可以被放在server标签中,可以包含多个application并通过applicationName来隔离。
rtmp{
server {
listen 1935;
application A{
}
application B{
}
}
server {
listen 1955;
application A{
}
application B{
}
}
}
ping和ping_timeout可以被放在rtmp和server中,用于主动检查心跳,将各种心跳包发送到客户端。ping_timeout中设置的值为超时回复时间,如果在超时回复时间内没有得到回复,则关闭客户端。ping默认为1分钟,timeout默认为30秒,当ping为0时,关闭此功能。
ping 15s;
ping_timeout 5s;
ack_window可以被放在rtmp和server中,用于设置rtmp确认窗口大小,默认为5000000字节。
ack_window 5000000;
chunk_size可以被放在rtmp和server中,用于设置流中的块大小,默认时4096字节。这个值越大,CPU开销越低,但是这个值不能小于128字节。
chunk_size 4096;
max_message可以被放在rtmp和server中,用于设置输入数据保温最大尺寸。所有输入数据都会被分割成报文(然后进一步被分割为块)。报文在处理结束之前会被存放在内存中。从理论上讲,如果接受到的报文很大,则可能会影响服务器的稳定性。报文默认值为1MB,此时可以满足大多数情况。
max_message 1M;
buflen可以被放在rtmp和server中,用于设置缓冲区长度。
buflen 5s;
rtmm_auto_push可以设置当多任务时,分发任务到多个进程。
rtmp_auto_push on;
rtmp_auto_push_reconnect用于设置rtmp_auto_push开启并因超时被销毁时,进行重连。
rtmp_auto_push_reconnect 1s;
meta可以被放在rtmp,server和application中,用于将元数据信息发送到客户端,默认为打开。
meta copy;
interleave可以被放在rtmp,server和application中,用于交叉模式,此模式下音/视频在同一个chunk stream上,默认为关闭。
interleave on;
wait_key可以被放在rtmp,server和application中,用于使视频流从一个关键帧开始,默认为关闭。
wait_key on;
wait_video可以被放在rtmp,server和application中,用于禁用音频,知道第一个视频帧发送,默认为关闭。可以与wait_key结合,使客户端接受视频关键帧。然而,着通常会增加链接延迟。可以在编码器中调整关键帧间隔以减少延迟。
wait_video on;
sync可以被放在rtmp,server和application中,用于同步音频流和视频流。如果客户端带宽不足以接受到服务器的数据,那么一些帧会被服务器删除。这导致了音频流和视频流不同步。但时间戳差异超过指定为同步参数的值时,则将发送一个绝对帧,默认为300ms。
sync 10ms;
allow,deny可以被放在rtmp,server和application中,用于设置白名单和黑名单。
# 允许127.0.0.1推流
allow publish 127.0.0.1;
#阻止所有推流,allow publish中的配置除外
deny publish all;
# 允许192.168.0.0/24 拉流
allow play 192.168.0.0/24;
# 阻止所有拉流,allow play的配置除外
deny play all;
play可以被放在rtmp,server和application中,用于播放本地或远程点播文件。
application vod {
play /var/flvs;
}
application vod_http {
play http://myserver.com/vod
}
application vod_mirror {
# 当第一个地址无法播放的时候,会访问第二个地址
play /var/local_mirror http://myserver.com/vod;
}
max_connections可以被放在rtmp,server和application中,用于设置最大连接数。
max_connections 1000;
access_log可以被放在rtmp,server和application中,用于通常来说,rtmp日志是和nginx/logs/access.log文件存放在一起的,通过access_log可以单独存放rtmp_log。
access_log logs/rtmp_access.log;
log_format: 用于自定义日志格式。
ffmpeg的基础与安装就到这里了,欲知后续如何请看下章博客。
文章浏览阅读4k次,点赞3次,收藏67次。文章目录直方图均衡化原理实现出现问题附代码直方图均衡化原理直方图均衡化(Histogram Equalization) 又称直方图平坦化,实质上是对图像进行非线性拉伸,重新分配图像象元值,使一定灰度范围内象元值的数量大致相等。这样,原来直方图中间的峰顶部分对比度得到增强,而两侧的谷底部分对比度降低,输出图像的直方图是一个较平的分段直方图:如果输出数据分段值较小的话,会产生粗略分类的视觉效果。直方图是表示数字图像中每一灰度出现频率的统计关系。直方图能给出图像灰度范围、每个灰度的频度和灰度的分布、整幅图_图像处理——直方图均衡化
文章浏览阅读4.2k次,点赞2次,收藏30次。调用函数: 方法1,GameObject.Find(“脚本所在物体名”).SendMessage(“函数名”); 此种方法可以调用public和private类型函数。 方法2,脚本名.函数名()。 被调用脚本函数为static类型,调用时直接使用 。 方法3,GameObject.Find(“脚本所在物体名”).GetComponent<脚本名>()..._unity c#不同脚本共用变量
文章浏览阅读158次。https://blog.csdn.net/Bill_Xiang_/article/details/78592389_oslo.db连接
文章浏览阅读624次。软件测试与质量保证主流测试技术主流测试技术_《软件质量保证与测试》 软件缺陷定义和特征?软件缺陷产生的原因有哪些?
文章浏览阅读677次。 终于搞定,纪念一下。CCS6很不好用,还是换回CCS5.5吧!转载于:https://www.cnblogs.com/fpga/p/3760389.html_6678 低温下 引导程序pc
文章浏览阅读560次。一、概述实际项目中大概率会遇到很多需要进行数据展示的地方,如折现图,柱状图等,今天给大家介绍一个更加炫酷的中国地图大数据展示,结合echarts免费开源第三方插件,可以实现自己的定制样式,定制提示。二、演示效果三、目录结构项目构成:引用:四、详细步骤1、首先给定一下全局样式、给个地图容器*{margin:0;padding:0}html,body{width:100%;height:100%;}#..._地图option = { series
文章浏览阅读1.1k次,点赞17次,收藏17次。阅读本文前需要对渲染流程有简单了解。_怎么创建shader lab
文章浏览阅读52次。我的新浪微博:http://weibo.com/freshairbrucewoo。欢迎大家相互交流,共同提高技术。 由于前段时间工作很忙而且出差去了北京一个多月,所以很久没有介绍了关于基于ArcGIS10.0和Oracle10g的空间数据管理平台这个项目的相关功能实现了,今天开始介绍一个新的功能实现,就是元数据库的管理。 所谓元数据就是描述数据的数据,元数据库就...
文章浏览阅读2.8k次,点赞14次,收藏38次。本系列文章为浙江大学翁恺C语言程序设计学习笔记,前面的系列文章链接如下:C语言程序设计学习笔记:P1-程序设计与C语言C语言程序设计学习笔记:P2-计算C语言程序设计学习笔记:P3-判断C语言程序设计学习笔记:P4-循环C语言程序设计学习笔记:P5-循环控制C语言程序设计学习笔记:P6-数据类型C语言程序设计学习笔记:P7-函数C语言程序设计学习笔记:P8-数组文章目录一、指针1.1 取地址运算1.2 指针1.3 指针的使用1.4 指针与数组1.4 指针与const小测验二、指针运算2._以下哪个打印指针地址的写法是正确的
文章浏览阅读251次。 这两天搞网络规划和优化系统,需要开发一套地图,并在地图上放置自定义图标,和放置复杂贴图,或画矩形多边形等随着地图移动和放缩。这件事情一开始搞得很痛苦,通过GMAP.NET开发,并使用了CodeProject上面的drawtools工具(有兴趣可以自行搜索,博客园也有相关的文章讨论),但就是没法实现随地图移动而移动,仿佛是浮在地图上的。最后这种方法只能放弃。 看了几个博客上面讨论的..._gmap tooltip 背景透明
文章浏览阅读469次。本文是参数服务器第三篇,介绍ps-lite的Customer模块。
文章浏览阅读2.8k次,点赞4次,收藏17次。各个知识点详解LeNet-5网络LetNet网络的的讲解主要参考1998年计算机科学家Yann LeCun发布的一篇论文《Gradient based learning applied to document-recognition》大家可以找到这篇论文结合学习,针对该网络,首先大家需要了解一下图像中的常用操作卷积,卷积这个词是信号处理领域的词,表示一个系统多数据处理的过程,在图像处理中的卷积,其实就是滤波器。下面先简要介绍一下卷积核的概念,这个不能细说,因为想要深入理解卷积需要很多知识,这里只给大家_卷积神经 特征平面