直播视频流非常受欢迎,并且还在持续增长。像 Amazon 的 Twitch 和 Google 的 YouTube 这样的平台拥有数百万用户,他们流式传输和观看无数小时的直播和录制媒体。这些服务通常是免费使用的,但需要您拥有一个帐户,并且通常在广告后展示您的内容。有些人不需要他们的视频向大众公开,或者只是想要更多地控制他们的内容。值得庆幸的是,借助开源软件的力量,任何人都可以设置直播流服务器。
入门
在本教程中,我将解释如何使用 Linux 或 BSD 操作系统设置一个基本的直播流服务器。
这就引出了一个不可避免的问题,即系统要求。这些要求可能会有所不同,因为直播流涉及很多变量,例如
- 流质量:您想要以高清流式传输还是标清就能满足您的需求?
- 观众人数:您预计您的视频有多少观众?
- 存储:您是否计划保留视频流的保存副本?
- 访问:您的流是私有的还是向全世界开放的?
系统要求没有固定的规则,所以我建议您进行实验,找到最适合您需求的方案。我在一台虚拟机上安装了我的服务器,虚拟机具有 4GB RAM、20GB 硬盘和一个 Intel i7 处理器核心。
本项目使用实时消息协议 (RTMP) 来处理音频和视频流。还有其他可用的协议,但我选择 RTMP 是因为它具有广泛的支持。随着像 WebRTC 这样的开放标准变得更兼容,我建议您选择这条路线。
非常重要的是要知道,“直播”并不总是意味着即时。视频流必须经过编码、传输、缓冲和显示,这通常会增加延迟。延迟可以根据您创建的流类型及其属性进行缩短或延长。
设置 Linux 服务器
您可以使用许多不同的 Linux 发行版,但我更喜欢 Ubuntu,所以我下载了 Ubuntu Server 版本作为我的操作系统。如果您希望您的服务器具有图形用户界面 (GUI),请随意使用 Ubuntu Desktop 或其众多版本之一。然后,我在我的计算机或虚拟机上启动了 Ubuntu 安装程序,并选择了最适合我环境的设置。以下是我采取的步骤。
注意:因为这是一个服务器,您可能想要设置一些静态网络设置。

安装程序完成后,您的系统重启,您将看到一个全新的 Ubuntu 系统。与任何新安装的操作系统一样,安装任何可用的更新
sudo apt update
sudo apt upgrade
此流媒体服务器将使用非常强大且通用的 Nginx Web 服务器,因此您需要安装它
sudo apt install nginx
然后您需要获取 RTMP 模块,以便 Nginx 可以处理您的媒体流
sudo add-apt-repository universe
sudo apt install libnginx-mod-rtmp
调整您的 Web 服务器配置,以便它可以接受和传递您的媒体流。
sudo nano /etc/nginx/nginx.conf
滚动到配置文件的底部,并添加以下代码
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
record off;
}
}
}

保存配置。因为我是一个异端,所以我使用 Nano 来编辑配置文件。在 Nano 中,您可以通过按 Ctrl+X,Y,然后按 Enter 来保存您的配置。
这是一个非常简洁的配置,它将创建一个可工作的流媒体服务器。您稍后会添加到此配置,但这是一个很好的起点。
但是,在您可以开始您的第一个流之前,您需要使用其新配置重启 Nginx
sudo systemctl restart nginx
设置 BSD 服务器
如果您是“小野兽”的偏好者,那么启动并运行流媒体服务器也非常容易。
前往 FreeBSD 网站并下载最新版本。在您的计算机或虚拟机上启动 FreeBSD 安装程序,并完成初始步骤,并选择最适合您环境的设置。由于这是一个服务器,您很可能想要设置一些静态网络设置。
安装程序完成后,您的系统重启,您应该会有一个闪亮的新 FreeBSD 系统。像任何其他新安装的系统一样,您很可能想要更新所有内容(从这一步开始,请确保您以 root 用户身份登录)
pkg update
pkg upgrade
我安装了 Nano 来编辑配置文件
pkg install nano
此流媒体服务器将使用非常强大且通用的 Nginx Web 服务器。您可以使用 FreeBSD 拥有的出色ports系统来构建 Nginx。
首先,更新您的 ports 树
portsnap fetch
portsnap extract
浏览到 Nginx ports 目录
cd /usr/ports/www/nginx
然后通过运行以下命令开始构建 Nginx
make install
您将看到一个屏幕,询问要在 Nginx 构建中包含哪些模块。对于本项目,您需要添加 RTMP 模块。向下滚动直到 RTMP 模块被选中,然后按 空格键。然后按 Enter 继续其余的构建和安装。
一旦 Nginx 完成安装,就该为流媒体目的配置它了。
首先,在 /etc/rc.conf 中添加一个条目,以确保 Nginx 服务器在您的系统启动时启动
nano /etc/rc.conf
将此文本添加到文件中
nginx_enable="YES"

