您所要求的一切都可以使用nginx,nginx-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进行即时转码,以达到四种品质,并将其发布到“流视频”应用程序。所以,你发布到“实时视频”,你的用户观看“流视频”。
嗨hdezela。感谢您的回答。但是:1)我是否必须编译自己的nginx?是否有我可以使用的预制包? 2)你如何连接到云端?因为我用s3试过,但是我不能播放直播节目,只能保存在s3中的文件。谢谢 –
Hey Amin; 1)我还没有看到一个预制的nginx-rtmp二进制文件,尽管你自己编译它很简单(基本上是configure/make/make install),不过你必须确保拥有所有的先决条件。 2)您可以使用自定义来源将EC2实例连接到CloudFront,只需使用服务器的常规URL作为原点(http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DownloadDistS3AndCustomOrigins.html) 。 – hdezela
Hdzela对于延迟抱歉。我编译了nginx,现在我有1个流。但我无法创建其他低质量的流。你能分享你的nginx.conf吗?谢谢! –