Skip to content

jasony62/tms-janus-play

Repository files navigation

基于janus-gateway实现的流媒体服务器,用于学习和验证janus的功能。

ue_demojanus自带的演示程序。ue_play是媒体播放端,对接了mp4插件。

播放端(ue_play)和janus服务通过 http 端口(8088)或 https 端口 (8089)服务建立 WebRTC 链接。

环境准备

git clone --depth=1 https://github.com/jasony62/tms-janus-play.git

项目目录下新建docker-compose.override.yml文件。

在 linux 环境下,服务 janus 应使用的网络模式为host,否则会报错(和 mDNS 有关,目前不知如何怎样解决)。但是,在 Mac 和 Windows 环境下不支持host模式。

因为浏览器使用 WebRTC 默认要使用 https,所以最好安装 ssl 证书。服务器生成好 ssl 证书后,janue 和 nginx 需要开启 https 端口,需要将存放证书的目录挂载到容器中。

如果需要开启 stun 和 ssl,需要给环境变量赋值。新建文件local.env(可以根据需要命名),指定使用这个文件。

# ssl证书位置
ssl_certificate=
ssl_certificate_key=

# janus stun-server
stun_server=coturn:3478

# debug级别
debug_level=4

stun_server设置为 docker 中的coturn(使用部署位置的公网地址),或者公共的服务地址,例如:stun.stunprotocol.org:3478

ssl

需要配置 ssl 证书。

webrtc 要求通过 ssl 访问。

janus配置文件/opt/janus/etc/janus/janus.transport.http.jcfg设置是否开通https端口。如果要开通https,那么需要指定使用的ssl证书。

coturn

为了在互联网上实现点对点通信,需要支持穿越 Nat,配置自己的stun服务。

在有公网 ip 的 linux 服务器上(否则 network 不支持 host 方式),用下面的命令行启动instrumentisto/coturn容器。

docker run --name coturn-test --network=host instrumentisto/coturn

参考:

https://github.com/coturn/coturn

https://github.com/instrumentisto/coturn-docker-image

local.env文件中指定 stun 服务的地址和端口。

制作镜像

下载https://github.com/meetecho/janus-gateway/archive/v0.9.1.tar.gz文件到janus-9目录下,执行命令tar -zxf v0.9.1.tar.gz,解压后的目录为janus-gateway-0.9.1

docker-compose -f docker-compose.9.yml build

docker-compose -f docker-compose.9.yml -f docker-compose.override.yml up

docker exec -it tms-janus_0.9.1 bash

docker-compose -f docker-compose.9.yml down

docker-compose -f docker-compose.9.yml -f docker-compose.override.yml up janus

docker exec -it tms-janus_0.9.1 bash -c "cd /usr/src/janus-plugins/play; make"

docker exec -it tms-janus_0.9.1 bash -c "cd /usr/src/janus-plugins/play; make install"

docker exec -it tms-janus_0.9.1 bash -c "cd ../janus-plugins/play; make; make install"

自定义插件复制到/usr/src/janus-plugins

编译插件

进入容器执行

./bootstrap &&
./configure --prefix=/opt/janus &&
make && make install

配置文件

编译安装后要重启 janus。如果是 down,插件需要编译和安装。

docker-compose -f docker-compose.9.yml restart janus

janus

Janus-gateway 是开源的 WebRTC 服务器。

参考:https://janus.conf.meetecho.com

变量 说明 默认值
命令 说明
probe.file 获取文件信息。
ctrl.play 第 1 次执行,开始播放;播放过程中执行,暂停;暂停时执行,恢复。
stop.play 停止播放。

必须停止当前播放的文件,才能播放新文件。

播放端(ue_play)

在 nginx 中运行控制媒体播放的前端代码。

默认janus服务和播放端在同一服务器上,使用 8088 作为janus服务的 http 端口,使用 8089 作为 https 端口。

可以通过环境变量 VUE_APP_JANUS_HTTP_SERVER 直接指定 janus。

环境变量

变量 说明 默认值
VUE_APP_JANUS_ADDRESS janus服务的地址。如果不指定,认为和播放端部署在同一主机。
VUE_APP_JANUS_HTTP_PORT janus服务 http 服务端口。与浏览器地址栏的协议一致。 8088
VUE_APP_JANUS_HTTPS_PORT janus服务 https 服务端口。与浏览器地址栏的协议一致。 8089

发布 npm 包。

通道状态

状态 说明
initialized 完成 Janus 客户端检查和适配等初始化工作。
connected 已经连接 Janus 服务器,生成了 janus 会话实例。
attached 已经连接到指定插件,可以开始发送消息。
webrtcUp WebRTC 通道已建立,可以传送媒体数据。

播放状态

状态 说明
ready 通道已经就绪,要播放的文件检查通过。
going 播放中。播放结束后回到ready状态。
paused 播放暂停。

需要执行

cnpm i vue

cnpm i [email protected]

ue-demo

janus-gateway 自带的演示程序。

运行

docker-compose up --build

样本数据

mp4

ffmpeg -t 0:3.40 -i digit-4_14s.wav -t 0:3.40 -i testsrc2-baseline31-gop10-3_80s.h264 -ar 8000 -c:a aac -c:v libx264 -profile:v baseline -level 3.1 -g 10 digit_8k_testsrc2-baseline31-gop10-3_40s.mp4

player

在浏览器中打开:https://yourdomain:8443/player

demo

在浏览器中打开:https://yourdomain:8444

因为 ssl 的问题需要手工执行一遍对 api 的调用。

About

基于janus-gateway实现的流媒体服务器。

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published