Need help? Chat now!

Hostwinds 教程

寻找结果为:


目录


什么是RTMP?
安装
安装依赖项
下载软件
编译软件
组态
多种应用
权限
重新编码
推向其他服务
HLS
HLS播放
SSL协议
其他配置
流媒体

使用Nginx + RTMP从VPS进行实时流式传输

标签: VPS 

什么是RTMP?
安装
安装依赖项
下载软件
编译软件
组态
多种应用
权限
重新编码
推向其他服务
HLS
HLS播放
SSL协议
其他配置
流媒体

无论您想要一个服务器是否充当继电器,您能够一次性地传输到多个服务,请将视频流重新编码为不同的格式,分辨率或比特率,或从预先录制的视频中流,是一种很好的方法 这样做是使用运行nginx编译的服务器 RTMP模块.

直播使用大量带宽。 确切的带宽用于流的数量,以及它们的比特率。

减少视频编码的比特率可以降低视频质量成本的带宽使用。

什么是RTMP?

RTMP代表 实时消息通讯协议 并且是许多服务(例如YouTube,Twitch等)使用(或至少提供)在线播放视频的一种常见的标准化方式。

安装

本指南使用CentOS 7作为服务器的操作系统。

nginx + RTMP可以在其他Linux发行版上配置,并使用其他分布的包管理器和默认文件路径遵循相同的说明。

安装依赖项

更新您的系统

yum update -y

安装CentOS开发工具

yum groupinstall -y 'Development Tools

安装EPEL储存库

yum install -y epel-release

安装依赖

yum install -y wget git unzip perl perl-devel perl-ExtUtils-Embed libxslt libxslt-devel libxml2 libxml2-devel gd gd-devel PCRE-devel GeoIP GeoIP-devel

添加ffmpeg GPG密钥,然后安装ffmpeg

rpm -v --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm
yum install -y ffmpeg ffmpeg-devel

下载软件

创建或转到工作目录

cd /usr/local/src/

从获取最新版本的Nginx 这里

wget https://nginx.org/download/nginx-1.17.0.tar.gz
tar -xzvf nginx-1.17.0.tar.gz

从中克隆Nginx RTMP模块 这里

git clone https://github.com/sergey-dryabzhinsky/nginx-rtmp-module.git

删除不需要的tar文件

rm -f *.tar.gz

编译软件

移至下载的Nginx文件夹

cd nginx-1.17.0/

运行配置脚本以添加SSL和RTMP模块
必要时更新--Add-module文件路径,指向克隆nginx-rtmp-module的位置

./configure --with-http_ssl_module --add-module=../nginx-rtmp-module

编译Nginx

make

安装Nginx

make install

启动并启用Nginx

systemctl start nginx
systemctl enable nginx

组态

要配置RTMP服务,您需要将RTMP部分添加到Nginx配置文件中,默认情况下应该是/etc/nginx/nginx.conf。

将RTMP部分添加到conf文件中,如下所示:

rtmp {
server {
listen 1935; # Listen on standard RTMP port
chunk_size 4096;
    # Sample RTMP Application
    application live {
        live on;    # Enable listening for live streams to this application
        record off; # Do not record the stream
        meta copy;  # Copy the incoming metadata for the outgoing metadata
    }
}
}

在该配置中,我们告诉服务器侦听端口1935上的任何请求(RTMP的默认端口),并指定一个名为"Live"的应用程序以接受我们的流。

此配置足以使服务器接受流,但是您可以为其他功能设置其他配置。

然后,当您流时,您将作为RTMP:// server_address /应用程序设置您的目的地,其中server_address是您的服务器的IP或域地址,并且应用程序是您在nginx配置中配置的应用程序的名称(在此示例中为"Live")。

例: rtmp://127.0.0.1/live

多种应用

在服务器{}块中,您可以根据需要配置任意数量的应用程序。 唯一的限制是每个应用程序必须具有唯一的名称。

权限

您可以指定IPS可以将其流传输到服务器的权限以及IPS可以从此服务器播放流。

要添加权限规则,请在服务器{}或应用程序{}块中添加一行:

使用"允许"或"deny"指定规则是允许或拒绝指定源的连接。

使用"publish"指定源位置可以将其流流到此服务器。使用"play"指定源位置可以从此服务器播放流。

使用"全部"作为位置作为连接到此服务器的任何地址的捕获量。否则,您可以设置特定的IP地址。

将权限规则置于服务器{}块中,使统治全局在所有应用程序上。 将权限规则置于应用程序{}块中仅将规则应用于该应用程序。

例子:

允许127.0.0.1流到此服务器,但拒绝其他任何来源:

allow publish 127.0.0.1;
deny publish all;

允许播放除127.0.0.1以外的所有源:

allow play all;
deny play 127.0.0.1;

重新编码

您可以使用应用程序{}块中的EXEC语句来执行命令。 使用此方法,您可以将接收的RTMP流传递给视频处理器,例如FFMPEG,用于编码。

例: 将接收到的流编码为mp4格式并将其另存为文件

exec ffmpeg -i rtmp://localhost/$app/$name -c copy -f mp4 /path/to/file/$name.mp4;

推向其他服务

只需使用PUSH语句即可将流从应用程序从应用程序推送到另一个接收者。

