使用免费的媒体服务器和控制面板从单一 RTMP 到自适应流媒体

Single RTMP to adaptative streaming with a free media server and control panel

这就是我现在正在做的事情:

我正在发送一个带有 teradek vidiu 的直播电视频道,该频道通过 RTMP 将视频发送到带有 nimble streamer 服务器的 AWS EC2 实例,几个月前使用 wmspanel 配置(在试用期)。灵活的服务器转码 rtmp 并给了我一个 HLS (m3u8),我用 peer5 (jwplayer) 在网页上播放。这样做的问题是直播视频只有高清,低速连接的客户端看不到视频,或者有时会卡顿。

我想要的:

我想要一个每个人都可以连接的自适应流,低速观看比特率较低的视频,高速观看高清视频。我知道我可以用 wowza 和其他服务器来做到这一点,问题是价格,我想要一个带有免费控制面板的免费服务器。 Nimble 服务器是免费的,但 wmspanel 不是,现在我无法更改或对 nimble 做任何事情,因为 wmspanel 的试用期已经结束!

请帮帮我!

您所要求的一切都可以使用 nginx, the nginx-rtmp module and ffmpeg 完成,所有软件都是免费的。我有一个类似于你的设置(BlackMagic H264 Pro 而不是 Teradek,但其他方面相同)传输几个电视频道。

唯一的问题是你需要自己用rtmp模块编译nginx,如果你需要某种控制面板,你必须自己写。

我的设置是这样的:

1.- 连接到实时切换器的本地服务器上的 BM H264 Pro 将高清流发送到 Fedora 23 的 EC2 实例。

2.- Nginx-rtmp 获取输入并调用 ffmpeg 以创建六个不同的 HLS 实时流(180p、240p、360p、480p、720p、1080p),然后通过 CloudFront CDN 提供这些流以确保速度。

它工作得非常好,我没有遇到任何问题,CloudFront 直接从 EC2 实例获取流,速度惊人。您确实需要一个相当强大的实例(我使用 m4.4xlarge)来进行并行编码。

使用 PHP(或实际上任何其他语言,为此我喜欢 PHP),您可以拥有控制面板和其他细节。例如,我使用此设置跟踪所有视图、暂停、执行一些 geoIP 和其他指标。

--------8 月 4 日更新--------

这是我的 nginx 配置文件:

application live-video {
  access_log              /webdata/logs/access/publish.log;
  live                    on;
  record                  all;
  wait_key                on;
  record_path             /webdata/batch/video;
  record_unique           on;
  drop_idle_publisher     2s;
  interleave              on;
  allow play              all;
  allow publish           all;
  notify_method           get;
  exec_push               /usr/bin/ffmpeg -y -re -i rtmp://localhost:1935/live-video/$name -keyint_min 30 -x264opts "keyint=30:min-keyint=30:no-scenecut" -g 30 -r:v 30 -s 320x180 -b:v 256k -c:v libx264 -preset ultrafast -pix_fmt yuv420p -profile:v baseline -level 3.0 -c:a libfaac -ac 1 -ar 48000 -b:a 96k -f flv rtmp://localhost:1935/stream-video/240p -keyint_min 30 -x264opts "keyint=30:min-keyint=30:no-scenecut" -g 30 -r:v 30 -s 640x360 -b:v 512k -c:v libx264 -preset ultrafast -pix_fmt yuv420p -profile:v baseline -level 3.0 -c:a libfaac -ac 1 -ar 48000 -b:a 96k -f flv rtmp://localhost:1935/stream-video/360p -keyint_min 30 -x264opts "keyint=30:min-keyint=30:no-scenecut" -g 30 -r:v 30 -s 854x480 -b:v 1024k -c:v libx264 -preset ultrafast -pix_fmt yuv420p -profile:v baseline -level 3.0 -c:a libfaac -ac 1 -ar 48000 -b:a 96k -f flv rtmp://localhost:1935/stream-video/480p -c:a libfaac -ac 1 -ar 48000 -b:a 64k -f flv rtmp://localhost:1935/stream-video/aacp;
  access_log              off;
}

application stream-video {
  live                    on;
  access_log              /webdata/logs/access/stream-video.log;
  hls                     on;
  hls_fragment            10s;
  hls_playlist_length     5m;
  hls_path                /webdata/html/live/video;
}

直播流发布到rtmp://server:1935/live-video/stream?token=TOK;这会调用 ffmpeg 进行动态转码为四种质量并将其发布到 "stream-video" 应用程序。因此,您发布到 "live-video",您的用户观看 "stream-video"。

请注意,Nimble Streamer 现在有 Transcoder 插件来完成所描述的任务:https://wmspanel.com/transcoder