1. 程式人生 > >如何雲儲存服務實現視訊儲存

如何雲儲存服務實現視訊儲存

如何雲儲存服務實現視訊儲存

 

為了方便直播/監控使用者使用雲端儲存產品來儲存音視訊資料,阿里雲的雲端儲存(簡稱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

4e8d4ba3099254c482b5360277b71ec0a892338a

步驟說明

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.    整個步驟中涉及到的元件都可以使用阿里雲提供的服務搭建。

二、實時鑑黃

5f972126ef1bd9cf307e3c892e432da58cd48c02

步驟說明

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引數需要參與簽名。