例如,您可以将以下语句添加到任何应用程序{}块,以将所接收的流推动到抽搐,使用其中一个 提取地址 (在这种情况下,西雅图地址)。 只需将{stream_key}替换为Twitch Stream键。

push rtmp://live-sea.twitch.tv/app/{stream_key};

您可以为提供RTMP摄取地址的任何其他平台对您可以执行相同的操作,您可以流播放,甚至可以列出多个推送语句,以便允许立属流传到多个平台。

HLS

HLS,或 HTTP实时流,是一种相当流行的格式,用于通过HTTP和HTTPS协议流传输视频,使得将流嵌入网页方面明显更容易。

要启用HLS,只需将以下语句添加到您的任何应用程序{}块中。

hls on;
hls_path /mnt/hls/$app;
hls_fragment 2s;
hls_playlist_length 4s;

然后通过运行命令确保HLS_PATH目录存在:

mkdir -p /mnt/has/live

您可以将/ mnt / hls / $ app更改为您想要的任何文件夹路径。$应用程序将替换为应用程序的名称(在这种情况下,"Live")。
这将是HLS .m3u8文件将保存到的位置。

您还可以调整HLS_FRagement和HLS_PLAYLIST_LENGTH值以满足您的需求。
2S和4S是我们发现使用2秒的关键帧间隔时最佳工作的值。

然后,您还需要将HTTP {}块添加到NGINX配置中。 此块应该是顶级块,与现有RTMP {}块相同。 这个新块应如下:

HTTP {
# Disable server tokens
server_tokens off;
# Include MIME types
include mime.types;

# Set timeout limit
keepalive\_timeout 65;

server {
    listen 80;      # HTTP IPv4
    listen \[::\]:80; # HTTP IPv6
    server\_name example.com www.example.com # Your domain (RECOMMENDED BUT OPTIONAL)

    location / {
        # Disable cache
        add\_header Cache-Control no-cache;

        # Enable CORS
        add\_header 'Access-Control-Allow-Origin' '\*' always;
        add\_header 'Access-Control-Expose-Headers' 'Content-Length';

        # Allow CORS preflight requests
        if ($request\_method = 'OPTIONS') {
            add\_header 'Access-Control-Allow-Origin' '\*';
            add\_header 'Access-Control-Max-Age' 1728000;
            add\_header 'Content-Type' 'text/plain charset=UTF-8';
            add\_header 'Content-Length' 0;
            return 204;
        }

        # Specify file type to be served (.m3u8)
        types {
            application/vnd.apple.mpegurl m3u8;
            video/mp2t;
        }

        # File location
        # Set to the same hls\_path specified in the rtmp application
        root /mnt/hls;
    }
}
}

您可以将侦听到语句中列出的端口更改为您要为视频服务的任何端口。 如果您确实将端口从标准的HTTP / S端口(80&443)更改(80&443),那么您需要在服务器地址以以下格式指定端口:http:// {server_address}:{port}。

示例:http://example.com:8080/

之后,通过运行命令将这些更改保存到nginx配置文件,重新启动nginx:

systemctl restart nginx

HLS播放

启用HLS后,您现在可以使用任何支持HLS播放的视频播放器将流嵌入到网页中,例如 Video.JS 要么 PlayerJS.

您将以以下格式提供源地址的播放器:

HTTP://{server_address}/{app_name}/{secret_key}.m3u8

{server_address}将是您服务器的IP或域,{app_name}将是应用程序{}块的名称,您正在流传输到,{secret_key}将是您在流软件中设置的秘密密钥(例如OBS )。

例:

http://example.com/live/secret_key.m3u8

SSL协议

您也可以通过HTTPS提供HLS。 为此,您需要在服务器{}块中提供SSL证书和私钥,其中包含以下语句:

ssl_certificate /path/to/certificate.pem;
ssl_certificate_key /path/to/privkey.pem;

证书必须是您在server_name语句中指定的域。

然后,您还需要编辑/添加侦听到语句以侦听端口443(HTTPS端口)和可选择强制使用SSL。 倾听的陈述应如下:

listen 80 SSL; # HTTP IPv4; force SSL
listen [::]:80 SSL; # HTTP IPv6; force SSL
listen 443 SSL; # HTTPS IPv4; force SSL
listen [::]:443 SSL; # HTTPS IPv6; force SSL

如果您的域没有SSL证书,则可以使用 让我们加密以获得免费证书.

其他配置

您可以添加许多其他配置语句来扩展Nginx配置的RTMP模块的功能。

可以找到有关您可以添加和配置的内容的完整文档。 这里.

流媒体

配置了服务器后,您可以从支持流传输到RTMP地址的任何视频流软件流。您可以考虑使用 OBS 非常强大,有插件支持,很受了一个大的社区,并开放。

要将其送到您的服务器,您必须执行的只是将流目标设置为服务器的地址,并设置私钥。服务器地址的格式应如下:

RTMP://{server_address}/{app_name}

{server_address}是您的IP或域,您已设置为指向此服务器。{app_name}是您在nginx配置中设置的应用程序{}块的名称。在从上面的示例配置之后,该应用程序名称将是"直播"。

提供唯一的秘密密钥将确保流是唯一的,即使其他源是流到相同的应用程序也是如此。

在上面的示例之后,该流将生存在RTMP://example.com/live/secret_key,您可以使用任何可以打开RTMP流的任何视频播放,例如 VLC.

撰写者 Hostwinds Team  /  六月 18, 2019