功能簡介
ZEGO Express SDK 支持推流到 CDN(Content Delivery Network,內容分發網路),包括轉推 CDN 和直推 CDN 兩種功能,開發者基于該功能可打通 RTC 產品和 CDN 直播產品,方便用戶從網頁或第三方播放器直接觀看和收聽直播內容,為了保證安全,推流到 CDN 時默認開啟 CDN 鑒權,
為防止攻擊者盜取或偽造您的推流 URL 地址,您可以參考 CDN 推流鑒權,提升您推流使用的安全性,
1轉推 CDN
轉推 CDN 指的是將音視頻流從 ZEGO 音視頻云推送到 ZEGO 自有 CDN 或第三方 CDN 的程序,

轉推 CDN 包括以下三種方式:
- 默認轉推 CDN
用戶使用 ZEGO Express SDK 推流到 ZEGO 音視頻云的直播流均會轉推到 CDN,目前僅支持 ZEGO 自有 CDN,
- 旁路轉推 CDN
開發者自定義指定 ZEGO 實時音視頻云上的流轉推至 CDN,支持 ZEGO 自有 CDN 和第三方 CDN,
- 混流轉推 CDN
混流場景也可以將輸出流轉推至 CDN,支持ZEGO 自有 CDN 和第三方 CDN,
2直推 CDN
直推 CDN 指的是將音視頻流直接從本地客戶端推送到 ZEGO 自有 CDN 的程序,用戶可直接通過拉流 URL 地址從網頁或第三方播放器進行觀看,但由于直推 CDN 功能在網路傳輸程序中不經過 ZEGO 實時音視頻云,因此開發者無法使用 ZEGO 的超低延遲音視頻服務,

3功能對比
兩種功能的說明與使用場景如下:
在發起轉推或直推 CDN 時需注意,CDN 對音視頻格式有所要求,推流端音頻支持 AAC 與 MP3,視頻支持 H.264 與 H.265(需要 CDN 配置),

前提條件
在使用 CDN 直播之前,請確保:
-
已在專案中集成 ZEGO Express SDK,實作基本的實時音視頻功能,詳情請參考 快速開始 - 集成 和 快速開始 - 實作視頻通話,
-
已在 ZEGO 控制臺 創建專案,并申請有效的 AppID 和 AppSign,詳情請參考 控制臺 - 專案管理 中的“專案資訊”,
CDN 直播功能不是默認開啟的,使用前請在 ZEGO 控制臺 自助開通(開通步驟請參考 專案管理 - 服務配置 中的“CDN”),或聯系 ZEGO 技術支持開通,
轉推 CDN
若選擇使用直推 CDN 功能,則無需執行本節所有步驟,
1初始化和登錄房間
請參考 快速開始 - 實作視頻通話 的 “3.1 創建引擎”、“3.2 登錄房間”,
2開始推流
日常生活中,我們經常需要用到各種各樣的證件,例如紅底、藍底、白底等,然而針對不同證件的需求去照相館多次拍攝需要花費一定的經濟與時間成本,當然市面上有很多專業的影像處理軟體,但是對于普通人而言,專業軟體的學習還是存在一定的學習門檻,
請參考 快速開始 - 實作視頻通話 的 “3.3 推流”,
3開始轉推
日常生活中,我們經常需要用到各種各樣的證件,例如紅底、藍底、白底等,然而針對不同證件的需求去照相館多次拍攝需要花費一定的經濟與時間成本,當然市面上有很多專業的影像處理軟體,但是對于普通人而言,專業軟體的學習還是存在一定的學習門檻,
當推流成功后,呼叫 addPublishCdnUrl 介面增加動態轉推至 CDN 的 URL,即可將已經成功推向 ZEGO 實時云的音視頻流動態向第三方 CDN 進行轉推,支持的轉推地址格式為 “rtmp”,
-
若開發者有轉推到多家第三方 CDN 廠商的需求,可使用同一個流 ID 多次呼叫 addPublishCdnUrl 介面(URL 需要不同),
-
開發者轉推到多家第三方 CDN 后,停止轉推時也同樣需要呼叫多次來停止所有轉推的流,
-
開發者轉推到多家第三方 CDN 后,可從 CDN 回呼狀態通知 publisherRelayCDNStateUpdate 的串列引數中獲取到每條轉推流的狀態變更通知,
/** 推流成功后,開始轉推到CDN */
// 推流時使用的流ID
let streamID = "STREAM_ID";
// 需要轉推的CDN地址,請開發者按照實際URL填入,streamID為推流的流名,可自定義
let URL = "rtmp://推流域名/接入點/streamID";
ZegoExpressEngine.instance().addPublishCdnUrl(streamID, URL).then((result) {
if(result.errorCode == 0) {
// 轉推成功
} else {
// 轉推失敗,可能由于網路原因轉推請求發送失敗
}
});
4(可選)監聽CDN轉推狀態通知
日常生活中,我們經常需要用到各種各樣的證件,例如紅底、藍底、白底等,然而針對不同證件的需求去照相館多次拍攝需要花費一定的經濟與時間成本,當然市面上有很多專業的影像處理軟體,但是對于普通人而言,專業軟體的學習還是存在一定的學習門檻,
1、添加/洗掉轉推 CDN 地址狀態回呼
開發者可通過注冊 publisherRelayCDNStateUpdate 獲取添加/洗掉轉推 CDN 地址狀態回呼,在 ZEGO RTC 服務器將音視頻流轉推到 CDN 后,如果 CDN 轉推狀態發生變化,例如出現轉推停止或轉推重試,將會收到此回呼,
開發者可根據該回呼判斷轉推 CDN 的音視頻流是否正常:
-
若不正常,則根據例外原因進一步定位轉推 CDN 的音視頻流例外的原因,以及做對應的容災策略,
-
若對例外的原因不了解,可聯系 ZEGO 技術支持分析具體例外的原因,
ZegoExpressEngine.instance().on("publisherRelayCDNStateUpdate", (streamID, infoList) => {
console.log(`publisherRelayCDNStateUpdate:streamID:${streamID}, infoList:${JSON.stringify(infoList)}`);
});
2、轉推 CDN 資訊詳解
轉推 CDN 資訊 ZegoStreamRelayCDNInfo 包含了 CDN 推流的 URL、轉推狀態、轉推狀態變更的原因、狀態發生的時間,ZegoStreamRelayCDNInfo 內所有引數如下:

