基于webrtc的媒体流传输工具tl-rtc-file
也不知道是什么意思,天天都有人在微信公众号的后台发,是打算找我兑奖吗?
本文软件是朋友
Eduna
推荐的,因为他觉得好像很好玩的样子。老苏一开始以为tl-rtc-file
是跟Snapdrop
一样的局域网文件传输工具,在看了demo
网站后,发现确实有点意思,但最终的结果却有点让人失望了。
什么是 tl-rtc-file ?
tl-rtc-file
是基于webrtc
的网页在线媒体流传输开源工具。内网不限速(局域网最高到过70多M/s),支持多文件拖拽发送,网页文件预览。 扩展了许多丰富的小功能,如本地屏幕录制,远程屏幕共享(无延迟),远程音视频通话(无延迟),直播(无延迟),密码房间,oss
云存储,中继服务设置,webrtc
检测,webrtc
统计,文字传输(群聊,私聊),公共聊天,远程画板,AI
聊天框,丰富的后台管理,实时执行日志展示,机器人告警通知等功能… 等等
官方的演示站点:https://im.iamtsm.cn
安装
在群晖上以 Docker 方式安装。因为涉及到多个容器,所以采用 docker-compose
安装方式。
准备工作
第一步、先创建好目录
# 新建文件夹 tlrtcfile 和 子目录
mkdir -p /volume1/docker/tlrtcfile/{data/{db,log,init.sql,my.cnf},coturn}# 进入 tlrtcfile 目录
cd /volume1/docker/tlrtcfile
第二步、准备好需要的文件
turnserver-with-secret-user.conf
第一个文件是 turnserver-with-secret-user.conf
实际上
turnserver
在局域网是非必须步骤,只有在公网才是必须步骤。所谓非必须就是哪怕容器停止了,也不影响使用的意思
老苏基于官方的示例文件:https://github.com/tl-open-source/tl-rtc-file/blob/master/docker/coturn/turnserver-with-secret-user.conf 做了微调
#------------TURN BASE CONFIG 基础配置------------#
#监听网卡
listening-device=eth0
#监听ip(内网ip)
listening-ip=
#监听端口(端口)
listening-port=3478
#公网ip
# external-ip=
#端口最小值
min-port=49152
#端口最大值
min-port=55000
#cli密码
cli-password=qwerty
#后台运行-默认关闭 docker运行时需关闭, 自行部署时,可以开启
# daemon
#会话指纹
fingerprint
#中等详细日志
verbose
#长期凭证
#lt-cred-mech
#关闭tls
no-tls
#关闭dtls
no-dtls#------------TURN REST API USER CONFIG 有效时间帐号密码模式 (优先推荐使用这种方式)------------#
#开启rest api
use-auth-secret
#rest api账号密码
static-auth-secret=tlrtcfile
#来源(域名或ip:port)
realm=192.168.0.197:3478
其中 :
listening-device
:一般单网卡不需要修改static-auth-secret
:密码realm
: 前面的IP
修改为自己群晖主机的IP
,后面的端口不要改
这个文件需存放在 coturn
目录中
env.txt
第二个文件是 env.txt
,之所以没用 tlrtcfile.env
做文件名,是为了方便在 FileStation
中直接编辑修改
老苏基于官方的示例文件:https://github.com/tl-open-source/tl-rtc-file/blob/master/tlrtcfile.env 做了微调,去掉了没用上的部分,例如 OSS
、企业微信等
#-----------------以下为基础配置-----------------#
## api服务端口
tl_rtc_file_api_port=9092
## websocket服务端口
tl_rtc_file_socket_port=8444
## websocket服务地址
tl_rtc_file_socket_host=192.168.0.197:8444#-----------------以下为webrtc相关配置-----------------#
## webrtc-stun中继服务地址
tl_rtc_file_webrtc_stun_host=stun:192.168.0.197:3478
## webrtc-turn中继服务地址
tl_rtc_file_webrtc_turn_host=turn:192.168.0.197:3478?transport=udp
## webrtc中继服务用户名
tl_rtc_file_webrtc_turn_username=tlrtcfile
## webrtc中继服务密码
tl_rtc_file_webrtc_turn_credential=tlrtcfile
## webrtc中继服务Secret
tl_rtc_file_webrtc_turn_secret=tlrtcfile
## webrtc中继服务帐号过期时间 (毫秒)
tl_rtc_file_webrtc_turn_expire=86400000#-----------------以下为mysql数据库相关配置-----------------#
## 是否开启数据库
tl_rtc_file_db_open=true
## 数据库地址
tl_rtc_file_db_mysql_host=mysql
## 数据库端口
tl_rtc_file_db_mysql_port=3306
## 数据库名称
tl_rtc_file_db_mysql_dbName=webchat
## 数据库用户名
tl_rtc_file_db_mysql_user=tlrtcfile
## 数据库密码
tl_rtc_file_db_mysql_password=tlrtcfile#-----------------以下为管理后台相关配置-----------------#
## 管理后台房间号
tl_rtc_file_manage_room=tlrtcfile
## 管理后台密码
tl_rtc_file_manage_password=tlrtcfile
需要将 192.168.0.197
修改为自己群晖主机的 IP
docker-compose.yml
第三个文件是 docker-compose.yml
老苏基于官方的示例文件:https://github.com/tl-open-source/tl-rtc-file/blob/master/docker-compose.yml 做了微调,
version: '3'services:api-http:profiles: ['http']image: iamtsm/tl-rtc-file-apicontainer_name: tl-rtc-file-apienv_file:- ./env.txtenvironment:- tl_rtc_file_env_mode=http- tl_rtc_file_db_open=truecommand: - tlapiports:- 9092:9092links:- mysqldepends_on:- mysql- coturnvolumes:- ./env.txt:/tlrtcfile/tlrtcfile.env#https模式启动api服务api-https:profiles: ['https']image: iamtsm/tl-rtc-file-apicontainer_name: tl-rtc-file-apienv_file:- ./env.txtenvironment:- tl_rtc_file_env_mode=https- tl_rtc_file_db_open=truecommand: - tlapiports:- 9092:9092links:- mysqldepends_on:- mysql- coturnvolumes:- ./env.txt:/tlrtcfile/tlrtcfile.env#http模式启动socket服务socket-http:profiles: ['http']image: iamtsm/tl-rtc-file-socketcontainer_name: tl-rtc-file-socketcommand: - tlsocketenv_file:- ./env.txtenvironment:- tl_rtc_file_env_mode=http- tl_rtc_file_db_open=trueports:- 8444:8444links:- mysqldepends_on:- mysql- coturnvolumes:- ./env.txt:/tlrtcfile/tlrtcfile.env#https模式启动socket服务socket-https:profiles: ['https']image: iamtsm/tl-rtc-file-socketcontainer_name: tl-rtc-file-socketcommand: - tlsocketenv_file:- ./env.txtenvironment:- tl_rtc_file_env_mode=https- tl_rtc_file_db_open=trueports:- 8444:8444links:- mysqldepends_on:- mysql- coturnvolumes:- ./env.txt:/tlrtcfile/tlrtcfile.env#mysql服务mysql:profiles: ['http','https']image: iamtsm/tl-rtc-file-mysqlcontainer_name: tl-rtc-file-mysqlrestart: alwaysenvironment:#设置root密码- MYSQL_ROOT_PASSWORD=tlrtcfile#设置数据库- MYSQL_DATABASE=webchat#设置用户- MYSQL_USER=tlrtcfile#设置用户密码- MYSQL_PASSWORD=tlrtcfile#ports:# - 3306:3306volumes:- ./data/db:/var/lib/mysql- ./data/my.cnf:/etc/mysql/conf.d/my.cnf- ./data/log:/var/log/mysql- ./data/init.sql:/docker-entrypoint-initdb.d/init.sql#coturn服务coturn:profiles: ['http','https']image: iamtsm/tl-rtc-file-coturncontainer_name: tl-rtc-file-coturnports:- "3478:3478/udp"- "3478:3478/tcp"volumes:- ./coturn/turnserver-with-secret-user.conf:/etc/turnserver.conf
将 env.txt
、docker-compose.yml
放入根目录
一键启动
然后执行下面的命令
# 进入 tlrtcfile 目录
cd /volume1/docker/tlrtcfile# 以 http 方式一键启动
docker-compose --profile=http up -d# 以 https 方式一键启动
docker-compose --profile=https up -d
运行
如果是以 http
模式启动的,在浏览器中输入 http://群晖IP:9092
就能看到主界面
如果是 https
模式启动的,在浏览器中输入 https://群晖IP:9092
会看到提示
点 高级
,选择继续前往
之后的操作和功能都是一样的
点左下角的 创建/加入房间
默认会生成一串数字,但是并不能用来做房间号
所以需要手动改为字母,然后再次点左下角的 创建/加入房间
加入成功
另一方输入同样的房间号,加入到同一个房间
双方可以聊天
也可发文件
选择需要传递的文件,点 一键发送
接收端会有提示
点开能看到详情
可惜其他功能不能用,可能需要 捐赠版
才行吧
遗留问题
刷新页面会显示 系统错误
但是似乎并不影响发消息和发文件,因此也就不去深究了,先这样吧
参考文档
tl-open-source/tl-rtc-file: WebRTC P2P online web media streaming tool (for files, video, screen, live streaming, text) with management and statistical monitoring capabilities.
地址:https://github.com/tl-open-source/tl-rtc-file
tl-rtc-file
地址:https://im.iamtsm.cn/
tl-rtc-file-使用手册 · tl-rtc-file
地址:https://im.iamtsm.cn/document/
tl-rtc-file-website
地址:https://im.iamtsm.cn/website/index.html
相关文章:
基于webrtc的媒体流传输工具tl-rtc-file
也不知道是什么意思,天天都有人在微信公众号的后台发,是打算找我兑奖吗? 本文软件是朋友 Eduna 推荐的,因为他觉得好像很好玩的样子。老苏一开始以为 tl-rtc-file 是跟 Snapdrop 一样的局域网文件传输工具,在看了 demo…...
【最新鸿蒙应用开发】——类Web开发范式2——前端语法
兼容JS的类Web开发范式 JS FA应用的JS模块(entry/src/main/js/module)的典型开发目录结构如下: 1. 项目基本结构 1.1. 目录结构 1.2. 项目文件分类如下: .hml结尾的HML模板文件,这个文件用来描述当前页面的文件布局结构。 .css结尾的CSS样…...
前端的强缓存和协商缓存
前端缓存机制 前端缓存主要分为两种类型:强缓存和协商缓存。 强缓存(HTTP Cache-Control) 通过设置HTTP响应头中的Cache-Control实现。浏览器根据Cache-Control的值决定是否重新请求资源。指令示例: no-cache:重新验…...
JSON如何处理包含特殊字符的字段
在JSON中处理包含特殊字符的字段时,你通常不需要直接处理这些特殊字符,因为JSON格式本身就会对特殊字符进行转义。当你使用编程语言或工具来生成或解析JSON时,这些转义通常是自动处理的。 然而,如果你需要手动处理或理解这些转义…...
JavaScript 中的 AbortController
AbortController 接口是 JavaScript 中 Fetch API 的一部分,引入它是为了处理和控制中止 fetch 请求的信号。这在需要取消正在进行的网络请求时特别有用,例如用户发起的动作取消,通过避免不必要的请求来提高性能,或优雅地处理超时…...
【前端】vue在线编辑器
以下是几个推荐的在线编辑器: CodeSandbox URL: https://codesandbox.io/特点: 支持 Vue、React、Angular 等多种前端框架,功能强大,社区活跃。 JSFiddle URL: https://jsfiddle.net/特点: 轻量级的在线编辑器,支持 Vueÿ…...
leetcode67:二进制求和
题目链接:67. 二进制求和 - 力扣(LeetCode) class Solution { public:string addBinary(string a, string b) {int stralen a.size(), strblen b.size();int curtc;int Maxlen max(stralen, strblen);vector<int> stra;vector<i…...
程序员必备的职业素养:专业精神、沟通能力与持续学习
🍎个人博客:个人主页 🏆个人专栏:日常聊聊 ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 专业精神:技术的执着追求 沟通能力:团队合作的桥梁 持续学习:不断进步的动力 结语 我的…...
Spring源码:核心类的介绍
1. 前言 核心类代表了Spring框架中最基本的组件和功能,通过介绍这些类,学习者可以更好地理解Spring框架的核心工作原理和关键组件之间的关系。同时,了解这些核心类有助于学习者深入掌握Spring框架的使用和扩展方法。 2. ApplicationContextI…...
文化融合,市场共赢:品牌海外推广中的符号与象征策略
在全球化的今天,品牌海外推广不再仅仅是产品的输出,更是一种文化的交流和融合。品牌如何在保持自身特色的同时,又能融入当地文化,成为品牌海外拓展成功与否的关键。本文Nox聚星将和大家分析品牌如何运用具有当地文化特色的符号和象…...
fabric.util.enlivenObjects是什么意思
在Fabric.js中,fabric.util.enlivenObjects是一个实用函数,用于将一组对象的描述(通常是JSON格式的对象数组)转换回Fabric.js的对象实例。这个函数非常有用,特别是在涉及到从JSON恢复画布状态时,例如在实现…...
几个阶段性的面试难点整理
一、JVM篇 1、如何排查CPU、内存飙升的问题? 2、是否处理过线上问题?是怎么解决的? 3、谈谈G1收集器对比CMS收集器的优点?什么情况下适合用G1? 4、JVM调优的参数主要指哪方面的调优? 5、堆、栈中分别存放了…...
CTFHUB-技能树-web-信息泄露
目录 1.目录遍历 2.PHPINFO 3.备份文件下载 3.1 网站源码 3.2 bak文件 3.3 vim缓存 3.4 .DS_Store 4.Git泄露 4.1 Log 4.2 Stash 4.3 Index 5.SVN泄露 6.HG泄露 1.目录遍历 这个没什么好讲的,进去直接点击找flag,然后在下面目录翻,就找到了 …...
面试计算机网络八股文十问十答第八期
面试计算机网络八股文十问十答第八期 作者:程序员小白条,个人博客 相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新! ⭐点赞⭐收藏⭐不迷路!⭐ 1) TCP到底是什么连接? …...
0605-JavaSE-单例模式-饿懒汉模式
不能放在方法里面(因为每个线程调用都会在方法里面实例化一个locker对象,但不属于同一个对象),然后要用static修饰成静态变量才会起到效果 //单例设计模式 //饿汉模式:在加载类的时候就已经开始创建 /…...
TCP和UDP区别
TCP(Transmission Control Protocol,传输控制协议)和UDP(User Datagram Protocol,用户数据报协议)都是Internet协议套件中的传输层协议,但它们在工作方式、特性和适用场景上有显著区别ÿ…...
[Shell编程学习路线]——编制第一个shell脚本入门篇
🏡作者主页:点击! 🛠️Shell编程专栏:点击! ⏰️创作时间:2024年6月12日10点23分 🀄️文章质量:93分 目录 ——前言—— 💥常用的几种shell Bash Sh …...
python数据处理分析库(一)
目录 一、NumPy 二、Pandas 三、Matplotlib and Seaborn 一、NumPy 场景:处理大规模数组和矩阵运算,可以用于科学计算、数据预处理简单示例: import numpy as npdata np.array([1, 2, 3, 4, 5]) mean np.mean(data) std_dev np.std(da…...
使用Transformer进行抄袭检测
动机 在许多行业中,尤其是在学术界,抄袭是一个重大问题。随着互联网和开放信息的兴起,这种现象甚至变得更加严重,任何人都可以通过点击访问特定主题的任何信息。 基于这一观察,研究人员一直在尝试使用不同的文本分析…...
基于深度学习的电池健康状态预测(Python)
电池的故障预测和健康管理PHM是为了保障设备或系统的稳定运行,提供参考的电池健康管理信息,从而提醒决策者及时更换电源设备。不难发现,PHM的核心问题就是确定电池的健康状态,并预测电池剩余使用寿命。但是锂电池的退化过程影响因…...
【吊打面试官系列-Mysql面试题】MySQL 如何优化 DISTINCT?
大家好,我是锋哥。今天分享关于 【MySQL 如何优化 DISTINCT?】面试题,希望对大家有帮助; MySQL 如何优化 DISTINCT? DISTINCT 在所有列上转换为 GROUP BY,并与 ORDER BY 子句结合使用。 SELECT DISTINCT t…...
企业IT运维管理体系-总体规划
企业IT运维管理体系-总体规划 企业IT运维管理体系的总体规划通过科学的调研、分析、设计和建设,提升管理成熟度、增强服务能力、实现技术创新和优化资源配置。重点在于建立组织保障体系、制定运维制度、构建运维平台和完善度量指标。通过明确运维治理模式和外包管理…...
RabbitMQ-Stream(高级详解)
文章目录 什么是流何时使用 RabbitMQ Stream?在 RabbitMQ 中使用流的其他方式基本使用Offset参数chunk Stream 插件服务端消息偏移量追踪示例 示例应用程序RabbitMQ 流 Java API概述环境创建具有所有默认值的环境使用 URI 创建环境创建具有多个 URI 的环境 启用 TLS…...
Web前端图片并排显示的艺术与技巧
Web前端图片并排显示的艺术与技巧 在Web前端开发中,图片并排显示是一种常见的布局需求。然而,实现这一目标并非易事,需要掌握一定的技巧和艺术。本文将从四个方面、五个方面、六个方面和七个方面深入探讨Web前端图片并排显示的奥秘。 四个方…...
豆瓣电影信息爬虫【2024年6月】教程
豆瓣电影信息爬虫【2024年6月】教程,赋完整代码 在本教程中,我们将使用以下技术栈来构建一个爬虫,用于爬取豆瓣电影列表页面的信息: 完整代码放到最后 ; 完整代码放到最后 ; 完整代码放到最后 ;…...
Flutter- AutomaticKeepAliveClientMixin 实现Widget保持活跃状态
前言 在 Flutter 中,AutomaticKeepAliveClientMixin 是一个 mixin,用于给 State 类添加能力,使得当它的内容滚动出屏幕时仍能保持其状态,这对于 TabBarView 或者滚动列表中使用 PageView 时非常有用,因为这些情况下你…...
《计算机组成原理》期末复习题节选
第三章–存储系统 3.1 存储器性能指标 核心公式: 存储容量存储字数*字长 ,存储字数表示存储器的地址空间的大小,字长表示一次存取操作的数据量.数据传输率数据宽度/存储周期 1、设机器字长为32位,一个容量为16MB的存储器&…...
NSSCTF中的popchains、level-up、 What is Web、 Interesting_http、 BabyUpload
目录 [NISACTF 2022]popchains [NISACTF 2022]level-up [HNCTF 2022 Week1]What is Web [HNCTF 2022 Week1]Interesting_http [GXYCTF 2019]BabyUpload 今日总结: [NISACTF 2022]popchains 审计可以构造pop链的代码 <php class Road_is_Long{public $…...
量产维护 | 芯片失效问题解决方案:从根源找到答案
芯片失效分析是指对电子设备中的故障芯片进行检测、诊断和修复的过程。芯片作为电子设备的核心部件,其性能和可靠性直接影响整个设备的性能和稳定性。 随着半导体技术的迅速发展,芯片在各个领域广泛应用,如通信、计算机、汽车电子和航空航天等。 因此,对芯片故障原因进行…...
Linux忘记密码的解决方法
1、进入GRUB页面,选择对应的内核按下‘e’键; 2、进入内核修改信息界面,找到Linux这一行,在这一行的末尾加上 init/bin/sh 按下ctrlx进入单用户模式 3、进入单用户后,重新挂载根目录,使其可写࿱…...
织梦可以做家教网站吗/佛山市seo推广联系方式
Lind.DDD.Authorization是Lind.DDD框架的组成部分,之所以把它封装到框架里,原因就是它的通用性,几乎在任何一个系统中,都少不了用户授权功能,用户授权对于任何一个系统来说都是必要的,像管理型的页面都需要…...
wordpress如何导入数据/营销管理系统
1、 搭建了mariadb galera集群后,整个集群停掉后如何启动呢,我们要先启动那个节点呢,今天我尝试把集群机器全部停掉,然后任意启动一个节点,发现报如下的错误: 170620 21:32:55 [ERROR] WSREP: It may not be safe to bootstrap the cluster from this node. It wa…...
怎样做酒店网站ppt模板/搜索引擎营销的特点有
题意:空间中有n个点,任意3个点不共线。每两个点用红线或者蓝线连接,如果一个三角形的三边颜色相同,那么称为同色三角形。给你一组数据,计算同色三角形的总数。 考虑补集,异色三角形 每个点的边红色和蓝色两…...
怎么制作网站维护公告效果/新一轮疫情最新消息
微信开始严打第三方网页强制跳转行为,禁止使用提供诱导或强制点击跳转阅读全文功能,违规导流网站一律封杀!微信方面表示,近期大量用户投诉,在微信中打开第三方网站链接内容总是出现诱导或强制点击才能阅读链接全文行为,…...
网站建设算行政工作吗/企业如何网络推广
输入输出参数: 给存储过程传参数,叫做输入参数,用户告诉存储过程需要 利用这个参数干些什么. 输出参数: 从存储过程得到那些数据. 创建一个可选参数的存储过程: create proc pa1 name varchar(50)NULL as if(name is not null)select * from a where name like name%; elsesele…...
免费自制app软件靠谱么/网站搜索优化方法
Nginx默认没有开启利用多核CPU,我们可以通过增加worker_cpu_affinity配置参数来充分利用多核CPU。CPU是任务处理,计算最关键的资源,CPU核越多,性能就越好。配置Nginx多核CPU,worker_cpu_affinity使用方法和范例1. 2核CPU,开启2个进…...