node-stream 使用分享
基于Node.js 的本地直播应用
今天介绍一个开源项目node-stream,该项目由开发者waleedahmad开发,采用MIT协议在Github开源。 node-stream
利用Node.js实现了一个简易的本地直播平台。该项目支持从推流软件(OBS等)接收RTMP流并转码为HLS流在浏览器中播放。该项目分为服务端和客户端,服务端负责接收RTMP流和转码,客户端负责显示播放页面,同时该项目支持简单的帐号管理。
本文将讲述 node-stream
的部署和使用。对项目本身构建感兴趣的伙伴可以查看项目开发者 waleedahmad 写的文章 Building Live Streaming App with Node.js and React。
原版的node-stream的安装使用
部署node-stream开发环境
以 Ubuntu
安装Node.js开发环境
安装
ffmpeg
$ sudo apt install ffmpeg安装
mongodb
注意!Ubuntu提供的
mongodb
包并非由MongoDB公司维护,并且与官方的mongodb-org
包有冲突。如果您已经在Ubuntu系统上安装了mongodb
包,那么在执行这些说明之前,必须先卸载mongodb
包。否则可能会出现难以预计的问题,导致mongodb无法正常运行。各操作系统mongodb官方安装教程:链接
配置和与运行node-stream
从github上下载
node-stream
源码$ git clone https://github.com/waleedahmad/node-stream修改配置文件
$ cd nodeStream && nano ./server/config/default.js几个重要配置说明:
server.secret
为服务器密钥,用于加密会话,建议修改。server.port
为网页客户端的端口。rtmp_server.trans.ffmepg
为ffmpeg
安装路径。Linux系统下,可以通过which ffmpeg
获得,默认情况应该是与原始配置相同的,无需更改。Windows系统,则需要手动修改为ffmepg
实际安装位置。
安装依赖,运行
node-stream
$ npm install$ npm run start{% codeblock node-stream/ %} $ npm install $ npm run start {% endcodeblock %}
访问网页端注册账户并获取串流密钥
访问
http:127.0.0.1:3333
注册帐号:注册完成后,进入 Go Live 页面,点击 Generate a new key 生成串流密钥。复制生成的串流密钥。
利用 OBS 直播串流
打开OBS > 设置 > 推流。服务器选项选择 自定义 ,服务器输入
rtmp://127.0.0.1:1935/live
串流密钥为上一步骤生成的密钥。接下就能在客户端首页看到直播列表,点击即可查看。
部署到树莓派上
要将 node-stream 部署到树莓派上,只要在树莓派上安装arm版本的nodejs,再同样按照上面的步骤就可以啦。但是,由于原版的 node-stream 只支持在localhost访问,所以局域网内的其他设备访问就会出现问题。所以笔者fork后针对原版进行了修改,修改的版本:emuqi/node-stream,只要直接在配置文件里将ip_addr
配置为树莓派在局域网的ip再运行直播服务就可以在局域网内访问node-stream了。其他更加详细的修改可以看下文。
针对node-stream进行改进
在使用原版的 node-stream 的过程在,发现其存在一些问题。
- 不支持自定义ip,只能在localhost运行。
- 虽然
node-stream/server/config/default.js
也就是配置文件中提供了很多参数,但是修改部分配置后会出现很多问题。比如修改直播服务的端口后,直播列表的预览图就会加载失败等。
因此,笔者在原版的基础上做了一些改动和修复,感兴趣的朋友可以使用笔者修改过后的版本emuqi/node-stream。使用方法与原版基本相同,主要修改如下:
添加直播服务自定义ip功能
可在配置中直接修改
ip_addr
,即可自定义ip。
const config = {
server: {
ip_addr: '127.0.0.1',
secret: 'kjVkuti2xAyF3JGCzSZTk0YWM5JhI9mgQW4rytXc',
port : 3333
},
...
}
修复更改直播服务端口会导致直播缩略图无法正常显示的Bug
更新项目readme