个人直播/流媒体服务解决方案实践

目录

1. 说明

1.1 拓扑结构图

2. 准备工作

2.1 软硬件清单

3. 步骤

3.1 按上面的软硬件清单准备好材料

3.2 内网检查测试

3.3 透传到公网服务器 

3.5 机顶盒配置

4. 总结 

5. 参考

6. 后语


1. 说明

- 在本地局域网建立流媒体服务,并发布到公网服务器供终端(机顶盒/移动设备)订阅浏览

- 整个方案费用:本地硬件,本地上网费,公网服务器费, 域名费

1.1 拓扑结构图

其中: 流媒体服务器(Streaming Server), 媒体编排/发布客户机(Media Client)

2. 准备工作

2.1 软硬件清单
条目说明
流媒体小主机

这里我用了虚拟机,分配6核14G,安装软件:

  • 宝塔
  • oryx - 流媒体服务器,Docker方式
  • frpc service- frps客户端
媒体编排电脑

4核8G, 安装软件:

- vMix  绿色版

TVBOX / 机顶盒 (安卓系统)

4核2G,安装软件:

- TVBOX, CatBox等

路由器- iStoreOS
公网服务器 + 域名

2核1G,安装软件:

- frps service - frps 服务端

设置子域名指向, 如 live.xxx.top

3. 步骤

3.1 按上面的软硬件清单准备好材料
3.2 内网检查测试

流媒体服务器:

媒体编排机:

其中的流配置里面填上上面的推流地址与密钥

点击SRS中的简易播放器浏览 

3.3 透传到公网服务器 

通过透传软件, 暴露2022端口给外部访问, 注意公网服务器的防火墙开放相关端口。

frp 相关配置

frps.toml

bindPort = 7000auth.method = "token"   #服务端连接身份认证,默认token
auth.token = "asyouwant"   #服务端token密码webServer.addr = "0.0.0.0"
webServer.port = 7500
# dashboard 用户名密码,可选,默认为空
webServer.user = "admin"
webServer.password = "asyouwant"

frpc.toml

serverAddr = "frps.***.com"
serverPort = 7000auth.method = "token"   #服务端连接身份认证,默认token
auth.token = "asyouwant"   #服务端token密码,密码不正确将无法连接服务器[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6022
transport.useEncryption = true
transport.useCompression = true[[proxies]]
name = "oryx"
type = "tcp"
localIP = "127.0.0.1"
localPort = 2022
remotePort = 2022

 3.4 公网测试

类似内网测试, 获取HLS流url, 如: http://***.top:2022/live/livestream.m3u8

3.5 机顶盒配置

找个网上的直播节目json做修改,如 live.txt:

🇨🇳|蓝光频道,#genre#
Ben MTV,http://live.xxx.top:2022/live/livestream.m3u8
4K超高清,http://liveop.cctv.cn/hls/4KHD/playlist.m3u8?zzhongd

 继续tvbox配置, 导入直播数据源, 打开直播节目, 如图:

搞掂!

4. 总结 

- 比较过几个透传方案,都是狠钱党,而且限制多多, 包括:DDNSTO, Ngrok 等。

5. 参考

  • SRS (Simple Realtime Server) | SRS
  • frp/README.md at dev · fatedier/frp · GitHub
  • 内网穿透!如何配置frp新版0.56.0的配置文件.toml:提供web、samba、ssh远程连接示例_frp 配置-CSDN博客

6. 后语

最近环境不太好, 趁着有点时间做些实践方案,分享之 ... 共勉。

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

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

相关文章

【Unity 组件思想-预制体】

【Unity 组件思想-预制体】 预制体(Prefab)是Unity中一种特殊的组件 特点和用途: 重用性: 预制体允许开发者创建可重复使用的自定义游戏对象。这意味着你可以创建一个预制体,然后在场景中多次实例化它,…

轻松上手的LangChain学习说明书

一、Langchain是什么? 如今各类AI模型层出不穷,百花齐放,大佬们开发的速度永远遥遥领先于学习者的学习速度。。为了解放生产力,不让应用层开发人员受限于各语言模型的生产部署中…LangChain横空出世界。 Langchain可以说是现阶段…

快速了解Oracle 数据库 23ai

Oracle Database 23ai 于2024年5月2日正式发布。快速了解可以看官网主页和官方博客。 官网主页 23ai的3个要点,核心都是数据: 数据的人工智能 主要指数据库内置机器学习和AI向量搜索。这实际是Oracle融合数据库策略的延续,避免了复杂的数据…

SparkStructuredStreaming状态编程

