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

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

Opensource.com

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

开始入门

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

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

  • 流媒体质量:您想以高清流式传输,还是标清就可以满足您的需求?
  • 观看人数:您预计您的视频有多少观众?
  • 存储:您是否计划保留视频流的已保存副本?
  • 访问权限:您的流媒体是私有的还是向全世界开放?

关于系统要求没有固定的规则,所以我建议您进行实验,找到最适合您需求的方法。 我将我的服务器安装在虚拟机上,该虚拟机具有 4GB RAM、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 拥有的出色端口系统来构建 Nginx。

首先,更新您的端口树

portsnap fetch
portsnap extract

浏览到 Nginx 端口目录

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

接下来,创建一个 Web 根目录,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 部分下,将 Web 根位置更改为与您之前创建的位置匹配的位置

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 没有捕获任何内容,因为您没有为其提供源。 对于本教程,您只需捕获桌面用于流媒体。 只需单击 下的 + 按钮,选择 屏幕捕获,然后选择您要捕获的桌面。

单击“确定”,您应该会看到 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 下的 + > 媒体源 > 创建新的 > 取消选中本地文件 > 在输入下粘贴您的 ipcam 的完整 RSTP 流,来添加另一个 RTSP 流作为媒体源。

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

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

谢谢您的回复! Ant Media Server 非常棒,我绝对会将其推荐给正在寻找简单、交钥匙设置的人。

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

感谢演练

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

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

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

嘿 Araon 感谢您撰写这篇文章..我想知道我是否可以从不同的 PC(客户端)访问存储在我的服务器上的文件,并且两个系统都通过 lan 连接..

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

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

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

© . All rights reserved.