一个极易部署的流媒体服务:Node-Media-Server

发布于 2020-12-13  407 次阅读


原文地址

现在有很多自建流媒体服务器的方法,最常用的应该是 Nginx,但如果是自己想体验一下的话,这个 Node-Media-Server 比 Nginx 配置起来要简单很多,而且还有一个简单的 WEB 面板可以方便的查看一些信息。

这里使用 Docker 的方式部署,首先安装 Docker

curl -sSL https://get.docker.com/ | sh
systemctl start docker
systemctl enable docker

一条命令即可完成部署:

docker run -d -p 1935:1935 -p 8000:8000 --restart=always --name nms illuspas/node-media-server

然后我们需要进到容器内,做一些更改:

docker exec -it nms /bin/sh

编辑:

vi app.js

找到下面这一段,更改默认的管理员密码,然后把 publish 改为 true,最后把 secret 也改一下,例如:

auth: {
    api: true,
    api_user: 'admin',
    api_pass: 'lala.im',
    play: false,
    publish: true,
    secret: 'x1x2x3x4x5lalaim'
  },

这样做的话是让推流有一个鉴权验证,不做验证的话任何人知道你这个服务器的地址都能用你这台机器推流,这样会造成滥用。

改完之后退出容器并重启:

exit
docker restart nms

如果上面的重启报错,回显类似什么 iptables/DNAT 啥的,就直接重启 Docker 服务吧:

systemctl restart docker

因为我们给推流做了一个鉴权验证,这个时候我们需要计算一下推流的地址,首先要定义一个推流地址过期的时间,这里我假设地址在 2019 年的 7 月 1 日过期,那么将时间戳换算成 unix 的类型:

date -d "2019-07-01 00:00:00" +%s

执行上述的命令后,得到的 unix 时间戳是:

然后我们把时间戳和之前在 app.js 内配置的 secret 进行一次 md5 加密,格式如下:

echo -n "/live/test-1561939200-x1x2x3x4x5lalaim" | md5sum

注:其中的 test 是可以自己随便更改的,你这里可以理解为这是一个直播间的名字。

执行完上面的命令得到的 md5 值是:

2e99dbb982cd4bb0edd485a2d249745c

那么最终我们的推流地址就是:

rtmp://vpsip/live/test?sign=1561939200-2e99dbb982cd4bb0edd485a2d249745c

服务端这边就部署完成了,下面简单说一下怎么用 FFMPEG/OBS 推流。

安装 FFMPEG,这边一切从简,直接用 FFMPEG 的静态包:

wget https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
tar -xJf ffmpeg-release-amd64-static.tar.xz
cd ffmpeg-4.1.3-amd64-static
cp ffmpeg /usr/bin && cp ffprobe /usr/bin && cp qt-faststart /usr/bin

然后随便找个视频文件测试一下:

ffmpeg -re -i 230OREC-315.mp4 \
-c:v libx264 -preset superfast -tune zerolatency \
-c:a aac -ar 44100 -f flv rtmp://vpsip/live/test?sign=1561939200-2e99dbb982cd4bb0edd485a2d249745c

类似如下图的回显就说明推流成功:

pic_001.png

如果要循环无人值守推流,可以看看我之前撸的一个推流脚本:

FFmpeg 循环推流脚本

OBS 推流设置:

pic_002.png

现在我们可以访问一下 WEB 面板看看推流是否正常:

http://vpsip:8000/admin/

可以看到我设置的 2 个直播都是 OK 的:

pic_003.png

这个媒体服务器支持很多种格式,像什么 FLV/HLS/DASH 都是支持的,相应的拉流地址:

http://vpsip:8000/live/STREAM_NAME.flv
ws://vpsip:8000/live/STREAM_NAME.flv
http://vpsip:8000/live/STREAM_NAME/index.m3u8
http://vpsip:8000/live/STREAM_NAME/index.mpd

自己弄个简单的 html 页面或者套个 Dplayer 都是可以的,这里就不多 BB 了。。这样一个私人直播服务器就搭建完成了。。

参考文献:

https://github.com/illuspas/Node-Media-Server/blob/master/README_CN.md


或许明日太阳西下倦鸟已归时