接下来,创建一个 webroot 目录,Nginx 将从那里提供其内容。我称我的目录为 stream
cd /usr/local/www/
mkdir stream
chmod -R 755 stream/
现在您已经创建了您的 stream 目录,通过编辑其配置文件来配置 Nginx
nano /usr/local/etc/nginx/nginx.conf
在文件顶部加载您的流媒体模块
load_module /usr/local/libexec/nginx/ngx_stream_module.so;
load_module /usr/local/libexec/nginx/ngx_rtmp_module.so;

在 Server 部分下,更改 webroot 位置以匹配您之前创建的位置
Location / {
root /usr/local/www/stream
}

最后,添加您的 RTMP 设置,以便 Nginx 知道如何处理您的媒体流
rtmp {
server {
listen 1935;
chunk_size 4096;
application live {
live on;
record off;
}
}
}
保存配置。在 Nano 中,您可以通过按 Ctrl+X,Y,然后按 Enter 来完成此操作。
如您所见,这是一个非常简洁的配置,它将创建一个可工作的流媒体服务器。稍后,您将添加到此配置,但这将为您提供一个很好的起点。
但是,在您可以开始您的第一个流之前,您需要使用其新配置重启 Nginx
service nginx restart
设置您的流媒体软件
使用 OBS 广播
现在您的服务器已准备好接受您的视频流,是时候设置您的流媒体软件了。本教程使用功能强大且开源的 Open Broadcast Studio (OBS)。
前往 OBS 网站,找到适合您操作系统的版本并安装它。一旦 OBS 启动,您应该会看到一个首次运行向导,它将帮助您使用最适合您硬件的设置来配置 OBS。

OBS 没有捕获任何内容,因为您没有为其提供源。在本教程中,您将只捕获您的桌面用于流。只需单击源下的 + 按钮,选择 屏幕捕获,然后选择您要捕获的桌面。
单击“确定”,您应该会看到 OBS 镜像您的桌面。
现在是时候将您新配置的视频流发送到您的服务器了。在 OBS 中,单击 文件 > 设置。单击 流 部分,并将 流类型 设置为 自定义流媒体服务器。
在 URL 框中,输入前缀 rtmp://,后跟您的流媒体服务器的 IP 地址,再后跟 /live。例如,rtmp://IP-ADDRESS/live。
接下来,您可能想要输入一个流密钥——查看您的流所需的特殊标识符。在 流密钥 框中输入您想要的任何密钥(并且可以记住)。

单击 应用,然后单击 确定。
现在 OBS 已配置为将您的流发送到您的服务器,您可以开始您的第一个流。单击 开始流式传输。
如果一切正常,您应该会看到按钮变为 停止流式传输,并且一些带宽指标将出现在 OBS 底部。

如果您收到错误,请仔细检查 OBS 中的流设置是否有拼写错误。如果一切看起来都很好,则可能存在另一个阻止其工作的问题。
查看您的流
如果没有人观看,直播视频就没什么用处,所以成为您的第一个观众!
有大量的开源媒体播放器支持 RTMP,但最著名的可能是 VLC 媒体播放器。
在您安装并启动 VLC 后,通过单击 媒体 > 打开网络流 来打开您的流。输入您的流路径,添加您在 OBS 中设置的流密钥,然后单击 播放。例如,rtmp://IP-ADDRESS/live/SECRET-KEY。
您现在应该正在观看您自己的直播视频流!

接下来去哪里?
这是一个非常简单的设置,它将帮助您入门。以下是您可能想要使用的其他两个功能。
-
限制访问:您可能想要采取的下一步是限制对您的服务器的访问,因为默认设置允许任何人向服务器流式传输和从服务器流式传输。有多种设置方法,例如操作系统防火墙、.htaccess 文件,甚至使用 RTMP 模块中的内置访问控制。
-
录制流:这个简单的 Nginx 配置只会流式传输,而不会保存您的视频,但这很容易添加。在 Nginx 配置中,在 RTMP 部分下,设置录制选项和您想要保存视频的位置。确保您设置的路径存在,并且 Nginx 能够写入它。
application live {
live on;
record all;
record_path /var/www/html/recordings;
record_unique on;
}
直播流的世界在不断发展,如果您对更高级的用途感兴趣,您可以在互联网上找到许多其他很棒的资源。祝您好运,直播愉快!
17 条评论