取自官方的项目介绍:NodeTube是YouTube的开源替代品,可提供视频,音频和图像上传,实时流媒体和内置获利功能。
官方没有详细的文档,自己部署的时候遇到很多坑,这里记录一下。另外吐槽一下这个程序的前端属实是有点简陋。不过反正能用,开源的嘛白嫖也不指望个啥。
系统debian10,安装nodejs10/mongodb/redis:
apt -y update apt -y install build-essential gnupg curl wget git curl -sL https://deb.nodesource.com/setup_10.x | bash - wget -qO - https://www.mongodb.org/static/pgp/server-4.2.asc | apt-key add - echo "deb http://repo.mongodb.org/apt/debian buster/mongodb-org/4.2 main" | tee /etc/apt/sources.list.d/mongodb-org-4.2.list apt -y update apt -y install nodejs mongodb-org redis-server
注意nodejs的版本只能是10,其他版本跑不起来或者跑起来有问题。
安装nginx/certbot,如果要直播支持还需要安装rtmp模块:
apt -y install nginx python-certbot-nginx libnginx-mod-rtmp
启动mongodb/redis,以及设置一下这些程序的开机自启:
systemctl start mongod redis
systemctl enable nginx mongod redis
现在拉取项目文件/安装依赖:
cd /opt git clone https://github.com/mayeaux/nodetube cd nodetube npm install
修改程序的配置文件:
nano .env.private
如下位置需要改动:
DOMAIN_NAME_AND_TLD='https://nodetube.imlala.best' INSTANCE_DOMAIN_NAME='nodetube.imlala.best'
如果你需要直播功能,还需要更改另一个配置文件:
nano .env.settings
其中要改动的位置如下:
LIVESTREAM_APP=true NODE_ENV='production' RUN_NGROK=false
修改目录/文件的所有者:
chown -R www-data:www-data /opt/nodetube
接着新建一个systemd服务文件:
nano /lib/systemd/system/nodetube.service
写入如下配置:
[Unit] Description=nodetube [Service] Type=simple User=www-data Group=www-data WorkingDirectory=/opt/nodetube ExecStart=/usr/bin/npm start Restart=always [Install] WantedBy=multi-user.target
启动以及设置开机自启:
systemctl start nodetube
systemctl enable nodetube
编辑nginx的主配置文件:
nano /etc/nginx/nginx.conf
在文件的末尾加入直播需要的rtmp配置:
rtmp { server { listen 1935; chunk_size 4096; application live { live on; on_publish http://127.0.0.1:3000/livestream/on-live-auth; on_publish_done http://127.0.0.1:3000/livestream/on-live-done; hls on; hls_path /opt/nodetube/hls; hls_fragment 10s; } } }
接着新建一个nginx站点配置文件用于反向代理:
nano /etc/nginx/conf.d/nodetube.conf
写入如下配:
server { listen 80; server_name nodetube.imlala.best; # 换成你的域名 client_max_body_size 0; root /opt/nodetube; location /uploads/ { gzip off; sendfile on; sendfile_max_chunk 1m; tcp_nopush on; try_files $uri @redirect; } location @redirect { proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location / { proxy_pass http://127.0.0.1:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
接下来用certbot签一个ssl证书:
certbot --nginx --agree-tos --no-eff-email --email xxxxx@qq.com
证书签好了之后,由于这个程序直播界面有一个基于websocket的聊天功能是用的自签证书,这里需要把我们的证书替换掉自签证书,否则聊天功能不能正常使用:
cd /opt/nodetube/keys mv server.crt server.crt.bak mv server.key server.key.bak cp /etc/letsencrypt/live/nodetube.imlala.best/fullchain.pem server.crt cp /etc/letsencrypt/live/nodetube.imlala.best/privkey.pem server.key
给予正确的文件所有者,否则程序运行的时候报错:
chown www-data:www-data server.crt chown www-data:www-data server.key
最后重启一下nodetube即可:
systemctl restart nodetube
打开你的域名.
第一个注册的用户自动成为管理员,直播功能,在MY ACCOUNT-Livestreaming.
OBS和FFMPEG推流的方法都在页面内有介绍,自己看着设置就行了。
--------------
一个极易部署的流媒体服务:Node-Media-Server
现在有很多自建流媒体服务器的方法,最常用的应该是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: 'abcdefg', play: false, publish: true, secret: 'x1x2x3x4x5vhvhkttid' },
这样做的话是让推流有一个鉴权验证,不做验证的话任何人知道你这个服务器的地址都能用你这台机器推流,这样会造成滥用。
改完之后退出容器并重启:
exit docker restart nms
如果上面的重启报错,回显类似什么iptables/DNAT啥的,就直接重启Docker服务吧:
systemctl restart docker
因为我们给推流做了一个鉴权验证,这个时候我们需要计算一下推流的地址,首先要定义一个推流地址过期的时间,这里我假设地址在2019年的7月1日过期,那么将时间戳换算成unix的类型:
date -d "2019-07-01 00:00:00" +%s
执行上述的命令后,得到的unix时间戳是:
1561939200
然后我们把时间戳和之前在app.js内配置的secret进行一次md5加密,格式如下:
echo -n "/live/test-1561939200-x1x2x3x4x5vhvhkttid" | 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
现在我们可以访问一下WEB面板看看推流是否正常:
http://vpsip:8000/admin/
这个媒体服务器支持很多种格式,像什么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
-----------------------------------------
Restreamer:免费的流媒体服务器
这个东西貌似主要用途是帮助你把网络摄像头的视频流快速传到Youtube等提供直播的平台,但它也内置了一个用NGINX实现的RTMP服务器,也可以拿来做普通的直播。
安装docker:
apt -y update apt -y install curl curl -sSL https://get.docker.com/ | sh systemctl start docker systemctl enable docker
然后使用下面的命令启动即可:
docker run -d --restart always \ --name restreamer \ -e "RS_USERNAME=admin" -e "RS_PASSWORD=cvbm" -e "RS_TOKEN=cvbm"\ -p 8080:8080 \ -p 1935:1935 \ -v /mnt/restreamer/db:/restreamer/db datarhei/restreamer:latest
其中RS_PASSWORD是WEB的密码,RS_TOKEN是推流的鉴权验证。
访问WEB面板:
http://your-device-ip:8080
输入你刚才启动容器时设置的账号密码登录.
----------------------------------
Owncast:一个人的直播间
owncast是一个单用户的直播工具,带有聊天功能。
程序转码需要用到ffmpeg,建议在一台性能稍好的VPS上安装,安装基本工具:
apt -y update apt -y install ffmpeg unzip nginx python-certbot-nginx supervisor systemctl start supervisor nginx systemctl enable supervisor nginx
下载解压二进制文件:
mkdir -p /opt/owncast && cd /opt/owncast wget https://github.com/owncast/owncast/releases/download/v0.0.2/owncast-linux-0.0.2.zip unzip owncast-linux-0.0.2.zip
新建配置文件:
nano config.yaml
写入如下配置:
ffmpegPath: /usr/bin/ffmpeg webServerPort: 8080 instanceDetails: name: imlala title: MapleStory Solo Lotus summary: "Welcome" extraUserInfoFileName: "/static/content.md" logo: small: /img/logo128.png large: /img/logo256.png tags: - game - music - tech socialHandles: - platform: github url: http://github.com/owncast/owncast - platform: mastodon url: http://mastodon.something/owncast videoSettings: chunkLengthInSeconds: 5 streamingKey: password offlineContent: static/offline.m4v streamQualities: - low: videoBitrate: 400 scaledWidth: 600 audioPassthrough: true encoderPreset: veryfast - medium: videoBitrate: 800 encoderPreset: fast - high: videoBitrate: 2000 encoderPreset: faster
如果你只想开箱即用的话,修改streamingKey后面的值即可,这是你的直播密码。
其他的配置可参考如下地址的说明:
https://owncast.online/docs/configuration/
接下来新建一个supervisor配置文件用于守护owncast的进程:
nano /etc/supervisor/conf.d/owncast.conf
写入如下配置:
[program:owncast] priority=1 directory=/opt/owncast command=/opt/owncast/owncast autostart=true autorestart=true redirect_stderr=true stdout_logfile=/var/log/supervisor/owncast.log
更新supervisor配置即可启动owncast:
supervisorctl update
接下来新建nginx站点配置文件用于反向代理:
nano /etc/nginx/conf.d/owncast.conf
写入如下配置:
server { listen 80; server_name owncast.imlala.best; location / { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; } }
使用certbot签一个ssl证书:
certbot --nginx --agree-tos --no-eff-email --email example@qq.com
推流地址:
rtmp://owncast.imlala.best/live
流名称就是你在config.yaml内设置的streamingKey密码。
---------------
相关帖子:https://briteming.blogspot.com/2016/09/nginx.html
No comments:
Post a Comment