2016-05-14 37 views
0

这种适应性流是我在做什么现在:单RTMP与自由媒体服务器和控制面板

我送与通过RTMP发送视频到AWS一个teradek vidiu直播电视频道带有灵活流控服务器的EC2实例,在几个月前通过wmspanel配置(在试用期内)。灵活的服务器转码rtmp,并给我一个HLS(m3u8),我用peer5(jwplayer)在网页上播放。这样做的问题在于,实况视频只能在HD中播放,而低速连接的客户端无法看到视频,有时甚至会出现口吃。

我想要什么:

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

请帮我这个!

回答

1

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

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

我的设置是这样的:

1.- BM H264连接到直播切换本地服务器上临发送HD流EC2实例在Fedora 23

2:Nginx的,RTMP接受输入并调用ffmpeg创建六个不同的HLS实时流(180p,240p,360p,480p,720p,1080p),然后通过CloudFront CDN进行服务以确保速度。

它工作得很好,我没有任何问题,CloudFront直接从EC2实例中获取流,速度非常惊人。你需要一个相当强大的实例(我使用m4.4xlarge)来进行并行编码。使用PHP(或其他任何语言,其实我只是喜欢PHP),你可以有一个控制面板和其他细节。例如,我跟踪所有视图,暂停,使用此设置执行一些geoIP和其他指标。

--------更新08月04日--------

下面是nginx的我的conf文件:

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:/ /服务器:1935 /直播,视频/流令牌= TOK;?这会调用ffmpeg进行即时转码,以达到四种品质,并将其发布到“流视频”应用程序。所以,你发布到“实时视频”,你的用户观看“流视频”。

+1

嗨hdezela。感谢您的回答。但是:1)我是否必须编译自己的nginx?是否有我可以使用的预制包? 2)你如何连接到云端?因为我用s3试过,但是我不能播放直播节目,只能保存在s3中的文件。谢谢 –

+0

Hey Amin; 1)我还没有看到一个预制的nginx-rtmp二进制文件,尽管你自己编译它很简单(基本上是configure/make/make install),不过你必须确保拥有所有的先决条件。 2)您可以使用自定义来源将EC2实例连接到CloudFront,只需使用服务器的常规URL作为原点(http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DownloadDistS3AndCustomOrigins.html) 。 – hdezela

+0

Hdzela对于延迟抱歉。我编译了nginx,现在我有1个流。但我无法创建其他低质量的流。你能分享你的nginx.conf吗?谢谢! –