2016-05-14 34 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嗎?謝謝! –