流媒体之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!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/484885.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【鸿蒙生态崛起】开发者如何把握机遇,应对挑战,打造卓越应用体验?

文章目录 每日一句正能量前言鸿蒙简析鸿蒙生态的认知和了解鸿蒙生态的崛起分析 鸿蒙生态下开发时遇到的挑战开发工具不完善技术难度生态竞争抓住机遇、应对挑战 鸿蒙生态未来的发展趋势1. 全场景智慧生活的推动者2. 技术创新的引领者3. 开放合作的倡导者对鸿蒙生态和开发者的建…

MySQL 主从同步一致性详解

MySQL主从同步是一种数据复制技术,它允许数据从一个数据库服务器(主服务器)自动同步到一个或多个数据库服务器(从服务器)。这种技术主要用于实现读写分离、提升数据库性能、容灾恢复以及数据冗余备份等目的。下面将详细…

第30天:安全开发-JS 应用NodeJS 指南原型链污染Express 框架功能实现审计0

时间轴: 演示案例: 环境搭建-NodeJS-解析安装&库安装 功能实现-NodeJS-数据库&文件&执行 安全问题-NodeJS-注入&RCE&原型链 案例分析-NodeJS-CTF 题目&源码审计 开发指南-NodeJS-安全 SecGuide 项目、 环境搭建-NodeJ…

Linux:network:wireshark:IO图尖峰实例

从下图可以看出来,这个尖峰还是很明显,比平均值大出不少。这个图是之前发生问题时的一个例子,放到这里做为参考。 在看峰值的时候,需要注意,时间间隔单位,一秒的间隔和100毫秒的间隔看到的信息可能不一样,比如上图,按照100毫秒展示差距很大,平均不到200,峰值到了70…

MySQL——数据类型

一、常见的数据类型及分类 其中上述的数值类型包含了整形和浮点型,文本、二进制类型主要是字符串类型。 整数类型(Integer Types): TINYINT:范围为-128到127或0到255(无符号),用于…

在Docker中部署禅道,亲测可用

1、确保centos中已安装docker docker -v 2、启动docker systemctl start docker 3、可设置docker开机启动 systemctl enable docker.service 4、获取最新版禅道开源版镜像 docker pull idoop/zentao 5、运行镜像生成禅道容器【创建 /data/www /data/data 目录】 doc…

【CSS in Depth 2 精译_065】第四部分:CSS 视觉增强技术 + 第 11 章 颜色与对比概述 + 11.1 通过对比进行交流

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 11 章 颜色与对比】 ✔️ 11.1 通过对比进行交流 ✔️ 11.1.1 模式的建立 ✔️11.1.2 还原设计稿 ✔️ 11.2 颜色的定义 文章目录 第四部分 视觉增强技术 Visual e…

中建海龙:科技创新引领建筑业革新,铸就行业影响力

在建筑业这个古老而又充满活力的行业中,中建海龙科技有限公司(以下简称“中建海龙”)凭借其卓越的科技实力和一系列荣誉奖项,正逐步确立其在建筑工业化领域的领导地位,并对整个行业产生了深远影响。 中建海龙自成立以来…

【CDH国产化替代案例】全面简化架构,降低成本,大幅提升数据处理效率

友情链接: 【数据处理效率提升实践】ArgoDB如何助力企业全面实现数据处理效率最大化?【最新案例】ArgoDB新功能之读写分离,助力某医药集团打造高效数据中心,消除传统方案的灵活性限制,确保响应时间的可预测性【指标查…

Electron + Vue 简单实现窗口程序(Windows)从零到一

前言 想做一个桌面应用程序,一直没有找到简单快速可上手的框架。刚好有点前端的底子,就发现了Electron。关于Electron的介绍,请移步 https://www.electronjs.org/ 查阅。 简单来说,引用官网的话,Electron是一个使用 …

Ansible 运维工具

安装 apt install ansible /etc/ansible/hosts , 指定密码或密钥访问分组机器 [k8s_masters] master0.c0.k8s.sb[k8s_nodes] node0.c0.k8s.sb node1.c0.k8s.sb[k8s:children] k8s_masters k8s_nodes[k8s_masters:vars] ansible_ssh_usersbadmin ansible_ssh_pass"***&q…

Leetcode经典题5--轮转数组

题目描述 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 输入输出示例 : 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右…

mac port 安装redis 并设置为系统服务 自定义配置方法

mac系统中,port 包管理工具比brew的速度快N倍,今天就给大家分享一下在macos系统中如何使用 port安装 redis数据库并配置为服务自动启动和自定义redis.conf配置的方法。 1. 安装redis sudo port install redis 2. 启动redis服务 sudo port load redis …

github仓库自动同步到gitee

Github Actions是Github推出的自动化CI/CD的功能,我们将使用Github Actions让Github仓库同步到Gitee 同步的原理是利用 SSH 公私钥配对的方式拉取 Github 仓库的代码并推送到 Gitee 仓库中,所以我们需要以下几个步骤 生成 SSH 公私钥添加公钥添加私钥配…

工业—使用Flink处理Kafka中的数据_ProduceRecord2

使用 Flink 消费 Kafka 中 ProduceRecord 主题的数据,统计在已经检验的产品中,各设备每 5 分钟 生产产品总数,将结果存入HBase 中的 gyflinkresult:Produce5minAgg 表, rowkey“

人工智能学习用的电脑安装cuda、torch、conda等软件,版本的选择以及多版本切换

接触人工智能的学习三个月了,每天与各种安装包作斗争,缺少依赖包、版本高了、版本低了、不兼容了、系统做一半从头再来了。。。这些都是常态。三个月把单位几台电脑折腾了不下几十次安装,是时候总结一下踩过的坑和积累的经验了。 以一个典型的…

MongoDB整合SpringBoot

MongoDB整合SpringBoot 环境准备 1.引入依赖 <!--spring data mongodb--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> 2.配置yml spr…

【Calibre-Web】Calibre-Web服务器安装详细步骤(个人搭建自用的电子书网站,docker-compose安装)

文章目录 一、Calibre-Web和Calibre的区别是什么&#xff1f;使用场景分别是什么&#xff1f;二、服务器安装docker和docker-compose三、服务器安装Calibre-Web步骤1、安装完成后的目录结构2、安装步骤3、初始配置4、启动上传 四、安装Calibre五、docker-compose常用命令六、客…

人工智能驱动的骗局会模仿熟悉的声音

由于人工智能技术的进步&#xff0c;各种现代骗局变得越来越复杂。 这些骗局现在包括人工智能驱动的网络钓鱼技术&#xff0c;即使用人工智能模仿家人或朋友的声音和视频。 诈骗者使用来自社交媒体的内容来制作深度伪造内容&#xff0c;要求提供金钱或个人信息。个人应该通过…

【QT】一个简单的串口通信小工具(QSerialPort实现)

目录 0.简介 1.展示结果 1&#xff09;UI界面&#xff1a; 2&#xff09;SSCOM&#xff08;模拟下位机收发&#xff09;&#xff1a; 3&#xff09;VSPD虚拟串口驱动&#xff08;连接上位机和下位机的串口&#xff09;&#xff1a; 4&#xff09;实际收发消息效果及视频演…