【问题标题】:Single RTMP to adaptative streaming with a free media server and control panel使用免费媒体服务器和控制面板的单一 RTMP 到自适应流媒体
【发布时间】:2016-05-14 11:46:31
【问题描述】:

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

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

我想要什么:

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

请帮帮我!

【问题讨论】:

    标签: stream streaming video-streaming rtmp http-live-streaming


    【解决方案1】:

    您所要求的一切都可以通过nginxnginx-rtmp 模块和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 进行动态转码为四种质量并将其发布到“流视频”应用程序。因此,您发布到“实时视频”,而您的用户观看“流视频”。

    【讨论】:

    • 嗨 hdezela。感谢您的回答。但是:1)我必须自己编译nginx吗?有我可以使用的预制包吗? 2)你如何连接到云端?因为我用 s3 尝试过,但我无法播放实时流,只能播放保存在 s3 中的文件。谢谢
    • 嘿阿明; 1) 我还没有看到预制的 nginx-rtmp 二进制文件,虽然自己编译它相当简单(基本上是配置/制作/制作安装),但您必须确保具备所有先决条件。 2) 您可以使用自定义源将您的 EC2 实例连接到 CloudFront,只需使用服务器的常规 URL 作为源点 (docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/…)。
    • Hdzela 抱歉耽搁了。我已经编译了 nginx,现在我有 1 个 hls 流。但我无法创建其他低质量流。你能分享你的 nginx.conf 吗?谢谢!
    • 30 号之前我出城过节,等我回来再贴上来。如果我没记错的话,有一个 exec_push 指令允许您运行一个外部程序,您可以在其中运行 ffmpeg 并实时重新编码。您需要 2 个发布 rtmp 点,一个用于发送流(例如输入),它也执行 ffmpeg,另一个(例如公共)用于为您的受众提供服务,并且是 ffmpeg 发布的位置。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-12
      • 1970-01-01
      • 2016-10-19
      相关资源
      最近更新 更多