基于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 安装方式。

准备工作

第一步、先创建好目录

1
2
3
4
5
# 新建文件夹 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 做了微调

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#------------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、企业微信等

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#-----------------以下为基础配置-----------------#
## 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 做了微调,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
version: '3'

services:
api-http:
profiles: ['http']
image: iamtsm/tl-rtc-file-api
container_name: tl-rtc-file-api
env_file:
- ./env.txt
environment:
- tl_rtc_file_env_mode=http
- tl_rtc_file_db_open=true
command:
- tlapi
ports:
- 9092:9092
links:
- mysql
depends_on:
- mysql
- coturn
volumes:
- ./env.txt:/tlrtcfile/tlrtcfile.env

#https模式启动api服务
api-https:
profiles: ['https']
image: iamtsm/tl-rtc-file-api
container_name: tl-rtc-file-api
env_file:
- ./env.txt
environment:
- tl_rtc_file_env_mode=https
- tl_rtc_file_db_open=true
command:
- tlapi
ports:
- 9092:9092
links:
- mysql
depends_on:
- mysql
- coturn
volumes:
- ./env.txt:/tlrtcfile/tlrtcfile.env

#http模式启动socket服务
socket-http:
profiles: ['http']
image: iamtsm/tl-rtc-file-socket
container_name: tl-rtc-file-socket
command:
- tlsocket
env_file:
- ./env.txt
environment:
- tl_rtc_file_env_mode=http
- tl_rtc_file_db_open=true
ports:
- 8444:8444
links:
- mysql
depends_on:
- mysql
- coturn
volumes:
- ./env.txt:/tlrtcfile/tlrtcfile.env

#https模式启动socket服务
socket-https:
profiles: ['https']
image: iamtsm/tl-rtc-file-socket
container_name: tl-rtc-file-socket
command:
- tlsocket
env_file:
- ./env.txt
environment:
- tl_rtc_file_env_mode=https
- tl_rtc_file_db_open=true
ports:
- 8444:8444
links:
- mysql
depends_on:
- mysql
- coturn
volumes:
- ./env.txt:/tlrtcfile/tlrtcfile.env

#mysql服务
mysql:
profiles: ['http','https']
image: iamtsm/tl-rtc-file-mysql
container_name: tl-rtc-file-mysql
restart: always
environment:
#设置root密码
- MYSQL_ROOT_PASSWORD=tlrtcfile
#设置数据库
- MYSQL_DATABASE=webchat
#设置用户
- MYSQL_USER=tlrtcfile
#设置用户密码
- MYSQL_PASSWORD=tlrtcfile
#ports:
# - 3306:3306
volumes:
- ./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-coturn
container_name: tl-rtc-file-coturn
ports:
- "3478:3478/udp"
- "3478:3478/tcp"
volumes:
- ./coturn/turnserver-with-secret-user.conf:/etc/turnserver.conf

env.txtdocker-compose.yml 放入根目录

一键启动

然后执行下面的命令

1
2
3
4
5
6
7
8
# 进入 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