当前位置: 首页 > news >正文

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

相关文章:

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

前言 用户对网络做了限制,只能访问指定的网址,和没网没啥区别,导致无法连接外网,无法获取安装包,还有一些编译需要的开源工具 用户需要用平台查看库房的海康摄像头实时监控,只能在库房里一台纯净的ubantu…...

NOBLEROYCE罗慕路斯门窗 以精工匠造开启私属人生

公元前753年罗马建立,其创建者为罗慕路斯。以狼孩的传奇形象成为古罗马精神象征的罗慕路斯,不仅是罗马的第一任国王,还创建了罗马最初的政治制度,罗马的名字也是源于这位伟大的奠基人。NOBLEROYCE罗慕路斯,致敬这位人类…...

【算法day8】字符串:反转

主播今天脑子不好用,先写两题吧~ 题目引用 反转字符串中的单词右旋字符串 1.反转字符串 给你一个字符串 s ,请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且…...

【C++进阶】第二节:多态

1、多态的概念 1.1 概念 多态的概念:通俗来说,就是多种形态。具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状态。 2、多态的定义及实现 2.1 多态的构成条件 多态是在不同继承关系的类对象,去调用同一函数&a…...

梯度下降法以及 Python 实现

文章目录 1. 引言2. 梯度法3. 例子4. 代码实现5. 讨论 — 学习率 η \eta η5.1 当 η \eta η 设置过大5.2 当 η \eta η 设置过小 参考 1. 引言 梯度下降法,可以根据微分求出的斜率计算函数的最小值。 在人工智能中,经常被应用于学习算法。 2. 梯…...

Postman cURL命令导入导出

你是否曾为在Postman和终端之间切换、整理请求而抓狂?其实,Postman支持与cURL命令的无缝互通,通过导入导出,极大提升效率。用好这个功能,分分钟让接口测试更高效! Postman如何快速导入cURL命令?…...

Java 在Json对象字符串中查找和提取特定的数据

1、在处理JSON数据时,需要提出个别字段的值,通过正则表达式提取特定的数据 public static void main(String[] args) {//定义多个JSON对象字符串类型,假设每个对象有a,b,c 字段String strJson "{\"a\":1.23,\"b\"…...

synchronized的特性

1.互斥 对于synchronized修饰的方法及代码块不同线程想同时进行访问就会互斥。 就比如synchronized修饰代码块时,一个线程进入该代码块就会进行“加锁”。 退出代码块时会进行“解锁”。 当其他线程想要访问被加锁的代码块时,就会阻塞等待。 阻塞等待…...

领域泛化与领域自适应

领域泛化(Domain Generalization)和领域适应(Domain Adaptation)是机器学习领域中处理不同数据分布场景下模型训练与应用的两种策略,领域泛化在泛化到目标领域时不需要进行调整,而领域自适应在适应到目标领…...

使用aspx,完成一个转发http的post请求功能的api接口,url中增加目标地址参数,传递自定义header参数

使用aspx,完成一个转发http的post请求功能的api接口,url中增加目标地址参数,传递自定义header参数 首先,简单实现一下,如何在ASPX页面中实现这个功能实现代码说明:注意事项: 然后进阶&#xff0…...

实际车辆行驶轨迹与预设路线偏离检测的Java实现

准备工作 本项目依赖于两个关键库:JTS Topology Suite(简称JTS),用于几何对象创建和空间分析;以及GeoTools,用于处理坐标转换和其他地理信息任务。确保开发环境中已经包含了这两个库,并且正确配…...

从excel数据导入到sqlsever遇到的问题

1、格式问题时间格式,excel中将日期列改为日期未生效,改完后,必须手动单击这个单元格才能生效,那不可能一个一个去双击。解决方案如下 2、导入之后表字段格式问题,数据类型的用navicat导入之后默认是nvarchar类型的&a…...

Linux操作系统——Linux的磁盘管理系统、文件inode及软硬链接

目录 前言 一、磁盘 1、物理结构 2、存储结构 3、磁盘的逻辑结构 二、文件系统 1、基本概念 2、组的概念 1)Data Blaocks 2)inode Table 3)inode Bitmap 4)Blocks Bitmap 5)Group Descriptor Table 6)Sup…...

算法刷题Day11: BM33 二叉树的镜像

点击题目链接 思路 转换为子问题:左右子树相反转。遍历手法:后序遍历 代码 class Solution:def Transverse(self,root: TreeNode):if root None:return rootnewleft self.Transverse(root.left)newright self.Transverse(root.right)# 对root节点…...

WPF+MVVM案例实战与特效(三十五)- 掌握 Windows 屏幕键盘控制的艺术(TouchKeyBoardHelper 类)

文章目录 1、概述2、TouchKeyBoardHelper 类1、代码实现2、代码解释3、实际应用1、帮助类库与文件创建2、项目引用运行效果3、答疑解惑1、概述 在WPF应用程序开发中,有时需要提供启动或关闭屏幕键盘(On-Screen Keyboard, OSK)的功能。为了实现这一需求,我们创建了一个名为…...

Python+OpenCV系列:绘制中文的方法

绘制中文的方法 方法一:使用Pillow(PIL)与OpenCV结合方法二:使用Matplotlib与OpenCV结合方法三:结合第三方库OpenCV-ZH注意事项 在Python中,使用OpenCV绘制中文需要处理字体加载问题,因为OpenCV…...

精品推荐 | StarLighter 1×dsDNA HS Assay Kit

关键词:核酸浓度测定,核酸定量检测试剂盒,dsDNA浓度测定,dsDNA定量检测 产品简介 StarLighter 1dsDNA HS Assay Kit是一种快速简便的双链DNA(dsDNA)荧光定量检测试剂盒,具有极高的检测灵敏度&…...

挑战用React封装100个组件【010】

Hello,大家好,今天我挑战的组件是这样的! 今天这个组件是一个打卡成功,或者获得徽章后的组件。点击按钮后,会弹出礼花。项目中的勋章是我通过AI生成的,还是很厉害的哈!稍微抠图直接使用。最后面…...

burp suite 5

声明! 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无关&a…...

锐捷Web认证

文章目录 Web认证二代 Web 认证配置 🏡作者主页:点击! 🤖Datacom专栏:点击! ⏰️创作时间:2024年12月6日11点40分 Web认证 Portal 认证、Web认证 Web认证的介绍 Web 认证使用浏览器进行身份验…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子&#xff08…...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器(ADC),支持8kHz~96kHz采样率,集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器,适用于高保真音频采集场景。 2. 核心特性 高精度:24位分辨率&#xff0c…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

Axure 下拉框联动

实现选省、选完省之后选对应省份下的市区...

【Linux】Linux安装并配置RabbitMQ

目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的&#xff0c;需要先安…...