前言
虽然说我一直致力于推动Tkong又更多原创的内容,比如这篇文章,但作为仍然以媒体内容支撑的主体,多媒体的展示方式似乎更重要。
对于流的传输从hls(m3u8)到Flv 再到Rtmp,多种不同的格式和传输,不同的切片方式,但hls脱颖而出。因为hls可以聚集在任何设备播放,只要加载hls.js 即可
本篇文章将通过Docker部署来实现如下内容:
- Rtmp 推流
- Rtmp、hls 拉流
- 自动化清晰度和传输速率调整
- 对于流的管理防止盗播
部署
我所利用的伺服器作业系统为Ubuntu 20.0,但事实上能够运行Docker的设备均可运行,不过我们首先要挑选两个开放端口,分别对应Pull与Push。在下文中我选取了8080作为Pull 1935作为Push。
安装Docker 较新的版本
这里我推荐使用主流Linux或者Mac,Windows 某些设备的UFN默认关闭了虚拟化,在Windows运行Docker需要Hyper-v的打开。
在宝塔面板当中可以直接通过软件中心下载,这个是无所谓的。你也可以使用官方的命令下载。
(以下都是Ubuntu环境下的安装和命令,如果你是其他发行版,请在官网Docs中寻找答案。https://docs.docker.com/desktop/install/linux-install/)
sudo apt-get update
sudo apt-get install ./docker-desktop-<version>-<arch>.deb
systemctl --user start docker-desktop
systemctl --user enable docker-desktop
成功安装 Docker Desktop 后,您可以通过运行以下命令来检查这些二进制文件的版本:
$ docker compose version
Docker Compose version v2.18.1
$ docker --version
Docker version 24.0.2, build cb74dfc
$ docker version
Client: Docker Engine - Community
Version: 24.0.2
API version: 1.43
〈……〉
Pull Docker镜像并Run
docker pull alfg/nginx-rtmp
docker run -it -p 1935:1935 -p 8080:80 --rm alfg/nginx-rtmp
Docker 运行以后如何进程守护?
我相信您一定需要进程守护,因为您不可能一直打开并连接SSH,当然Windows或是MacOS等图形化界面可以略过,因为一直打开窗口做到进程守护,并不难办到。使用宝塔面板在面板中也自带了进程守护,您也可以直接略过本部分,前往端口映射和转发。
使用 Nohup
命令进行的 进程守护,虽然功能很单一但对于本项目是最简单快捷的方法。
$ nohup <你想守护的程序命令> &
#接下来按2次Enter即可打下一行命令了,这时候进程已经守护。
使用前的准备
实际上到这个时候RTMP/HLS服务器已经建立起来的,但我相信并不是所有人都希望通过IP+端口的方式直接让其他人访问。如果您完全按照本文章的设置进行的配置,目前RTMP的对外端口应该是1935,而HLS的对外端口是8080。您首先应该检查防火墙是否双向开放了这2个端口的TCP连接。
反向代理 的设置
如果您希望通过域名访问HLS,只需要使用Nginx自带的 反向代理 功能即可,当然宝塔面板中自带了这样设置的图形化界面。配置如下:
location ^~ /
{
proxy_pass http://localhost:8080/hls/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_http_version 1.1;
# proxy_hide_header Upgrade;
add_header X-Cache $upstream_cache_status;
#Set Nginx Cache
set $static_filebrGthse5 0;
if ( $uri ~* "\.(gif|png|jpg|css|js|woff|woff2)$" )
{
set $static_filebrGthse5 1;
expires 1m;
}
if ( $static_filebrGthse5 = 0 )
{
add_header Cache-Control no-cache;
}
}
推流的准备
您应该在推流的设备准备一个推流软体,无论是最普遍和开放的 OBS 还是 ffmpeg 都可。
开始使用
推流直播
推流的地址应该是:
rtmp://localhost:1935/stream/$STREAM_NAME
OBS 的设置应该是:
Stream Type: Custom Streaming Server
URL: rtmp://localhost:1935/stream
Stream Key: $STREAM_NAME
观看直播
在浏览器中加载示例 hls.js 播放器:
http://localhost:8080/player.html?url=http://localhost:8080/live/$STREAM_NAME.m3u8
或者在 Safari、VLC 或任何 HLS 播放器中,打开:
http://localhost:8080/live/$STREAM_NAME.m3u8
- 示例播放列表:
http://localhost:8080/live/
$STREAM_NAME
.m3u8 - FF播放:
ffplay -fflags nobuffer rtmp://localhost:1935/stream/
$STREAM_NAME