使用 Linux 创建你自己的视频流媒体服务器

在 Linux 或 BSD 操作系统上设置一个基本的直播流媒体服务器。
315 位读者喜欢这篇文章。
hot keys for shortcuts or features on computer keyboard

Opensource.com

实时视频流媒体非常受欢迎,而且还在不断增长。像亚马逊的 Twitch 和谷歌的 YouTube 这样的平台拥有数百万用户,他们直播和消费无数小时的直播和录制媒体。这些服务通常可以免费使用,但需要你拥有一个帐户,并且通常会将你的内容放在广告后面。有些人不需要他们的视频面向大众,或者只是想要更多地控制他们的内容。值得庆幸的是,借助开源软件的力量,任何人都可以设置直播流媒体服务器。

开始

在本教程中,我将解释如何在 Linux 或 BSD 操作系统上设置一个基本的直播流媒体服务器。

这引出了系统要求的必然问题。这些要求可能会有所不同,因为直播流媒体涉及很多变量,例如

  • 流媒体质量: 你想以高清方式播放,还是标清就能满足你的需求?
  • 观众人数: 你预计你的视频有多少观众?
  • 存储: 你是否计划保存视频流的副本?
  • 访问: 你的流媒体是私密的还是向全世界开放的?

系统要求没有固定的规则,所以我建议你进行实验,找到最适合你需求的方式。我将服务器安装在一台虚拟机上,虚拟机有 4GB 内存、20GB 硬盘和一个 Intel i7 处理器核心。

这个项目使用实时消息协议 (RTMP) 来处理音频和视频流。还有其他协议可用,但我选择 RTMP 是因为它具有广泛的支持。随着像 WebRTC 这样的开放标准变得更加兼容,我建议选择这条路线。

同样重要的是要知道,“直播”并不总是意味着即时。视频流必须经过编码、传输、缓冲和显示,这通常会增加延迟。延迟可以根据你创建的流的类型及其属性来缩短或延长。

设置 Linux 服务器

你可以使用许多不同的 Linux 发行版,但我更喜欢 Ubuntu,所以我下载了 Ubuntu Server 版本作为我的操作系统。如果你希望你的服务器具有图形用户界面 (GUI),请随意使用 Ubuntu Desktop 或它的许多变种之一。然后,我在我的电脑或虚拟机上启动了 Ubuntu 安装程序,并选择了最适合我的环境的设置。下面是我采取的步骤。

注意:因为这是一个服务器,你可能需要设置一些静态网络设置。

Ubuntu profile setup

安装程序完成后,你的系统重启后,你将看到一个可爱的新 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;
                }
        }
}

Nginx configuration

保存配置。因为我是一个异教徒,所以我使用 Nano 来编辑配置文件。在 Nano 中,你可以通过按 Ctrl+XY,然后按 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"

Nginx configuration

接下来,创建一个 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;

Loading streaming modules

Server 部分下,更改 Webroot 位置以匹配你之前创建的位置

Location / {
root /usr/local/www/stream
}

Changing webroot location

最后,添加你的 RTMP 设置,以便 Nginx 知道如何处理你的媒体流

rtmp {
        server {
                listen 1935;
                chunk_size 4096;

                application live {
                        live on;
                        record off;
                }
        }
}

保存配置。在 Nano 中,你可以通过按 Ctrl+XY,然后按 Enter 来完成此操作。

正如你所看到的,这是一个非常小的配置,它将创建一个可以正常工作的流媒体服务器。稍后,你将添加到这个配置中,但这将为你提供一个很好的起点。

但是,在你开始你的第一个流之前,你需要使用它的新配置来重启 Nginx

service nginx restart

设置你的流媒体软件

使用 OBS 广播

现在你的服务器已准备好接受你的视频流,现在该设置你的流媒体软件了。本教程使用强大且开源的 Open Broadcast Studio (OBS)。

前往 OBS 网站 并找到适合你的操作系统的版本并安装它。一旦 OBS 启动,你应该会看到一个首次运行向导,它将帮助你使用最适合你的硬件的设置来配置 OBS。

OBS auto-configuration wizard

OBS 没有捕获任何内容,因为你没有提供源。在本教程中,你只需捕获你的桌面以进行流式传输。只需单击 Source 下的 + 按钮,选择 Screen Capture,然后选择你要捕获的桌面。

单击“确定”,你应该会看到 OBS 正在镜像你的桌面。

现在是将你新配置的视频流发送到你的服务器的时候了。在 OBS 中,单击 文件 > 设置。单击 部分,并将 流类型 设置为 自定义流媒体服务器

在 URL 框中,输入前缀 rtmp://,然后输入你的流媒体服务器的 IP 地址,后跟 /live。例如,rtmp://IP-ADDRESS/live

接下来,你可能想要输入一个流密钥——查看你的流所需的特殊标识符。在 流密钥 框中输入你想要的任何密钥(并且可以记住)。

Stream key setup

单击 应用,然后单击 确定

现在 OBS 已配置为将你的流发送到你的服务器,你可以开始你的第一个流了。单击 开始流式传输