spark官网关于spark有状态编程介绍比较少,本文是一篇个人理解关于spark状态编程。 官网关于状态编程代码例子: spark/examples/src/main/scala/org/apache/spark/examples/sql/streaming/StructuredComplexSessionization.scala at v3.5.0 apache/spark (github…

电商企业案例:金蝶云星空对接易仓

案例背景 某跨境电商公司,作为行业的新锐力量,业务覆盖全球数十个国家,产品线丰富多样。随着业务量的激增,原有的信息孤岛问题日益凸显,导致订单处理延迟、库存管理混乱、物流效率低下。尤其是发货单、销售退件单等跨…

代码随想录训练营31day-动态规划4

一、完全背包(参考博客) 和01背包区别在于物品可以无限次放入背包。完全背包和01背包问题唯一不同的地方就是,每种物品有无限件。 因此在需要在遍历顺序上进行区别,参考代码随想录: 二、518.零钱兑换II 题目求的是组…

尊享面试100(272.最接近的二叉树搜索值|| python)

刚开始想着用最小堆,把每个元素都加进去,然后找出最小的k个值,复杂度应该是(nklogn) import heapq as pq class Solution:def __init__(self):self.h []pq.heapify(self.h)def closestKValues(self, root: Optional[TreeNode], …

[极客大挑战 2019]PHP

1.通过目录扫描找到它的备份文件,这里的备份文件是它的源码。 2.源码当中涉及到的关键点就是魔术函数以及序列化与反序列化。 我们提交的select参数会被进行反序列化,我们要构造符合输出flag条件的序列化数据。 但是,这里要注意的就是我们提…

Go 语言(四)【常用包使用】

1、命令行参数包 flag flag 包就是一个用来解析命令行参数的工具。 1.1、os.Args import ("fmt""os" )func main() {if len(os.Args) > 0 {for index, arg : range os.Args {fmt.Printf("args[%d]%v\n", index, arg)}} } 运行结果&#…

Pytorch基础:内置类type的用法

相关阅读 Pythonhttps://blog.csdn.net/weixin_45791458/category_12403403.html?spm1001.2014.3001.5482 在python中,一切数据类型都是对象(即类的实例),包括整数、浮点数、字符串、列表、元组、集合、字典、复数、布尔、函数、…

ChatGPT的真实能力如何?七大NLP任务一探究竟!

文章链接:https://arxiv.org/pdf/2405.00704 ChatGPT已经改变了人工智能社区,一个活跃的研究方向是ChatGPT的性能评估。评估的一个关键挑战是ChatGPT仍然是闭源的,传统的基准数据集可能已被ChatGPT用作训练数据。在本文中: 调查了最近的研究…

MySQL-基础篇

MySQL基础篇 MySQL概述 MySQL安装与启动 配置MySQL环境变量 MySQL数据库 SQL DDL 数据库操作 表操作 表操作-修改 注意:在删除表时,表中的全部数据也会被删除。 datagrip DML DQL DQL-基本查询 在实际开发过程中,尽量不要写se…

利用matplotlib和networkx绘制有向图[显示边的权重]

使用Python中的matplotlib和networkx库来绘制一个有向图,并显示边的权重标签。 1. 定义了节点和边:节点是一个包含5个节点的列表,边是一个包含各个边以及它们的权重的列表。 2. 创建了一个有向图对象 G。 3. 向图中添加节点和边。 4. 设置了…

vue3中标签的ref属性

组合API-ref属性 在vue2.x中,可以通过给元素添加refxxx属性,然后在代码中通过this.$refs.xxx获取到对应的元素 然而在vue3中时没有$refs这个东西的,因此vue3中通过ref属性获取元素就不能按照vue2的方式来获取。 目标:掌握使用re…

ModuleNotFoundError: No module named ‘pkg_resources‘ 问题如何解决?

ModuleNotFoundError: No module named pkg_resources 通常是因为 Python 环境中缺少 setuptools 模块。pkg_resources 是 setuptools 包的一部分,用于处理 Python 包的发行和资源。 为解决这个问题,请按照以下步骤操作: 确保 setuptools 已…

压缩png图片大小怎么操作?试试这招一键压缩图片体积

png图片是一种无损压缩格式,体积也会比其他格式的图片要大。但是,我们在使用的过程中遇到需要给png图片压缩体积的情况时要怎么办呢?很简单,只需要使用png压缩大小(https://www.yasuotu.com/png)网站-压缩图…

UE5 体积云

写好的体积材质放这里面 效果如上 Begin Object Class/Script/UnrealEd.MaterialGraphNode Name"MaterialGraphNode_4"Begin Object Class/Script/Engine.MaterialExpressionVectorParameter Name"MaterialExpressionVectorParameter_0"End ObjectBegin O…

欢乐钓鱼大师脚本,游戏托管一键操作!

欢迎来到《钓鱼大师乐趣无穷》!这里是一片充满了乐趣和挑战的钓鱼天地。不论你是刚刚入门的小白,还是已经成为老手的大神,本攻略将为你揭示如何在游戏中获得成功,并针对稀有鱼类的钓鱼技巧进行详细介绍。 一、初探钓鱼的乐趣 在《…

低功耗UPF设计的经典案列分享

案例1 分享个例子,景芯A72低功耗设计,DBG domain的isolation为何用VDDS_maia_noncpu供电而不是TOP的VDD? 答:因为dbg的上一级是noncpu,noncpu下面分成dbg和两个tbnk。 案例2 景芯A72的低功耗,请问&#…

RabbitMQ是怎么做消息分发的?——Java全栈知识(14)

RabbitMQ是怎么做消息分发的? RabbitMQ 的消息分发分为五种模式:分别是简单模式、工作队列模式、发布订阅模式、路由模式、主题模式。 1、简单模式 publisher 直接发送消息到队列消费者监听并处理队列中的消息 简单模式是最基本的工作模式,…