流媒体之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-packagesdownload:告诉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页面中实现这个功能实现代码说明:注意事项: 然后进阶࿰…...
实际车辆行驶轨迹与预设路线偏离检测的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 认证使用浏览器进行身份验…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
基于Uniapp开发HarmonyOS 5.0旅游应用技术实践
一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架,支持"一次开发,多端部署",可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务,为旅游应用带来…...
学校招生小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