如果一切正常,你应该看到该按钮更改为 停止流式传输,并且一些带宽指标将出现在 OBS 的底部。

OBS stream metrics

如果你收到错误,请仔细检查 OBS 中的流设置是否存在拼写错误。如果一切看起来都不错,则可能存在阻止其工作的其他问题。

查看你的流

如果没有人观看,实时视频就没有多大用处,所以做你的第一个观众!

有许多支持 RTMP 的开源媒体播放器,但最著名​​的可能是 VLC 媒体播放器

安装并启动 VLC 后,通过单击 媒体 > 打开网络流 来打开你的流。输入你的流的路径,添加你在 OBS 中设置的流密钥,然后单击 播放。例如,rtmp://IP-ADDRESS/live/SECRET-KEY

你现在应该正在观看你自己的实时视频流!

Live video in VLC

接下来去哪里?

这是一个非常简单的设置,可以让你开始行动。以下是你可能想要使用的另外两个功能。

  • 限制访问: 下一步您可能需要限制对您服务器的访问,因为默认设置允许任何人向服务器进行流式传输和从服务器进行流式传输。有很多方法可以设置这个,比如使用操作系统防火墙,.htaccess 文件,或者甚至可以使用 RTMP 模块中内置的访问控制

  • 录制流: 这个简单的 Nginx 配置只会进行流式传输,不会保存您的视频,但添加保存功能很容易。在 Nginx 配置中,在 RTMP 部分下,设置录制选项和您想要保存视频的位置。确保您设置的路径存在,并且 Nginx 能够写入该路径。

application live {
             live on;
             record all;
             record_path /var/www/html/recordings;
             record_unique on;
}

直播的世界在不断发展,如果您对更高级的用法感兴趣,您可以找到许多其他的资源。祝你好运,直播愉快!

User profile image.
学校 IT 主管 - 开源布道者 - 技术爱好者 - 丈夫 - 爸爸

17 条评论

很棒的自行设置指南。

如果这个问题很明显,请见谅。但这是我第一次设置媒体服务器。我正在使用 VirtualBox 来测试服务。但是你在哪里创建应用程序“live”?此外,如果您有一个包含音乐、视频、图片的 HDD,它将如何连接到该硬盘?

嘿 Stephen,
将“live”看作仅仅是一个容器,您的流将位于其中。
您可以将其更改为“vid”或“app”,它只会更改您必须指向的 URL。
示例:rtmp://server/app/STREAM-KEY

您想要显示的内容将在运行 OBS 的计算机上。在这种设置中,服务器只是充当 OBS 发送的视频的放大器。

希望这有助于澄清一点。

回复 ,作者:Stephen Melheim (未验证)

很棒的指南 Aaron,
有点跑题了,但你能否为我指出一个合适的资源/视频/指南,以便远程访问 VM。
我在 Google Cloud 上创建了一个,但无法访问,因为点击 SSH 会打开命令行。
非常感谢!

嘿 Himesh,
我对在 Google 平台上创建 VM 不是特别熟悉。因为它是一个远程服务器,您可能需要使用 SSH 才能连接和管理它。

你能详细说明你想要做什么吗?

回复 ,作者:Himesh (未验证)

防火墙在哪里设置?

如何让这个服务器获取 ipcam 视频并允许流式传输?
我有一个前门装有 ipcam,它一次只允许 1 个观看者,我想从任何地方使用这个 linux 服务器查看它,并允许多个人同时流式传输

我不确定 ipcam 的工作方式,但如果您通过 IP 地址查看摄像头,您只需要在 OBS 软件中使用浏览器捕获。

回复 ,作者:Alexander Brown (未验证)

在 OBS 上,您可以通过点击 SOURCES 下面的 + > Media Source > Create New > 取消选中 Local File > 在 Input 下,粘贴您的 ipcam 的完整 RSTP 流,来添加另一个 RTSP 流作为媒体源。

我做了类似的事情来做分屏游戏直播,我和朋友的直播并排显示。

回复 ,作者:Alexander Brown (未验证)

谢谢你的回复!Ant Media Server 非常棒,我肯定会向那些寻找简单、交钥匙设置的人推荐它。

回复 ,作者:Ant Media Server (未验证)

谢谢你的演练

nginx 是否提供时间平移功能,即当您按下左箭头时,倒退 x 秒?如果没有,您能推荐一种方法来做到这一点吗?
谢谢

据我所知,它本身并不提供。您需要某种能够缓存播放流的播放器。

回复 ,作者:Alex P (未验证)

嘿 Araon 感谢你写这篇文章..我想知道我是否能够从不同的 PC(客户端)访问存储在我的 SERVER 上的文件,并且这两个系统通过局域网连接..

当然可以。首先,您需要在流服务器上设置 SSH,然后授予您想要访问该录制目录的用户的权限。完成所有设置后,您可以 SSH 进入并访问这些文件。

如果您的客户端是 Windows 机器,您可以使用 WinSCP。

回复 ,作者:Rahul Dhiman (未验证)

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.