流媒体之linux下离线部署FFmpeg 和 SRS

前言

用户对网络做了限制,只能访问指定的网址,和没网没啥区别,导致无法连接外网,无法获取安装包,还有一些编译需要的开源工具

用户需要用平台查看库房的海康摄像头实时监控,只能在库房里一台纯净的ubantu电脑上离线部署一套流媒体服务给平台,通过FFmpeg将海康rtsp流,转为rtmp流,推流给srs服务,srs在转发这个流为三种格式,供平台查看

rtmp://127.0.0.1/live/livestream

http://127.0.0.1:8080/live/livestream.m3u8

http://127.0.0.1:8080/live/livestream.flv

如果有网,直接用命令就行了:

sudo apt-get update

sudo apt-get install -y build-essential git zlib1g-dev libssl-dev

git clone https://github.com/ossrs/srs.git

。。。。。。

可惜没网,很恶心,没弄过,一头雾水,怎么装是个问题,下载好安装包了,编译又编译不了,少了一堆编译需要的包

尝试了很多方法,最终都因没有网而放弃

后面终于尝试了,用虚拟机里安装一个和现场库房电脑相同版本的ubuntu20.04,试下每一步缺少少了什么包,根据提示缺少的包,下载下来,然后在用sudo dpkg -i *.deb安装,在进行下一步,直到完成,最终部署完成了,

花了一周的时间,从了解什么是流媒体,然离线部署到电脑,最终调通,时间赶,查资料后一步步完了

下面讲解下怎么完成的,记录下来,供需要的人看吧

1. 什么是FFmpeg 和 SRS,区别是什么?

FFmpeg 和 SRS(Simple-RTMP-Server)都是流媒体处理和传输中常用的工具,但它们之间有一些重要的区别:

1.1 FFmpeg

  1. 功能:FFmpeg 是一个开源的多媒体框架,可以用于处理音频、视频和其他多媒体数据。它支持大量的音视频编解码器以及格式转换。
  2. 用途:FFmpeg 可以用于录制、转换、编辑和流式传输音视频数据。它可以处理从简单的转码到复杂的视频处理任务。
  3. 特点:FFmpeg 提供了强大的命令行工具,可以通过命令行接口执行各种音视频处理任务。它支持多种输入和输出格式,并且可以在不同平台上运行。

1.2 SRS(Simple-RTMP-Server)

  1. 功能:SRS 是一个开源的流媒体服务器软件,专门用于实时音视频的传输和流式处理。它支持 RTMP、HLS 和 HTTP-FLV 等流媒体传输协议。
  2. 用途:SRS 主要用于搭建流媒体服务器,用于实时音视频直播、点播等场景。它提供了优化的流媒体传输性能和功能。
  3. 特点:SRS 支持多种流媒体协议,提供了配置简单、易于部署的特点。它适用于搭建小到中等规模的流媒体服务。

区别总结:

  • FFmpeg 是一个多媒体处理框架,用于处理音视频数据的编解码、转换和处理。
  • SRS 是一个流媒体服务器软件,用于搭建实时音视频传输服务。
  • FFmpeg 更多用于处理音视频文件,而 SRS 更多用于流式传输和直播服务。
  • FFmpeg 是一个工具集,SRS 是一个专门用于流媒体传输的服务器软件。

综上所述,FFmpeg 和 SRS 在功能和用途上有所不同,可以根据具体需求选择使用其中的一个或两者配合使用。

2. 部署前准备工作

因为没有网,只能下载离线包,在解压编译安装,而纯净的ubuntu电脑上是没有编译环境的,需要安装才行

接下来讲解怎么安装必备的基础编译环境包:

先下载ffmpeg的压缩包,下载地址:https://ffmpeg.org/download.html

下载完后,拿到有网纯净的ubuntu20.04 电脑上,解压后进入ffmpeg目录下,执行 ./configure

  • ./configure 会检测你的系统环境,包括操作系统类型、可用的编译器、库和工具等。这确保了软件能够在不同的系统上正确编译和运行

我执行了之后,就提示了缺少gcc编译器,那我获取下载一个gcc的deb包,在安装就行了

  1. 下载软件包 :使用 apt-get 命令结合 -d 参数下载软件包。例如,如果你想下载 nginx 软件包到指定位置,可以执行以下命令:

    apt-get download -d nginx -o=Dir::Cache=/home/your_username/apt-packages

    • download:告诉 apt-get 下载软件包。
    • -d:指示 apt-get 仅下载软件包而不安装。
    • -o=Dir::Cache=/home/your_username/apt-packages:指定下载到的目录。请将 your_username 替换为你的实际用户名。

我在指定目录下创建一个gcc文件夹,存放下载的gcc的deb包

apt-get download -d gcc -o=Dir::Cache=/home/test/Desktop/my/offlinePack-deb/gcc

然后安装gcc,提示gcc-9 没有安装,我们重复上面的步骤下载即可

下载完了,继续执行,有提示少了某些库