其中,state取值如下:

updateReason 取值如下:

5停止轉推
日常生活中,我們經常需要用到各種各樣的證件,例如紅底、藍底、白底等,然而針對不同證件的需求去照相館多次拍攝需要花費一定的經濟與時間成本,當然市面上有很多專業的影像處理軟體,但是對于普通人而言,專業軟體的學習還是存在一定的學習門檻,
呼叫 removePublishCdnUrl 介面即可洗掉動態轉推至 CDN 的 URL,
該介面并不會停止推往 ZEGO 實時音視頻云的音視頻流,
// 推流時使用的流ID
let streamID = "STREAM_ID";
// 需要停止轉推的CDN地址,請開發者按照實際URL填入,streamID為推流的流名
let URL = "rtmp://推流域名/接入點/streamID";
ZegoExpressEngine.instance().removePublishCdnUrl(streamID, URL).then((result) {
if(result.errorCode == 0) {
// 停止轉推成功
} else {
// 停止轉推失敗,可能由于網路原因停止轉推請求發送失敗
}
});
直推 CDN
若選擇使用轉推 CDN 功能,則無需執行本節所有步驟,
1開始直推CDN
在推流前呼叫 enablePublishDirectToCDN 介面將音視頻流直接推往 CDN,
-
呼叫 enablePublishDirectToCDN 介面后再呼叫 addPublishCdnUrl 與 removePublishCdnUrl 動態轉推至 CDN 則不再生效,因為這兩個介面是從 ZEGO 實時音視頻云將音視頻流轉推或停止轉推到 CDN,若將音視頻流直接推往 CDN 則無法通過 ZEGO 實時音視頻云將音視頻流再動態轉推至 CDN,
-
若呼叫 enablePublishDirectToCDN 介面出現 1000038 錯誤碼,可能存在的問題有:域名配置錯誤、媒體網路例外或媒體網路鏈接為空,請聯系 ZEGO 技術支持,
let config = new ZegoCDNConfig();
// URL 需要開發者根據實際情況填寫,streamID為推流的流名,可自定義
config.url = "rtmp://推流域名/接入點/streamID";
ZegoExpressEngine.instance().enablePublishDirectToCDN(true, config);
ZegoExpressEngine.instance().startPublishingStream("STREAM_ID");
2 停止直推 CDN
若需停止直推 CDN,呼叫 stopPublishingStream 介面停止推流即可,
停止推流后,若下一次推流無需直推 CDN,則可以呼叫 enablePublishDirectToCDN 介面并傳值為 “false” 關閉直推 CDN 功能,在推流途中呼叫此介面不會影響此次推流,
ZegoExpressEngine.instance().stopPublishingStream();
let config = new ZegoCDNConfig();
ZegoExpressEngine.instance().enablePublishDirectToCDN(false, config);
觀眾拉流
-
當開發者使用 ZEGO 配置的 CDN 進行直推時,則可以直接通過 streamID 進行拉流,請參考 快速開始 - 實作視頻通話 的 “3.4 拉流”,
-
當音視頻流轉推 CDN 成功后,開發者希望用戶從 CDN 進行拉流時,需要使用傳入 URL 的自定義拉流方式進行拉流,而不能通過流 ID 進行拉流,URL 拉流的操作步驟可參考 推拉流進階 - 通過 URL 拉流 中的 “4.1 配置推拉流引數” 和 “4.2 開始拉流”,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/501713.html
標籤:其他

