如何雲儲存服務實現視訊儲存
如何雲儲存服務實現視訊儲存
為了方便直播/監控使用者使用雲端儲存產品來儲存音視訊資料,阿里雲的雲端儲存(簡稱OSS)產品近期推出了RTMP收流功能。使用者可以直接用RTMP協議將音視訊資料上傳到雲端儲存OSS。
雲端儲存 LiveChannel介紹
LiveChannel是雲端儲存為了管理RTMP推流新增的概念;LiveChannel即直播頻道,用來儲存推流配置,獲取推流狀態等;直播頻道從屬於bucket,一個使用者可以在bucket中建立無限多的直播頻道。
使用者建立一個LiveChannel即可以獲取一個對應的RTMP推流地址,隨後使用者可以將音視訊資料通過RTMP協議推送到雲端儲存OSS,轉儲為HLS協議的ts、m3u8檔案。(牛逼的很那,哈哈)
通過LiveChannel,使用者可以在直播的同時將內容儲存到雲端儲存OSS,不需要任何的本地臨時儲存;在享受雲端儲存OSS高可靠、低成本、無限擴充套件的同時,還可以利用雲端儲存OSS強大並且還在不斷豐富中的資料處理能力(截圖、轉碼、鑑黃等等)來進行各種後期處理;還可以非常便捷的使用雲端儲存OSS的Lifecycle等功能來做資料的生命週期管理。
使用場景說明
一、RTMP直播轉錄為HLS
步驟說明
1. APP開始直播,推送RTMP流到CDN;
2. APP或者CDN傳送“開始直播”的訊息到MNS Topic,資訊中包含本次直播的CDN拉流地址;
3. MNS推送訊息到使用者搭建在雲伺服器ECS上的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. 第三方鑑黃服務會部署在阿里雲提供的容器服務中,呼叫的延遲等有充分的保證;
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引數需要參與簽名。