為了方便直播/監控使用者使用雲端儲存產品來儲存音視頻資料,阿里雲的雲端儲存(簡稱OSS)產品近期推出了RTMP收流功能。使用者可以直接用RTMP協議將音視頻資料上傳到雲端儲存OSS。
雲端儲存 LiveChannel介紹
LiveChannel是雲端儲存為了管理RTMP推流新增的概念;LiveChannel即直播頻道,用來儲存推流配置,擷取推流狀態等;直播頻道從屬於bucket,一個使用者可以在bucket中建立無限多的直播頻道。
使用者建立一個LiveChannel即可以擷取一個對應的RTMP推流地址,隨後使用者可以將音視頻資料通過RTMP協議推送到雲端儲存OSS,轉儲為HLS協議的ts、m3u8檔案。(牛逼的很那,哈哈)轉儲的檔案可以用來做點播;在延遲要求不高的情境下也可以直接使用HLS協議做直播;另外,還支援收流的同時即時截圖。
通過LiveChannel,使用者可以在直播的同時將內容儲存到雲端儲存OSS,不需要任何的本地臨時儲存;在享受雲端儲存OSS高可靠、低成本、無限擴充的同時,還可以利用雲端儲存OSS強大並且還在不斷豐富中的資料處理能力(截圖、轉碼、鑒黃等等)來進行各種後期處理;還可以非常便捷的使用雲端儲存OSS的Lifecycle等功能來做資料的生命週期管理。
使用情境說明
一、RTMP直播轉錄為HLS
步驟說明
1. APP開始直播,推送RTMP流到CDN;
2. APP或者CDN發送“開始直播”的訊息到MNS Topic,資訊中包含本次直播的CDN拉流地址;
3. MNS推送訊息到使用者搭建在Elastic Compute Service上的RTMP Proxy;
4. RTMP Proxy使用ffmpeg從CDN拉流;
5. RTMP Proxy在雲端儲存OSS建立LiveChannel,並向雲端儲存OSS推流;
6. 轉推結束後,RTMP Proxy發送一條“推流結束”的訊息到另一個MSN Topic;
7. MNS向客戶的應用伺服器推送“轉推結束”的訊息,供後續處理(例如儲存點播地址到資料庫);
8. APP從應用伺服器得到點播地址,訪問雲端儲存OSS擷取點播視訊。
備忘
1. 使用者可以自己使用OSS/MNS SDK、ffmpeg、librtmp等來實現自己的RTMP Proxy,後續雲端儲存OSS會提供樣本程式;
2. 整個步驟中涉及到的組件都可以使用阿里雲提供的服務搭建。
二、即時鑒黃
步驟說明
1. 直播時使用RTMP Proxy轉推一路資料到OSS,並設定LiveChannel開啟截圖;
2. OSS按使用者指定的間隔截圖,並儲存到OSS;
3. OSS調用第三方鑒黃服務對圖片進行打分;
4. OSS將打分的結果推送到MNS Topic;
5. MNS回調使用者的應用伺服器通知鑒黃結果;
6. 另一種處理方式:使用者也可以選擇讓OSS直接推送截圖的圖片連結,應用伺服器將圖片地址彙總後採用其他方式鑒別;
備忘
1. 第三方鑒黃服務會部署在阿里雲提供的Container Service中,調用的延遲等有充分的保證;
2. 截圖的同時雲端儲存OSS仍然會將RTMP流轉儲為HLS檔案;
三、許可權控制(私人bucket支援HLS播放)
雲端儲存OSS提供了豐富的鑒權/授權機制讓使用者可以精細的控制資料的存取權限;對於HLS直播/點播情境,我們同樣提供了“動態簽名m3u8”的機制,使使用者可以使用私人bucket提供HLS播放服務。
使用者只需要使用URL簽名方式訪問m3u8,並且增加參數“x- OSS-process=hls/type”, OSS會對返回的播放清單中的所有ts地址按照與m3u8完全的相同的方式進行簽名(相同的accessId、accessKey、expireTime)。
假設某個m3u8檔案的內容如下:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:54
#EXT-X-TARGETDURATION:6
#EXTINF:6.006,
1470971233380.ts
#EXTINF:6.006,
1470971233398.ts
#EXTINF:1.944,
1470971233415.ts
動態簽名後返回的內容如下:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:54
#EXT-X-TARGETDURATION:6
#EXTINF:6.006,
1470971233380.ts?Expires=1470973160&OSSAccessKeyId=YJjHKOKWDWINLKXv&Signature=6aJidj9VCRqnv%2Bwszh9MeROeHPM%3D
#EXTINF:6.006,
1470971233398.ts?Expires=1470973160&OSSAccessKeyId=YJjHKOKWDWINLKXv&Signature=ek3I5uK3R8FlnZLLWCmzsJXo7wk%3D
#EXTINF:1.944,
1470971233415.ts?Expires=1470973160&OSSAccessKeyId=YJjHKOKWDWINLKXv&Signature=JMjdUcCGu63bgtiIHeEi0USyY18%3D
備忘
1. “動態簽名”不會改變儲存在雲端儲存OSS中的m3
2. u8檔案的內容;
3. 支援子帳號、STS,使用STS訪問時,Token必須通過URL參數提供;
4. x-oss-process參數需要參與簽名。