直播轉碼可以解決推流端碼率較高或較低而導致播放效果不好等問題。通過閱讀本文,您可以快速瞭解直播轉碼的使用情境、使用限制、轉碼功能、模板參數、轉碼規則和寬度自適應等功能。
使用情境
重要 使用直播轉碼功能會產生轉碼費用,按轉碼標準、解析度規格及對應總轉碼時間長度計費。計費規則詳見直播轉碼費用。
使用限制
按AppName配置轉碼模板,推流地址中的 AppName 名稱和轉碼模板對應時,轉碼模板生效。子播流網域名稱複用主播流網域名稱轉碼模板,子播流網域名稱配置無效。
直播中心為北京、上海、深圳時,每個網域名稱下最多支援300路轉碼並發流。其他直播中心每個網域名稱下最多支援50路轉碼並發流。如果一路高清解析度直播流輸入,同時轉碼成標清和流暢解析度進行輸出播放,算2路轉碼流。當達到上限後,轉碼超限的播放串連會播放原始流。可前往播放網域名稱中基本配置 > 基礎資訊中瞭解當前用量以及提升配額。
當提供的直播服務不能滿足您當前業務需求時,請聯絡您的阿里雲客戶經理或通過阿里雲其它渠道諮詢。
功能說明
目前轉碼功能分為通用轉碼、自訂轉碼、多碼率轉碼和H5自動轉碼。
通用轉碼:可引用系統預設模板,包括轉碼模板的ID和轉碼輸出解析度。轉碼輸出的碼率都是系統預設定不支援修改。
自訂轉碼:自訂轉碼配置支援編碼格式、解析度、碼率、幀率、視頻GOP、觸發轉碼、轉碼模板ID的設定。
多碼率轉碼:一個轉碼模板可以同時包含多個轉碼配置 ,配置多碼率轉碼後,播放器可根據終端網路頻寬環境,自動播放相應碼率的直播流,從而提高播放體驗。
H5自動轉碼:用於解決原生瀏覽器超低延時直播(artc://)不可使用視訊B幀和AAC編碼等問題。
系統預設模板
模板詳情>>
轉碼模板 | 畫質優先模板ID-H264 | 畫質優先模板ID-H265 | 時延優先模板ID-H264 | 時延優先模板ID-H265 | 解析度 | 碼率 |
流暢(橫屏) | ld | ld265 | ld-ll | ld265-ll | 寬度自適應,高度:360 | ≤450 |
標清(橫屏) | sd | sd265 | sd-ll | sd265-ll | 寬度自適應,高度:432 | ≤480 |
高清(橫屏) | hd | hd265 | hd-ll | hd265-ll | 寬度自適應,高度:648 | ≤1200 |
超清(橫屏) | ud | ud265 | ud-ll | ud265-ll | 寬度自適應,高度:1080 | ≤1300 |
標清(橫屏) | sd540 | sd265-540 | sd540-ll | sd265-540-ll | 寬度自適應,高度:540 | ≤480 |
流暢(豎屏) | ld-v | ld265-v | ld-v-ll | ld265-v-ll | 寬度:360,高度自適應 | ≤450 |
標清(豎屏) | sd-v | sd265-v | sd-v-ll | sd265-v-ll | 寬度:432,高度自適應 | ≤480 |
高清(豎屏) | hd-v | hd265-v | hd-v-ll | hd265-v-ll | 寬度:648,高度自適應 | ≤1200 |
超清(豎屏) | ud-v | ud265-v | ud-v-ll | ud265-v-ll | 寬度:1080,高度自適應 | ≤1300 |
標清(豎屏) | sd540-v | sd265-540-v | sd540-v-ll | sd265-540-v-ll | 寬度:540,高度自適應 | ≤480 |
解析度自適應
轉碼根據橫屏或豎屏採用解析度自適應的演算法。
寬度自適應計算說明如下:
例如將1920*1080視頻進行流暢橫屏(模板ID:ld)轉碼,解析度寬度自適應,高度:360,轉碼後解析度為:640*360。
例如將1920*1080視頻進行流暢豎屏(模板ID:ld-v)轉碼,解析度寬度:360,高度自適應,轉碼後解析度為:360*203。
重要 目前只有通用轉碼和自訂轉碼支援自適應解析度。
功能配置
通用轉碼
ApsaraVideo for Live目前可通過兩種方式進行通用轉碼配置:
控制台配置通用轉碼
- 登入ApsaraVideo for Live控制台。
單擊功能管理>直播轉碼,進入直播轉碼頁面。
選擇您所需要配置的網域名稱,單擊通用轉碼頁簽,單擊添加,配置轉碼模板。
轉碼模板參數及說明如下表所示。
參數 | 說明 |
AppName | AppName必須與推流地址中的AppName名稱一樣,轉碼模板才會生效。 AppName不超過256字元,支援數字、大小寫字母、短劃線(-)、底線(_)。 AppName也支援輸入單個星號(*)字元,表示匹配任一字元串(包括Null 字元串)。
說明 如果配置了AppName為單個星號(*)的轉碼模板:當使用者拉流轉碼時,優先匹配和推流地址中AppName名稱一樣的轉碼模板;若不存在和推流地址中AppName名稱一樣的轉碼模板,則會匹配AppName為單個星號(*)的轉碼模板。 |
觸發轉碼 | 開啟時:首次拉流時才啟動轉碼。 關閉時:只要有推流就啟動轉碼,與是否有拉流無關。
|
轉碼模板類型 | 窄帶高清™模板提供四種轉碼模板:流暢、標清、高清、超清。 轉碼模板參數說明如下: 模板名稱:流暢、標清、高清、超清、原畫-僅轉音頻。 模板名稱:流暢、標清、高清、超清。 模板ID:不同轉碼模板的模板ID不同,詳見系統預設模板。 橫豎屏:支援選擇橫屏或豎屏。 解析度(寬*高):顯示不同轉碼模板的寬度和高度。 編碼格式:支援選擇H264、H265、AAC、Opus。 編碼格式:支援選擇H264、H265。 轉碼模式:支援畫質優先、時延優先,時延優先模式下轉碼流的延時較低。 |
直播加密 | 開啟後可選擇配置阿里雲視頻加密或DRM加密。 |
完成配置後,單擊確定。
API 配置通用轉碼
//需要<>內容替換成實際使用的值
DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>");
IAcsClient client = new DefaultAcsClient(profile);
AddLiveStreamTranscodeRequest addLiveStreamTranscodeRequest = new AddLiveStreamTranscodeRequest();
addLiveStreamTranscodeRequest.setDomain("<DomainName>");
addLiveStreamTranscodeRequest.setApp("<AppName>");
addLiveStreamTranscodeRequest.setTemplate("<ld>");
addLiveStreamTranscodeRequest.setLazy("<true>");
try {
AddLiveStreamTranscodeResponse addLiveStreamTranscodeResponse = client.getAcsResponse(addLiveStreamTranscodeRequest);
System.out.println(new Gson().toJson(addLiveStreamTranscodeResponse));
// todo something.
} catch (ServerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
說明 以上樣本實現了對AppName為<AppName>的直播流進行轉碼配置,轉碼參數使用系統預設模板<ld>,關於系統預設模板說明請參見本文檔系統預設模板。
setLazy("<true>")表示拉流才會觸發轉碼,如果您需要在推流時就觸發轉碼,可以設定setLazy("false")。
更多API說明請參見AddLiveStreamTranscode。
其他說明:
重新推流後配置才可生效。
App取值必須與推流地址中的AppName名稱一樣,轉碼模板才會生效。取值不超過256字元,支援數字、大小寫字母、短劃線(-)、底線(_),不能以短劃線(-)、底線(_)開頭。
App也支援取值為星號(*)字元,表示匹配任一字元串(包括Null 字元串)。
轉碼模板匹配存在優先順序,優先匹配和推流地址中AppName名稱相同的轉碼模板配置,若不存在和推流地址中AppName名稱一樣的轉碼模板配置,則會匹配App為星號(*)的轉碼模板配置。
模板ID與AppName以“複合主鍵”的形式存在。
自訂轉碼
如果通用轉碼模板不能滿足您的要求,您可以使用自訂轉碼配置,自訂轉碼配置支援編碼格式、解析度、碼率、幀率、視頻GOP、觸發轉碼、轉碼模板ID的設定。
ApsaraVideo for Live目前可通過兩種方式進行自訂轉碼配置:
控制台配置自訂轉碼
- 登入ApsaraVideo for Live控制台。
單擊功能管理>直播轉碼,進入直播轉碼頁面。
選擇您所需要配置的網域名稱,單擊自訂轉碼頁簽,單擊添加,配置轉碼模板。
轉碼模板參數及說明如下表所示。
參數 | 說明 |
AppName | AppName必須與推流地址中的AppName名稱一樣,轉碼模板才會生效。 |
模板ID | 轉碼模板ID。 模板ID是拼接轉碼地址的參數,拼接方式參見產生推流地址和播放地址。輸出的直播地址後攜帶模板ID參數即可訪問指定解析度的轉碼流。 重要 請勿設定與通用轉碼模板ID相同的模板ID。通用轉碼模板ID包括:lld、lsd、lhd、lud、ld、sd、hd、ud。 |
轉碼模板類型 | 轉碼模板類型:窄帶高清™模板和純音頻轉碼模板。 標準模板和窄帶高清™模板品質和效能不同,價格也不同。原畫模板不對視頻進行處理。純音頻轉碼模板刪除視頻只輸出音頻流。 |
推薦模板參數 | 流暢、標清、超清、高清四種推薦參數,選中不同的檔位對應的幀率、碼率、解析度會根據系統預設的值進行填入,可在此基礎上進行調整。 |
解析度 | 視頻輸出的解析度,單位:像素。可選擇固定解析度或解析度隨源. 解析度隨源:若源流解析度寬高尺寸小於自適應尺寸寬高,按源流輸出。若源流解析度寬高尺寸大於自適應尺寸寬高,按自適應尺寸輸出。可選擇不同的自適應方式: 固定解析度:按指定解析度輸出,不同的解析度檔位對應不同的價格,解析度檔位如下所示: LD:(640×480)及以下。 SD:(1280×720)及以下。 HD:(1920×1080)及以下。 2K:(2560×1440)及以下。 4K:(3840×2160)及以下。
說明 解析度檔位判定規則:輸出規格按輸出視頻解析度的長邊和短邊是否屬於輸出規格劃定的範圍進行判定。 以輸出SD(1280×720)規格為例: |
視訊框架率 | 幀率隨源:若幀率在限制範圍內,按源幀率輸出,超過上限按上限輸出,低於下限按下限輸出 固定幀率:輸出指定的視訊框架率,單位:FPS。數值低於或等於輸入幀率。 |
視頻碼率 | 碼率隨源:若碼率在限制範圍內,按源碼率輸出,超過上限按上限輸出,低於下限按下限輸出,同時支援按倍率輸出。 固定碼率:使用指定的碼率,單位:kbps。解析度檔位指定的碼率如下所示: LD:100~800。 SD:200~1500。 HD:500~4000。 2K:2000~8000。 4K:4000~30000。
|
視頻GOP | 輸出視頻GOP即Group of picture(映像組),指兩個I幀之間的間隔,數值低於或等於輸入值。為了保障低延時效果不能大於3秒。 |
音頻碼率(純音頻轉碼) | 轉碼模板類型選擇純音頻轉碼模板時顯示。單位:kbps。取值範圍:8~1000。 |
編碼檔次(純音頻轉碼) | 轉碼模板類型選擇純音頻轉碼模板時顯示。 |
採樣率(純音頻轉碼) | 轉碼模板類型選擇純音頻轉碼模板時顯示音頻採樣率。取值:22050、32000、44100、48000、96000。 |
聲道數(純音頻轉碼) | 轉碼模板類型選擇純音頻轉碼模板時顯示,聲音軌道的個數,取值:1或2。 |
轉碼模式(進階配置) | 支援畫質優先和時延優先,時延優先模式下轉碼流的延時較低。 |
觸發轉碼(進階配置) | 開啟時:首次拉流時才啟動轉碼。 關閉時:只要有推流就啟動轉碼,與是否有拉流無關。
|
視頻加密(進階配置) | 開啟後可選擇配置阿里雲視頻加密或DRM加密。 |
透傳所有類型SEI(進階配置) | 開啟後,可透傳所有類型SEI,不開啟則不透傳SEI。 |
主要畫面格隨源(進階配置) | 開啟後,轉碼輸出資料流主要畫面格與原始流主要畫面格一致。 |
pts隨源(進階配置) | 開啟後,轉碼輸出資料流pts與原始流pts一致。 |
單擊確定添加。
API配置自訂轉碼
由於自訂轉碼參數設定較為複雜,我們建議您使用API時結合控制台進行自訂轉碼配置。
首先,您通過控制台添加一個自訂轉碼配置。
說明 控制台支援解析度尺寸效果預覽以及快捷填入流暢,標清,高清,超清模板參數。
完成各項參數調整後,通過調用DescribeLiveStreamTranscodeInfoAPI查詢轉碼配置資訊。
Java SDK查詢轉碼配置資訊範例程式碼如下:
//需要<>內容替換成實際使用的值
DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>");
IAcsClient client = new DefaultAcsClient(profile);
DescribeLiveStreamTranscodeInfoRequest describeLiveStreamTranscodeInfoRequest=new DescribeLiveStreamTranscodeInfoRequest();
describeLiveStreamTranscodeInfoRequest.setAppName("<AppName>");
describeLiveStreamTranscodeInfoRequest.setDomainTranscodeName("<DomainName>");
DescribeLiveStreamTranscodeInfoResponse describeLiveStreamTranscodeInfoResponse = null;
try {
describeLiveStreamTranscodeInfoResponse = client.getAcsResponse(describeLiveStreamTranscodeInfoRequest);
} catch (ClientException e) {
e.printStackTrace();
}
System.out.println(new Gson().toJson(describeLiveStreamTranscodeInfoResponse));
然後調用AddCustomLiveStreamTranscodeAPI根據網域名稱和AppName添加自訂轉碼配置資訊。
AddCustomLiveStreamTranscodeRequest addCustomLiveStreamTranscodeRequest=new AddCustomLiveStreamTranscodeRequest();
addCustomLiveStreamTranscodeRequest.setDomain("<DomainName>");
addCustomLiveStreamTranscodeRequest.setApp("<AppName>");
/**
* 轉碼參數設定
*/
AddCustomLiveStreamTranscodeResponse addCustomLiveStreamTranscodeResponse = null;
try {
addCustomLiveStreamTranscodeResponse = client.getAcsResponse(addCustomLiveStreamTranscodeRequest);
} catch (ClientException e) {
e.printStackTrace();
}
System.out.println(new Gson().toJson(addCustomLiveStreamTranscodeResponse));
其他說明:
重新推流後配置才可生效。
App取值必須與推流地址中的AppName名稱一樣,轉碼模板才會生效。取值不超過256字元,支援數字、大小寫字母、短劃線(-)、底線(_),不能以短劃線(-)、底線(_)開頭。
App也支援取值為星號(*)字元,表示匹配任一字元串(包括Null 字元串)。
轉碼模板匹配存在優先順序,優先匹配和推流地址中AppName名稱相同的轉碼模板配置,若不存在和推流地址中AppName名稱一樣的轉碼模板配置,則會匹配App為星號(*)的轉碼模板配置。
模板ID與AppName以“複合主鍵”的形式存在。
多碼率轉碼
多碼率轉碼可以在一個轉碼模板內配置多種轉碼模式。部分地區網路環境差異較大,網路波動會影響終端的播放體驗,因此業務方需要配置多碼率來匹配頻寬情況。配置多碼率轉碼後,播放器可根據終端網路頻寬環境,自動播放相應碼率的直播流,從而提高播放體驗。
目前多碼率轉碼只能通過ApsaraVideo for Live控制台進行配置。
控制台配置多碼率轉碼
- 登入ApsaraVideo for Live控制台。
單擊功能管理>直播轉碼,進入直播轉碼頁面。
選擇您所需要配置的網域名稱,單擊多碼率轉碼頁簽,單擊添加,添加多碼率轉碼模板組。
單擊基本資料,編輯多碼率轉碼模板組基本資料。
參數及說明如下表:
參數 | 說明 |
AppName | AppName必須與推流地址中的AppName名稱對應,轉碼模板才會生效。 |
模板組ID | 轉碼模板組ID。模板組ID是拼接多碼率轉碼地址的參數,支援數字、大小寫字母、虛線,添加不超過10個字元。 |
封裝格式 | 目前僅支援HLS。 |
觸發轉碼 | 目前僅支援推流時觸發轉碼。會產生轉碼費用,暫不支援播流時觸發轉碼。 |
時間戳記對齊 | 開啟後每個模板的GOP項不可設定,採用源視頻的GOP。 |
單擊+添加模板,會添加一條模板資訊。
單擊添加的模板,可以編輯模板參數。不同模板類型需填寫的參數可能不同,參數及說明如下表:
參數 | 說明 |
模板ID | 轉碼模板ID。 模板ID是拼接轉碼地址的參數,拼接方式參見產生推流地址和播放地址。輸出的直播地址後攜帶模板ID參數即可訪問指定解析度的轉碼流。 重要 請勿設定與通用轉碼模板ID相同的模板ID。通用轉碼模板ID包括:lld、lsd、lhd、lud、ld、sd、hd、ud。 |
轉碼模板類型 | 轉碼模板類型:窄帶高清™模板和純音頻轉碼模板。 |
解析度 | 視頻輸出的解析度,單位:像素。不同的解析度檔位對應不同的價格,解析度檔位如下所示: LD:(640×480)及以下。 SD:(1280×720)及以下。 HD:(1920×1080)及以下。 2K:(2560×1440)及以下。 4K:(3840×2160)及以下。
說明 轉碼計費根據解析度檔位(LD、SD、HD、2K、4K)決定,與通用模板中窄帶高清™模板的模板ID(包括ld、sd、hd、ud)無關,請勿混淆。 解析度檔位判定規則:輸出規格按輸出視頻解析度的長邊和短邊是否屬於輸出規格劃定的範圍進行判定。 |
視頻碼率 | 解析度使用指定的碼率,單位:kbps。解析度檔位指定的碼率如下所示: LD:100~800。 SD:200~1500。 HD:500~4000。 2K:2000~8000。 4K:4000~30000。
|
視訊框架率 | 輸出視訊框架率,單位:FPS。數值低於或等於輸入幀率。 |
視頻GOP | 輸出視頻GOP即Group of picture(映像組),指兩個I幀之間的間隔,數值低於或等於輸入值。為了保障低延時效果不能大於3秒。 |
編碼格式(純音頻轉碼) | 目前僅支援AAC編碼格式。 |
編碼檔次(純音頻轉碼) | |
碼率(純音頻轉碼) | 音頻碼率,取值範圍:8~1000。 |
聲道數(純音頻轉碼) | 聲音軌道的個數,取值:1或2。 |
頻寬上限閾值 | 可支援100Kbps~100Mbps範圍內的整數或小數,保留兩位小數,建議設定為視頻碼率的1.2~1.5倍。 |
配置完成後,單擊確定。
樣本地址如下:
http://<DomainName>/<AppName>/<StreamName>_<轉碼模板組ID>.m3u8?aliyunols=on&auth_key=1234****
以下樣本將向您展示多碼率轉碼在實際業務中的使用:
例如現在添加一個如下圖所示的多碼率轉碼配置。
說明 在該模板組中自訂了四個層級的轉碼配置,不同層級參數值設定可參考本文檔系統預設模板。
然後進行推流,使用Web端阿里雲播放器進行播放,通過調試可以發現,播放器自動根據終端網路頻寬環境,播放了相應碼率的轉碼流。
H5自動轉碼
超低延時直播RTS是以WebRTC信令互動方式為基礎的,原生瀏覽器WebRTC不可使用視訊B幀和AAC編碼,H5播放自動轉碼將為您實現自適應的轉碼保障流暢播放。
在開通超低延時直播時可以開通H5自動轉碼功能,具體操作請參見開通超低延時直播功能。
視頻加密
在配置通用轉碼或自訂轉碼的過程中,您可能已注意到視頻加密相關欄位,通過轉碼配置可以實現阿里雲視頻加密功能,關於阿里雲視頻加密功能說明以及實現方式請參見阿里雲視頻加密。