重复以上步骤即可,把所有底层需要的库都下载下来,直到能安装GCC

最后下载了完这些就可以了

执行dpkg,安装即可

安装完,gcc之后,继续执行./configure,又提示少东西

重复上述步骤即可。。。。。

这是我下载完需要的东西

我写了一个脚本,用于一键安装,到时打包到离线的电脑上即可安装

3. FFmpeg部署

编译环境准备完成后,在执行configure就不会报少东西了

然后在执行make编译ffmpeg,5-10分钟,需要一段时间,等待即可

然后安装即可

4. srs部署

解压srs, 进入srs的trunk目录,执行,./configure

在执行make编译

编译完成后,我不执行make install了,不安装在电脑默认路径上,我直接用现在的路径即可

这样就算部署完成了。

5.运行SRS

可以在srs/trunk/conf目录下可以看到很多配置文件,关于音频视频的,我也不怎么懂,反正很丰富,想了解的可以去查怎么用,我用默认的方式就行了

进入srs才trunk目录,然后用默认的方式运行srs服务

./objs/srs -c conf/srs.conf

在用命令:tail -n 30 -f ./objs/srs.log 查看运行日志

6.运行FFmpeg

因为我已经make install 安装在系统默认位置了,所以无论在什么位置都可以执行命令运行ffmpeg

我执行命令运行

ffmpeg -rtsp_transport tcp -i rtsp://admin:admin123@192.168.1.65:554/Streaming/Channels/101 -c copy -f flv rtmp://127.0.0.1/live/livestream

这个命令是使用 ffmpeg 工具来从一个 RTSP(Real-Time Streaming Protocol)流(摄像头、网络摄像机等)中捕获视频,并将其转发到一个 RTMP(Real-Time Messaging Protocol)服务器上进行实时流传输。下面是对命令中各部分的解释:

  • ffmpeg: 这是一个流行的多媒体处理工具,可以用来处理音频、视频等多媒体数据。

  • -rtsp_transport tcp: 这个选项指定了使用 TCP 作为 RTSP 传输协议。RTSP 通常可以使用 TCP 或 UDP 进行传输。

  • -i rtsp://admin:admin123@192.168.1.65:554/Streaming/Channels/101: 这里是输入参数,指定了要捕获的 海康摄像头RTSP 流的 URL。在这个例子中,用户名为 admin,密码为 admin123,IP 地址为 192.168.1.65,端口为 554,并且流路径为 /Streaming/Channels/101

  • -c copy: 这个选项指定了视频编解码器和音频编解码器的选择。在这里,copy 表示不对音视频流进行重新编码,只是复制输入的音视频流。

  • -f flv: 这个选项指定了输出格式为 FLV(Flash Video)。

  • rtmp://127.0.0.1/live/livestream: 这是输出的 RTMP 服务器地址和流名称。在这里,rtmp://127.0.0.1/live 是 RTMP 服务器地址,livestream 是流名称。

因此,整个命令的作用是将从指定的 RTSP URL 获取的视频流通过 TCP 传输到本地,并将其转发到指定的 RTMP 服务器上的 livestream 流中

运行后可以看到输入的流信息,输出的流信息

7. 视频展示

推流给RSR服务后,SRS会将流转发为三个流格式,访问哪个都行

rtmp://127.0.0.1/live/livestream

http://127.0.0.1:8080/live/livestream.m3u8

http://127.0.0.1:8080/live/livestream.flv

然后用终端用命令:ffplay 播放视频验证即可,ffplay是安装ffmpeg里自带的

ffplay rtmp://127.0.0.1/live/livestream

ffplay http://127.0.0.1:8080/live/livestream.m3u8

ffplay http://127.0.0.1:8080/live/livestream.flv

或者用srs服务器里的播放器播放,地址栏搜索127.0.0.1:8080即可查看srs服务信息

如果发现没有视频输出,只有音频,就要检查海康摄像头的视频输出配置对不对了

总结:

难点在于离线的安装过程,要是有网的话,so easy!

相关推荐
微步_ym1 天前
RabbitMQ:在Linux上安装RabbitMQ
linux·rabbitmq·erlang
CC.GG1 天前
【Linux】倒计时和进度条实现
linux
Code Warrior1 天前
【Linux】库的制作与原理(1)
linux
生涯にわたる学び1 天前
关于之前知识的一些补充 02
linux·arm开发
汐汐咯1 天前
linux上安装minconda
linux·运维·服务器
小波小波轩然大波1 天前
Linux服务器配置(mariadb服务器)
linux·服务器·mariadb
忧郁的橙子.1 天前
k8s 主节点重启后 从节点 get 异常
linux·运维·服务器
Raymond运维1 天前
Apache介绍和安装
linux·运维·apache
半梦半醒*1 天前
nginx的访问控制、用户认证、https
linux·运维·服务器·nginx·https·centos
Skrrapper1 天前
ubuntu?centos?还是 redhat?Linux 系统选哪个?
linux·ubuntu·centos