实时视频流媒体非常受欢迎,而且还在不断增长。像亚马逊的 Twitch 和谷歌的 YouTube 这样的平台拥有数百万用户,他们直播和消费无数小时的直播和录制媒体。这些服务通常可以免费使用,但需要你拥有一个帐户,并且通常会将你的内容放在广告后面。有些人不需要他们的视频面向大众,或者只是想要更多地控制他们的内容。值得庆幸的是,借助开源软件的力量,任何人都可以设置直播流媒体服务器。
开始
在本教程中,我将解释如何在 Linux 或 BSD 操作系统上设置一个基本的直播流媒体服务器。
这引出了系统要求的必然问题。这些要求可能会有所不同,因为直播流媒体涉及很多变量,例如
- 流媒体质量: 你想以高清方式播放,还是标清就能满足你的需求?
- 观众人数: 你预计你的视频有多少观众?
- 存储: 你是否计划保存视频流的副本?
- 访问: 你的流媒体是私密的还是向全世界开放的?
系统要求没有固定的规则,所以我建议你进行实验,找到最适合你需求的方式。我将服务器安装在一台虚拟机上,虚拟机有 4GB 内存、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 服务器
如果你是 “beastie” 的拥护者,那么启动并运行流媒体服务器也非常容易。
前往 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 没有捕获任何内容,因为你没有提供源。在本教程中,你只需捕获你的桌面以进行流式传输。只需单击 Source 下的 + 按钮,选择 Screen Capture,然后选择你要捕获的桌面。
单击“确定”,你应该会看到 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 条评论