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

Golang流媒体实战之二:回源

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos

本篇概览

  • 今天的实战是流传输过程中的常见功能:回源
  • 如下图,lal(源站)和lal(拉流节点)代表两台电脑,上面都部署了lal
  • VLC在播放时去拉流节点拉流,但实际上FFmpeg将流推到了源站,这就要求拉流节点能和源站建立联系,从源站获取到媒体流返回给VLC
    在这里插入图片描述
  • 至于为什么VLC不直接去源站拉流呢?原因是多方面的:
  1. 网络不通,可能VLC在公网,而源站只能在某个内网
  2. 带宽成本问题,可能源站出口带宽成本比拉流节点出口带宽成本高
  3. 距离问题,有可能FFmpeg和源站都在北方,VLC在南方,走公网去北方拉流距离大所以延时大,如果拉流节点在南方,那么VLC去拉流节点距离就会变短(拉流节点和源站是内网通信)
  • 将FFmpeg改为主播,VLC改为观众,是不是有直播内味了…
  • 捋清楚了上述逻辑,接下来可以动手操作了,从上图可见,今天要部署两个lal,我这边把拉流节点部署在本机MacBook上,源站部署在阿里云上(阿里云专家的福利,一年ECS免费用)
  • 最终的部署情况如下图
    在这里插入图片描述

源站部署

  • 登录阿里云机器
  • 将编译好的lalserver以及lalserver.conf.json上传到阿里云服务器,目录结构如下图
~# tree lal
lal
├── bin
│   └── lalserver
├── conf
│   └── lalserver.conf.json
  • 注意,我这边MacBook是M1芯片,编译出来的lalserver无法运行在X86架构的电脑上,您也要注意类似问题
  • 启动
./bin/lalserver -c conf/lalserver.conf.json
  • 如果您用的也是云服务器,注意放开1935和8080端口

  • 推流到源站

./ffmpeg \
-re \
-stream_loop -1 \
-i ../videos/sample.mp4 \
-c copy \
-f flv \
'rtmp://源站IP:1935/live/test110'
  • 此时直接从源站拉流是没有问题的,可以用VLC或者ffplay试试
rtmp://源站IP:1935/live/test110

拉流节点配置

  • 接下来要部署拉流节点了,这里要修改配置,使得它在收到拉流请求的时候,知道去哪里拉流
  • 打开配置文件conf/lalserver.conf.json,找到配置static_relay_pull,其原本内容如下
  "static_relay_pull": {"enable": false,"addr": ""},
  • 修改后的内容如下,注意端口就是1935
  "static_relay_pull": {"enable": true,"addr": "源站IP:1935"},
  • 启动
./bin/lalserver -c conf/lalserver.conf.json
  • 用VLC验证,播放地址如下,均可以正常播放,要注意的是hls的无法最先播放,这个应该和拉流的内部处理有关,现在还不熟悉lal的源码,只能留待将来再研究了
rtmp://127.0.0.1:1935/live/test110
http://127.0.0.1:8080/live/test110.flv
http://127.0.0.1:8080/hls/test110.m3u8
  • 播放效果如下,与直接从源站拉流一样,当然了,些许延时还是有的,看实际网络情况
    在这里插入图片描述
  • 另外还要注意的是:如果VLCl拉的流在拉流节点本来就存在(FFmpeg推到了拉流节点),那么拉流节点就直接返回流给VLC了,不会去源站拉
  • 至此,回源操作就完成了,如果您正好在研究推拉流级联,希望本文能给您一些参考

你不孤单,欣宸原创一路相伴

  1. Java系列
  2. Spring系列
  3. Docker系列
  4. kubernetes系列
  5. 数据库+中间件系列
  6. DevOps系列

相关文章:

Golang流媒体实战之二:回源

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 今天的实战是流传输过程中的常见功能:回源如下图,lal(源站)和lal(拉流节点)代表两台电脑,上面都部署了lalVLC在…...

