三、FFmpeg安装_服务器安装ffmpeg-程序员宅基地

技术标签: nginx  音视频  ffmpeg  直播服务器  

1. FFmpeg介绍

FFmpeg是一个完整的、跨平台的解决方案,用于记录、转换和流化音/视频。
FFmpeg 采用 LGPL 或 GPL 许可证,提供了录制、转换及流化音/视频的完整解决方案。其包含了非常先进的音/视频编解码库 libavcodec。
FFmpeg 是在 Linux 平台下开发的 但是它同样也可以在其他操作系统环境中编译运行,包扩Windows、Mac OS 等系统。这个项目最早是由Fabrice Bellard 发起的,在 2004 年至 2015年由Michael Niedermayer 主要负责维护。许多 FFmpeg 的开发人员都来自 MPlayer 项目组,而
且当前FFmpeg也是被放在 MPlayer 项目组的服务器上的。其名称来自MPEG视频编码标准,“FF” 代表 “Fast Forward”。

2. FFmpeg组件

FFmpeg的组件包括libavcodec、libavutil、libavformat、libavfilter、libavdevice、libswscale和libswresample(这些都是可以应用与应用程序),以及ffmpeg、ffplay和ffprobe(可以被终端用户进行编码和播放)。如下图所示。
在这里插入图片描述

  • libavutil是一个包含简化编程功能的库,包括随机数生成器、数学例程、核心多媒体使用程序等。
  • libavcodec是一个包含解码和编码器的音/视频编解码器的库。
  • libavformat是一个包含用于多媒体容器格式的demuxers和muxers的库。
  • libavdevice是一个包含输入和输出设备的库,用于抓取和呈现许多常见的多媒体输入/输出软件框架,包括Video4Linux、Video4Linux2、VFW和ALSA。
  • libavfilter是一个包含媒体过滤器的库。
  • libswscale是一个执行高度优化的音频重采样、rematrixing个实例格式转换操作的库。
  • libpostproc是一个用于后期效果处理的库。

3. 所支持的协议

FFmpeg锁支持的协议包括:HTTP、RTP、RTSP、RealMedia RTSP/RDT、TCP、UDP、Gopher、RTMP、RTMPE、RTMPTE、RTMPS、SDP、MMS over TCP。

4. 安装

1. 下载

先下载ffmpeg-x.x.x.tar.bz2(这里使用的版本为4.1.8版本)或通过wget命令在LInux系统中直接下载。
ffmpeg下载地址:https://ffmpeg.org/releases/ffmpeg-4.1.8.tar.bz2

2. 通过xftp将文件上传至服务器

在这里插入图片描述

3. 解压

[root@localhost download]# tar -jxvf ffmpeg-4.1.8.tar.bz2 

4. 配置与安装

执行安装命令:

[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

在这里插入图片描述
如果出现以上问题请看这一步,如果没有问题则可以跳过这一步。

4.1 问题原因

以上报错原因为没有NASM/YASM或其版本太旧导致的问题。

  • YASM是一个完全重写的NASM汇编。目前,它支持x86和AMD64命令集。
  • NASM是一款基于80x86和x86-64平台的汇编语言编译程序,其设计初衷是为了实现编译器程序跨平台和模块化的特性。
4.2 安装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

这时应该就安装成功了。

5. 添加FFmpeg到环境变量

执行命令:

[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

在这里插入图片描述
安装成功。

5. FFmpeg的配置

FFmpeg可以选择多种音/视频编码器对媒体进行渲染。下面介绍几种常用的视频编码器。

1. libx264

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

2. libx264安装

重新配置及编译安装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。

2.1 安装NASM

NASM下载地址:https://www.nasm.us/pub/nasm/releasebuilds/
下载版本不能低于2.13版本,这里使用的是2.14版本,然后通过xftp上传至服务器。

2.2 解压与安装
[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

安装成功。

2.3 配置环境变量
[root@localhost nasm-2.14]# vim /etc/profile

在这里插入图片描述
刷新配置文件:

[root@localhost nasm-2.14]# source /etc/profile
2.4 安装x264

下载最新版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

到这里就安装成功了。

6. 基础配置信息

无论是rtmp标签,还是server标签,甚至是application标签,都可以算是核心配置信息中的成员。因为他们的存在,影响着整个NRM,必须要配置。

1. rtmp

rtmp是根级标签,并且是配置中最关键的标签。

rtmp{
     ... }

2. server

一个rtmp中可以包含多个server标签,每个server标签可以通过端口隔离。

rtmp{
     
    server {
    
        listen 1935;
    }   
    server {
    
        listen 1955;
    }
}

3. listen

listen只能被放在server中,指定了所在server标签绑定的端口信息。

    server {
    
        listen 1935;
    }  

4. application

application可以被放在server标签中,可以包含多个application并通过applicationName来隔离。

rtmp{
     
    server {
    
        listen 1935;
        application A{
    }
        application B{
    }
    }   
    server {
    
        listen 1955;
        application A{
    }
        application B{
    }
    }
}

5. ping和ping_timeout

ping和ping_timeout可以被放在rtmp和server中,用于主动检查心跳,将各种心跳包发送到客户端。ping_timeout中设置的值为超时回复时间,如果在超时回复时间内没有得到回复,则关闭客户端。ping默认为1分钟,timeout默认为30秒,当ping为0时,关闭此功能。

    ping 15s;
    ping_timeout 5s;

6. ack_window

ack_window可以被放在rtmp和server中,用于设置rtmp确认窗口大小,默认为5000000字节。

    ack_window 5000000;

7. chunk_size

chunk_size可以被放在rtmp和server中,用于设置流中的块大小,默认时4096字节。这个值越大,CPU开销越低,但是这个值不能小于128字节。

    chunk_size 4096;

8. max_message

max_message可以被放在rtmp和server中,用于设置输入数据保温最大尺寸。所有输入数据都会被分割成报文(然后进一步被分割为块)。报文在处理结束之前会被存放在内存中。从理论上讲,如果接受到的报文很大,则可能会影响服务器的稳定性。报文默认值为1MB,此时可以满足大多数情况。

    max_message 1M;

9. buflen

buflen可以被放在rtmp和server中,用于设置缓冲区长度。

    buflen  5s;

10. rtmp_auto_push

rtmm_auto_push可以设置当多任务时,分发任务到多个进程。

    rtmp_auto_push on;

11. rtmp_auto_push_reconnect

rtmp_auto_push_reconnect用于设置rtmp_auto_push开启并因超时被销毁时,进行重连。

    rtmp_auto_push_reconnect 1s;

12. meta

meta可以被放在rtmp,server和application中,用于将元数据信息发送到客户端,默认为打开。

     meta copy;

13. interleave

interleave可以被放在rtmp,server和application中,用于交叉模式,此模式下音/视频在同一个chunk stream上,默认为关闭。

    interleave on;

14. wait_key

wait_key可以被放在rtmp,server和application中,用于使视频流从一个关键帧开始,默认为关闭。

    wait_key on;

15. wait_video

wait_video可以被放在rtmp,server和application中,用于禁用音频,知道第一个视频帧发送,默认为关闭。可以与wait_key结合,使客户端接受视频关键帧。然而,着通常会增加链接延迟。可以在编码器中调整关键帧间隔以减少延迟。

    wait_video on;

16. sync

sync可以被放在rtmp,server和application中,用于同步音频流和视频流。如果客户端带宽不足以接受到服务器的数据,那么一些帧会被服务器删除。这导致了音频流和视频流不同步。但时间戳差异超过指定为同步参数的值时,则将发送一个绝对帧,默认为300ms。

    sync 10ms;

17. allow,deny

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;

18. play

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;
    }

19. max_connections

max_connections可以被放在rtmp,server和application中,用于设置最大连接数。

	max_connections 1000;

20. access_log

access_log可以被放在rtmp,server和application中,用于通常来说,rtmp日志是和nginx/logs/access.log文件存放在一起的,通过access_log可以单独存放rtmp_log。

    access_log logs/rtmp_access.log;

21. log_format

log_format: 用于自定义日志格式。

  • connection:连接数
  • remote_addr:客户端地址
  • app_application:名称
  • name:最后一个串流码名称
  • args:最后一个播放的流/推流参数
  • flashver:flash版本
  • swfurl:swf地址
  • tcurl:tc地址
  • pageurl:客户端页面地址
  • command:推/拉流中命令:none,play,publish,play+publish
  • bytes_sent:发送到客户端的字节数
  • bytes_received:接受到客户端的字节数
  • time_local:连接关闭时间
  • session_time:连接持续时间
  • session_readable_time:格式化日期
  • msec:UNIX时间戳

ffmpeg的基础与安装就到这里了,欲知后续如何请看下章博客。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Aarstg/article/details/122668586

智能推荐

软件测试流程包括哪些内容?测试方法有哪些?_测试过程管理中包含哪些过程-程序员宅基地

文章浏览阅读2.9k次,点赞8次,收藏14次。测试主要做什么?这完全都体现在测试流程中,同时测试流程是面试问题中出现频率最高的,这不仅是因为测试流程很重要,而是在面试过程中这短短的半小时到一个小时的时间,通过测试流程就可以判断出应聘者是否合适,故在测试流程中包含了测试工作的核心内容,例如需求分析,测试用例的设计,测试执行,缺陷等重要的过程。..._测试过程管理中包含哪些过程

政府数字化政务的人工智能与机器学习应用:如何提高政府工作效率-程序员宅基地

文章浏览阅读870次,点赞16次,收藏19次。1.背景介绍政府数字化政务是指政府利用数字技术、互联网、大数据、人工智能等新技术手段,对政府政务进行数字化改革,提高政府工作效率,提升政府服务质量的过程。随着人工智能(AI)和机器学习(ML)技术的快速发展,政府数字化政务中的人工智能与机器学习应用也逐渐成为政府改革的重要内容。政府数字化政务的人工智能与机器学习应用涉及多个领域,包括政策决策、政府服务、公共安全、社会治理等。在这些领域,人工...

ssm+mysql+微信小程序考研刷题平台_mysql刷题软件-程序员宅基地

文章浏览阅读219次,点赞2次,收藏4次。系统主要的用户为用户、管理员,他们的具体权限如下:用户:用户登录后可以对管理员上传的学习视频进行学习。用户可以选择题型进行练习。用户选择小程序提供的考研科目进行相关训练。用户可以进行水平测试,并且查看相关成绩用户可以进行错题集的整理管理员:管理员登录后可管理个人基本信息管理员登录后可管理个人基本信息管理员可以上传、发布考研的相关例题及其分析,并对题型进行管理管理员可以进行查看、搜索考研题目及错题情况。_mysql刷题软件

根据java代码描绘uml类图_Myeclipse8.5下JAVA代码导成UML类图-程序员宅基地

文章浏览阅读1.4k次。myelipse里有UML1和UML2两种方式,UML2功能更强大,但是两者生成过程差别不大1.建立Test工程,如下图,uml包存放uml类图package com.zz.domain;public class User {private int id;private String name;public int getId() {return id;}public void setId(int..._根据以下java代码画出类图

Flume自定义拦截器-程序员宅基地

文章浏览阅读174次。需求:一个topic包含很多个表信息,需要自动根据json字符串中的字段来写入到hive不同的表对应的路径中。发送到Kafka中的数据原本最外层原本没有pkDay和project,只有data和name。因为担心data里面会空值,所以根同事商量,让他们在最外层添加了project和pkDay字段。pkDay字段用于表的自动分区,proejct和name合起来用于自动拼接hive表的名称为 ..._flume拦截器自定义开发 kafka

java同时输入不同类型数据,Java Spring中同时访问多种不同数据库-程序员宅基地

文章浏览阅读380次。原标题:Java Spring中同时访问多种不同数据库 多样的工作要求,可以使用不同的工作方法,只要能获得结果,就不会徒劳。开发企业应用时我们常常遇到要同时访问多种不同数据库的问题,有时是必须把数据归档到某种数据仓库中,有时是要把数据变更推送到第三方数据库中。使用Spring框架时,使用单一数据库是非常容易的,但如果要同时访问多个数据库的话事件就变得复杂多了。本文以在Spring框架下开发一个Sp..._根据输入的不同连接不同的数据库

随便推点

EFT试验复位案例分析_eft电路图-程序员宅基地

文章浏览阅读3.6k次,点赞9次,收藏25次。本案例描述了晶振屏蔽以及开关电源变压器屏蔽对系统稳定工作的影响, 硬件设计时应考虑。_eft电路图

MR21更改价格_mr21 对于物料 zba89121 存在一个当前或未来标准价格-程序员宅基地

文章浏览阅读1.1k次。对于物料价格的更改,可以采取不同的手段:首先,我们来介绍MR21的方式。 需要说明的是,如果要对某一产品进行价格修改,必须满足的前提条件是: ■ 1、必须对价格生效的物料期间与对应会计期间进行开启; ■ 2、该产品在该物料期间未发生物料移动。执行MR21,例如更改物料1180051689的价格为20000元,系统提示“对于物料1180051689 存在一个当前或未来标准价格”,这是因为已经对该..._mr21 对于物料 zba89121 存在一个当前或未来标准价格

联想启天m420刷bios_联想启天M420台式机怎么装win7系统(完美解决usb)-程序员宅基地

文章浏览阅读7.4k次,点赞3次,收藏13次。[文章导读]联想启天M420是一款商用台式电脑,预装的是win10系统,用户还是喜欢win7系统,该台式机采用的intel 8代i5 8500CPU,在安装安装win7时有很多问题,在安装win7时要在BIOS中“关闭安全启动”和“开启兼容模式”,并且安装过程中usb不能使用,要采用联想win7新机型安装,且默认采用的uefi+gpt模式,要改成legacy+mbr引导,那么联想启天M420台式电..._启天m420刷bios

冗余数据一致性,到底如何保证?-程序员宅基地

文章浏览阅读2.7k次,点赞2次,收藏9次。一,为什么要冗余数据互联网数据量很大的业务场景,往往数据库需要进行水平切分来降低单库数据量。水平切分会有一个patition key,通过patition key的查询能..._保证冗余性

java 打包插件-程序员宅基地

文章浏览阅读88次。是时候闭环Java应用了 原创 2016-08-16 张开涛 你曾经因为部署/上线而痛苦吗?你曾经因为要去运维那改配置而烦恼吗?在我接触过的一些部署/上线方式中,曾碰到过以下一些问题:1、程序代码和依赖都是人工上传到服务器,不是通过工具进行部署和发布;2、目录结构没有规范,jar启动时通过-classpath任意指定;3、fat jar,把程序代码、配置文件和依赖jar都打包到一个jar中,改配置..._那么需要把上面的defaultjavatyperesolver类打包到插件中

VS2015,Microsoft Visual Studio 2005,SourceInsight4.0使用经验,Visual AssistX番茄助手的安装与基本使用9_番茄助手颜色-程序员宅基地

文章浏览阅读909次。1.得下载一个番茄插件,按alt+g才可以有函数跳转功能。2.不安装番茄插件,按F12也可以有跳转功能。3.进公司的VS工程是D:\sync\build\win路径,.sln才是打开工程的方式,一个是VS2005打开的,一个是VS2013打开的。4.公司库里的线程接口,在CmThreadManager.h 里,这个里面是我们的线程库,可以直接拿来用。CreateUserTaskThre..._番茄助手颜色

推荐文章

热门文章

相关标签