流媒体之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
- 功能:FFmpeg 是一个开源的多媒体框架,可以用于处理音频、视频和其他多媒体数据。它支持大量的音视频编解码器以及格式转换。
- 用途:FFmpeg 可以用于录制、转换、编辑和流式传输音视频数据。它可以处理从简单的转码到复杂的视频处理任务。
- 特点:FFmpeg 提供了强大的命令行工具,可以通过命令行接口执行各种音视频处理任务。它支持多种输入和输出格式,并且可以在不同平台上运行。
1.2 SRS(Simple-RTMP-Server)
- 功能:SRS 是一个开源的流媒体服务器软件,专门用于实时音视频的传输和流式处理。它支持 RTMP、HLS 和 HTTP-FLV 等流媒体传输协议。
- 用途:SRS 主要用于搭建流媒体服务器,用于实时音视频直播、点播等场景。它提供了优化的流媒体传输性能和功能。
- 特点: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包,在安装就行了
-
下载软件包:使用
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
如果发现没有视频输出,只有音频,就要检查海康摄像头的视频输出配置对不对了
总结:
难点在于离线的安装过程,要是有网的话,so easy!