webgl——给场景添加光

文章目录前言光照理论介绍光照效果光源类型反射光颜色向场景中添加光向场景中添加环境光和点光源逐片元光照——更加逼真总结前言 在之前的学习中已经将三维物体添加到了场景中,但是并没有在场景中使用光,照可以使模型更具有立体感,本文主要…...

Vue实战【Vue项目开发时常见的几个错误】

目录🌟前言🌟安装超时(install timeout)🌟can’t not find ‘xxModule’ - 找不到某些依赖或者模块🌟data functions should return an object🌟给组件内的原生控件添加事件,不生效了🌟我在函数内用了this.…...

【多线程】常见的锁策略

✨个人主页:bit me👇 ✨当前专栏:Java EE初阶👇 ✨每日一语:老当益壮,宁移白首之心;穷且益坚,不坠青云之志。 目 录🏳️一. 乐观锁 vs 悲观锁🏴二. 普通的互斥…...

如何让虚拟机里的Ubuntu通过连接手机USB数据线上网

目录 一 前言 二 Windows联网方法 三 Ubuntu联网方法 一 前言 最近遇到了这样一个问题,有一台台式机,地插网口无法访问外网,周边也没有无线路由器,要访问外网,该如何做?进一步的,这台台式机…...

windows渗透(sam、system文件导出)

通过本地PC中渗透测试平台Kali对服务器场景Windows进行系统服务及版本扫描渗透测试,并将该操作显示结果中Telnet服务对应的端口号作为FLAG提交;通过本地PC中渗透测试平台Kali对服务器场景Windows进行系统服...

b01lers(php.galf)

目录 前文 正文 前文 <?phpclass A{public $codeNULL;public $argsNULL;public function __construct($code,$argsNULL){$this->code$code;$this->args$args;print_r("2333") ;} public function __invoke($code,$args){echo $code;print_r("执行inv…...

记一次若依后台管理系统渗透

前言 最近客户开始hw前的风险排查&#xff0c;让我们帮他做个渗透测试&#xff0c;只给一个单位名称。通过前期的信息收集&#xff0c;发现了这个站点&#xff1a; 没有验证码&#xff0c;再加上这个图标&#xff0c;吸引了我注意&#xff1a; 从弱口令开始 若依默认口令为ad…...

Mybatis(四):自定义映射resultMap

自定义映射resultMap前言一、处理字段和属性的映射关系问题&#xff1a;方案一&#xff1a;使用别名方案二&#xff1a;在mybatis-config.xml中设置mapUnderscoreToCamelCase方案三&#xff1a;在映射文件中设置redultMap二、多对一映射处理问题&#xff1a;方案一&#xff1a;…...

机器学习---降维算法

知其然知其所以然【写在前面】主成分分析&#xff08;PCA&#xff09;原理部分代码部分可视化部分线性判别分析&#xff08;LDA&#xff09;原理部分代码部分可视化部分独立成分分析&#xff08;ICA&#xff09;原理部分代码部分可视化部分t-SNE降维算法原理部分代码部分可视化…...

【Vue2从入门到精通】详解Vue.js的15种常用指令及其使用场景

文章目录前言1. v-text / {{ expression }}2.v-html3.v-bind4.v-on5. v-model6.v-for7.v-if / v-else-if / v-else9.v-show10.v-cloak11.v-pre12.组件注册指令13.动态组件指令14.自定义指令15.过滤器指令前言 Vue.js 是一款流行的前端框架&#xff0c;它通过指令&#xff08;Di…...

数据库知识总结

数据库知识点总结个人向。 目录第一章 绪论第二章 关系数据库第三章 关系数据库标准语言SQL第四章 数据库安全性第五章 数据库完整性第六章 关系数据理论第七章 数据库设计第十章 数据库恢复技术第十一章 并发控制第一章 绪论 数据(data): 描述事物的符号记录。 数据库(DataB…...

处理数组循环中删除元素导致索引错位情况

就是很多时候我们对一个数组进行操作的时候&#xff0c;在for遍历的过程中删掉了一个元素&#xff0c;那么在删掉那个元素之后的所有元素的索引值都会减少一位&#xff0c;数组长度缩短一位&#xff0c;删完之后&#xff0c;正在进行的循环会继续循环下去&#xff0c;但是循环的…...

快速排序,分治法实际应用(含码源与解析)

&#x1f38a;【数据结构与算法】专题正在持续更新中&#xff0c;各种数据结构的创建原理与运用✨&#xff0c;经典算法的解析✨都在这儿&#xff0c;欢迎大家前往订阅本专题&#xff0c;获取更多详细信息哦&#x1f38f;&#x1f38f;&#x1f38f; &#x1fa94;本系列专栏 -…...

linux入门---操作体统的概念

什么是操作系统 操作系统是一个对软硬件资源进行管理的软件。计算机由一堆硬件组成&#xff0c;这些硬件遵循着冯诺依曼体系结构 在这个硬件的基础上还有一个软件叫做操作系统 操作系统的任务是对硬件进行管理&#xff0c;既然是管理的话操作系统得访问到底层的硬件&#xf…...

《Qt 6 C++开发指南》提供4个版本的示例程序

《Qt 6 C开发指南》包含丰富的示例项目&#xff0c;为了方便读者使用《Qt 6 C开发指南》学习Qt编程&#xff0c;本书提供了4个版本的示例程序。读者可在人民邮电出版社异步社区本书的配套资源&#xff08;如图1&#xff09;里下载这4个版本的示例程序。图1 异步社区本书配套资源…...

chartgpt 告诉我的,loss 函数的各种知识

一、libtorch中常见的损失函数及其使用场景的总结1. CrossEntropyLoss:CrossEntropyLoss&#xff08;交叉熵损失&#xff09;主要用于分类任务。它适用于多分类问题&#xff0c;其中每个样本只属于一个类别&#xff08;互斥&#xff09;。该损失函数将预测概率与真实标签的one-…...

旅行推销员问题的遗传算法中的完整子路线顺序交叉

摘要 旅行商问题&#xff08;TSP&#xff09;是许多著名的组合问题之一。TSP可以解释为很难找到从第一个城市出发&#xff0c;经过所有城市&#xff0c;然后返回起点的最短距离。在标准问题中&#xff0c;TSP通常用于确定新算法的效率。遗传算法是求解TSP问题的一种成功算法。…...

Python实现词频统计

词频统计是自然语言处理的基本任务&#xff0c;针对一段句子、一篇文章或一组文章&#xff0c;统计文章中每个单词出现的次数&#xff0c;在此基础上发现文章的主题词、热词。 1. 单句的词频统计 思路&#xff1a;首先定义一个空字典my_dict&#xff0c;然后遍历文章&#xf…...

微信小程序面试题(day08)

文章目录微信小程序自定义组件的使用&#xff1f;微信小程序事件通道的使用&#xff1f;微信小程序如何使用vant组件库&#xff1f;微信小程序自定义组件父传子子传父&#xff1f;微信小程序自定义组件生命周期有哪些&#xff1f;微信小程序授权登录流程&#xff1f;web-view。…...

Drizzle ORM性能优化终极指南:查询优化与缓存策略详解

Drizzle ORM性能优化终极指南&#xff1a;查询优化与缓存策略详解 【免费下载链接】drizzle-orm drizzle-team/drizzle-orm: 是一个基于 C 的 ORM&#xff08;对象关系映射&#xff09;库&#xff0c;支持 MySQL 和 SQLite 数据库。适合对 C、数据库开发以及想要使用轻量级 ORM…...

AOP 代理对象的诞生时刻:Bean 生命周期中的“夺舍”瞬间

各位大佬&#xff0c;欢迎来到 Spring 容器最神秘、最惊心动魄的现场&#xff01;很多人以为 AOP 是“天生”的&#xff0c; Bean 一出生就带着光环。大错特错&#xff01;不过是前人在负重前行&#xff1a;Spring 先造出一个“纯净的肉身”&#xff08;原始对象&#xff09;&a…...

Html2Pdf高性能转换引擎:PHP 7.2-8.4全版本兼容的企业级HTML转PDF解决方案

Html2Pdf高性能转换引擎&#xff1a;PHP 7.2-8.4全版本兼容的企业级HTML转PDF解决方案 【免费下载链接】html2pdf OFFICIAL PROJECT | HTML to PDF converter written in PHP 项目地址: https://gitcode.com/gh_mirrors/ht/html2pdf 在当今企业数字化转型浪潮中&#xf…...

OpenClaw轻量化方案实测:nanobot镜像性能与成本对比

OpenClaw轻量化方案实测&#xff1a;nanobot镜像性能与成本对比 1. 为什么选择nanobot镜像 上个月我在尝试用OpenClaw搭建个人自动化助手时&#xff0c;遇到了一个典型的技术选择困境&#xff1a;是直接调用云端大模型API&#xff0c;还是部署本地模型&#xff1f;经过反复权…...

OpenClaw性能调优:Qwen3-32B镜像的批处理与并发控制

OpenClaw性能调优&#xff1a;Qwen3-32B镜像的批处理与并发控制 1. 为什么需要性能调优 当我第一次在RTX4090D上部署Qwen3-32B模型并接入OpenClaw时&#xff0c;本以为24GB显存足以应对各种任务。但现实很快给了我一记重拳——当我尝试批量处理100个文档时&#xff0c;系统不…...

nli-distilroberta-base代码实例:Python调用DistilRoBERTa实现Entailment识别

nli-distilroberta-base代码实例&#xff1a;Python调用DistilRoBERTa实现Entailment识别 1. 项目概述 自然语言推理(Natural Language Inference, NLI)是自然语言处理中的一项重要任务&#xff0c;用于判断两个句子之间的逻辑关系。nli-distilroberta-base是基于DistilRoBER…...

Dexter深度解析:如何用多Agent架构打造自主金融研究AI

一、为什么需要金融AI Agent&#xff1f; 1.1 传统金融研究的痛点 作为开发者&#xff0c;你是否遇到过这样的场景&#xff1a;需要分析一家上市公司的财务状况&#xff0c;却要花费数小时甚至数天时间&#xff1f; 传统金融研究面临三大挑战&#xff1a; 数据分散&#xff1a;…...

STM32F103 LoRa物理层驱动库详解与工程实践

1. 项目概述LoRa_STM32 是一个面向 STM32F103CB 微控制器平台的 LoRa 通信库&#xff0c;本质是 sandeepmistry/arduino-LoRa 库在 STM32 平台上的适配分支。它并非独立开发的全新协议栈&#xff0c;而是通过 Arduino Core for STM32&#xff08;rogerclarkmelbourne/Arduino_S…...

Protege新手避坑指南:搞懂‘类’、‘属性’和‘推理’到底怎么用(附常见错误排查)

Protege新手避坑指南&#xff1a;搞懂‘类’、‘属性’和‘推理’到底怎么用&#xff08;附常见错误排查&#xff09; 第一次打开Protege时&#xff0c;满屏的术语和复杂的界面可能会让你感到不知所措。作为一款强大的本体编辑工具&#xff0c;Protege确实有着陡峭的学习曲线。…...

日志分散难管理?用Visual Syslog Server实现企业级日志集中监控的5个实战方案

日志分散难管理&#xff1f;用Visual Syslog Server实现企业级日志集中监控的5个实战方案 【免费下载链接】visualsyslog Syslog Server for Windows with a graphical user interface 项目地址: https://gitcode.com/gh_mirrors/vi/visualsyslog 痛点诊断&#xff1a;日…...