直播轉(zhuǎn)碼
直播轉(zhuǎn)碼可以解決推流端碼率較高或較低而導(dǎo)致播放效果不好等問(wèn)題。通過(guò)閱讀本文,您可以快速了解直播轉(zhuǎn)碼的使用場(chǎng)景、使用限制、轉(zhuǎn)碼功能、模板參數(shù)、轉(zhuǎn)碼規(guī)則和寬度自適應(yīng)等功能。
使用場(chǎng)景
當(dāng)推流端碼率較高而客戶端帶寬資源有限會(huì)導(dǎo)致視頻播放卡頓;當(dāng)推流端碼率較低時(shí)會(huì)導(dǎo)致視頻播放效果不好。使用直播轉(zhuǎn)碼服務(wù)可以快速幫您解決這些問(wèn)題。
播放器插件需要實(shí)現(xiàn)多碼率切換。前端播放器插件設(shè)置碼率切換,需要同一路推流同時(shí)提供多種碼率的播流地址。視頻直播的實(shí)時(shí)轉(zhuǎn)碼功能為同一路推流同時(shí)提供多種碼率的播流地址服務(wù)。
使用H.264編碼進(jìn)行推流,實(shí)時(shí)轉(zhuǎn)碼成H.265編碼直播流進(jìn)行播放,可以降低帶寬。
使用H.265編碼進(jìn)行推流,實(shí)時(shí)轉(zhuǎn)碼成低碼率H.265編碼的直播流進(jìn)行播放。
為了解決H.265在瀏覽器不兼容問(wèn)題需要實(shí)時(shí)轉(zhuǎn)碼成H.264編碼的直播流進(jìn)行播放。
使用直播轉(zhuǎn)碼功能會(huì)產(chǎn)生轉(zhuǎn)碼費(fèi)用,按轉(zhuǎn)碼標(biāo)準(zhǔn)、分辨率規(guī)格及對(duì)應(yīng)總轉(zhuǎn)碼時(shí)長(zhǎng)計(jì)費(fèi)。計(jì)費(fèi)規(guī)則詳見直播轉(zhuǎn)碼費(fèi)用。
使用限制
根據(jù)域名+AppName進(jìn)行轉(zhuǎn)碼模板設(shè)置時(shí),同一個(gè)模板里轉(zhuǎn)碼模板類型不能同時(shí)配置標(biāo)準(zhǔn)模板和窄帶高清TM模板。
按AppName配置轉(zhuǎn)碼模板,推流地址中的 AppName 名稱和轉(zhuǎn)碼模板對(duì)應(yīng)時(shí),轉(zhuǎn)碼模板生效。子播流域名復(fù)用主播流域名轉(zhuǎn)碼模板,子播流域名配置無(wú)效。
直播中心為北京、上海、深圳、新加坡時(shí),每個(gè)域名下最多支持50路轉(zhuǎn)碼并發(fā)流,也就是一個(gè)域名下最多同時(shí)輸出50路轉(zhuǎn)碼流。其他直播中心每個(gè)域名下最多支持10路轉(zhuǎn)碼并發(fā)流。如果一路高清分辨率直播流輸入,同時(shí)轉(zhuǎn)碼成標(biāo)清和流暢分辨率進(jìn)行輸出播放,算2路轉(zhuǎn)碼流。
本域名轉(zhuǎn)碼流數(shù)上限值為 300 路,當(dāng)達(dá)到上限后,轉(zhuǎn)碼超限的播放連接會(huì)播放原始流。可前往播放域名中基本配置 > 基礎(chǔ)信息中了解當(dāng)前用量以及提升配額。
當(dāng)提供的直播服務(wù)不能滿足您當(dāng)前業(yè)務(wù)需求時(shí),請(qǐng)聯(lián)系您的阿里云客戶經(jīng)理或通過(guò)阿里云其它渠道咨詢。
功能說(shuō)明
目前轉(zhuǎn)碼功能分為通用轉(zhuǎn)碼、自定義轉(zhuǎn)碼、多碼率轉(zhuǎn)碼和H5自動(dòng)轉(zhuǎn)碼。
通用轉(zhuǎn)碼:可引用系統(tǒng)預(yù)設(shè)模板,包括轉(zhuǎn)碼模板的ID和轉(zhuǎn)碼輸出分辨率。轉(zhuǎn)碼輸出的碼率都是系統(tǒng)預(yù)設(shè)置不支持修改。
自定義轉(zhuǎn)碼:自定義轉(zhuǎn)碼配置支持編碼格式、分辨率、碼率、幀率、視頻GOP、觸發(fā)轉(zhuǎn)碼、轉(zhuǎn)碼模板ID的設(shè)置。
多碼率轉(zhuǎn)碼:一個(gè)轉(zhuǎn)碼模板可以同時(shí)包含多個(gè)轉(zhuǎn)碼配置 ,配置多碼率轉(zhuǎn)碼后,播放器可根據(jù)終端網(wǎng)絡(luò)帶寬環(huán)境,自動(dòng)播放相應(yīng)碼率的直播流,從而提高播放體驗(yàn)。
H5自動(dòng)轉(zhuǎn)碼:用于解決原生瀏覽器超低延時(shí)直播(artc://)不支持視頻B幀和AAC編碼等問(wèn)題。
系統(tǒng)預(yù)設(shè)模板
標(biāo)準(zhǔn)模板
轉(zhuǎn)碼模板 | 畫質(zhì)優(yōu)先模板ID-H264 | 畫質(zhì)優(yōu)先模板ID-H265 | 時(shí)延優(yōu)先模板ID-H264 | 時(shí)延優(yōu)先模板ID-H265 | 分辨率 | 碼率 |
流暢(橫屏) | lld | lld265 | lld-ll | lld265-ll | 寬度自適應(yīng),高度:360 | ≤470 |
標(biāo)清(橫屏) | lsd | lsd265 | lsd-ll | lsd265-ll | 寬度自適應(yīng),高度:432 | ≤680 |
高清(橫屏) | lhd | lhd265 | lhd-ll | lhd265-ll | 寬度自適應(yīng),高度:648 | ≤1500 |
超清(橫屏) | lud | lud265 | lud-ll | lud265-ll | 寬度自適應(yīng),高度:1080 | ≤2500 |
標(biāo)清(橫屏) | lsd540 | lsd265-540 | lsd540-ll | lsd265-540-ll | 寬度自適應(yīng),高度:540 | ≤680 |
流暢(豎屏) | lld-v | lld265-v | lld-v-ll | lld265-v-ll | 寬度:360,高度自適應(yīng) | ≤470 |
標(biāo)清(豎屏) | lsd-v | lsd265-v | lsd-v-ll | lsd265-v-ll | 寬度:432,高度自適應(yīng) | ≤680 |
高清(豎屏) | lhd-v | lhd265-v | lhd-v-ll | lhd265-v-ll | 寬度:648,高度自適應(yīng) | ≤1500 |
超清(豎屏) | lud-v | lud265-v | lud-v-ll | lud265-v-ll | 寬度:1080,高度自適應(yīng) | ≤2500 |
標(biāo)清(豎屏) | lsd540-v | lsd265-540-v | lsd540-v-ll | lsd265-540-v-ll | 寬度:540,高度自適應(yīng) | ≤680 |
原畫-僅轉(zhuǎn)音頻 | oriopus | |||||
原畫-僅轉(zhuǎn)音頻 | oriaac |
窄帶高清模板
轉(zhuǎn)碼模板 | 畫質(zhì)優(yōu)先模板ID-H264 | 畫質(zhì)優(yōu)先模板ID-H265 | 時(shí)延優(yōu)先模板ID-H264 | 時(shí)延優(yōu)先模板ID-H265 | 分辨率 | 碼率 |
流暢(橫屏) | ld | ld265 | ld-ll | ld265-ll | 寬度自適應(yīng),高度:360 | ≤450 |
標(biāo)清(橫屏) | sd | sd265 | sd-ll | sd265-ll | 寬度自適應(yīng),高度:432 | ≤480 |
高清(橫屏) | hd | hd265 | hd-ll | hd265-ll | 寬度自適應(yīng),高度:648 | ≤1200 |
超清(橫屏) | ud | ud265 | ud-ll | ud265-ll | 寬度自適應(yīng),高度:1080 | ≤1300 |
標(biāo)清(橫屏) | sd540 | sd265-540 | sd540-ll | sd265-540-ll | 寬度自適應(yīng),高度:540 | ≤480 |
流暢(豎屏) | ld-v | ld265-v | ld-v-ll | ld265-v-ll | 寬度:360,高度自適應(yīng) | ≤450 |
標(biāo)清(豎屏) | sd-v | sd265-v | sd-v-ll | sd265-v-ll | 寬度:432,高度自適應(yīng) | ≤480 |
高清(豎屏) | hd-v | hd265-v | hd-v-ll | hd265-v-ll | 寬度:648,高度自適應(yīng) | ≤1200 |
超清(豎屏) | ud-v | ud265-v | ud-v-ll | ud265-v-ll | 寬度:1080,高度自適應(yīng) | ≤1300 |
標(biāo)清(豎屏) | sd540-v | sd265-540-v | sd540-v-ll | sd265-540-v-ll | 寬度:540,高度自適應(yīng) | ≤480 |
模板ID不一定和轉(zhuǎn)碼賬單規(guī)格對(duì)應(yīng),實(shí)際轉(zhuǎn)碼賬單規(guī)格與轉(zhuǎn)碼后視頻的分辨率有關(guān)。如配置流暢(ld)轉(zhuǎn)碼,轉(zhuǎn)碼后視頻短邊≤480,且長(zhǎng)邊≤640,轉(zhuǎn)碼賬單則會(huì)按LD規(guī)格輸出。如配置流暢(ld)轉(zhuǎn)碼,但轉(zhuǎn)碼后視頻分辨率為700*360,則會(huì)按照SD規(guī)格進(jìn)行賬單輸出,詳細(xì)信息請(qǐng)參見直播轉(zhuǎn)碼費(fèi)用。
轉(zhuǎn)碼采用分辨率自適應(yīng)的算法,根據(jù)橫屏或豎屏自適應(yīng)轉(zhuǎn)碼后的分辨率,詳情請(qǐng)參見分辨率自適應(yīng)。
轉(zhuǎn)碼規(guī)則
視頻直播默認(rèn)支持延時(shí)轉(zhuǎn)碼,系統(tǒng)監(jiān)測(cè)到某一路直播轉(zhuǎn)碼流無(wú)人觀看時(shí),不會(huì)執(zhí)行轉(zhuǎn)碼。檢測(cè)到播放端首次播放觀看后啟動(dòng)轉(zhuǎn)碼,轉(zhuǎn)碼過(guò)程中5分鐘內(nèi)檢測(cè)到無(wú)人觀看即會(huì)停止轉(zhuǎn)碼。
每一路轉(zhuǎn)碼流僅執(zhí)行一次轉(zhuǎn)碼。
轉(zhuǎn)碼不是必須服務(wù),可按需配置。
轉(zhuǎn)碼協(xié)議目前支持FLV、RTMP、HLS、RTS。
分辨率自適應(yīng)
轉(zhuǎn)碼根據(jù)橫屏或豎屏采用分辨率自適應(yīng)的算法。
若是橫屏自適應(yīng)轉(zhuǎn)碼,轉(zhuǎn)碼后視頻將根據(jù)模板高度自適應(yīng)寬度。
若是豎屏自適應(yīng)轉(zhuǎn)碼,轉(zhuǎn)碼后視頻將根據(jù)模板寬度自適應(yīng)高度。
寬度自適應(yīng)計(jì)算說(shuō)明如下:
例如將1920*1080視頻進(jìn)行流暢橫屏(模板ID:ld)轉(zhuǎn)碼,分辨率寬度自適應(yīng),高度:360,轉(zhuǎn)碼后分辨率為:640*360。
例如將1920*1080視頻進(jìn)行流暢豎屏(模板ID:ld-v)轉(zhuǎn)碼,分辨率寬度:360,高度自適應(yīng),轉(zhuǎn)碼后分辨率為:360*203。
目前只有通用轉(zhuǎn)碼和自定義轉(zhuǎn)碼支持自適應(yīng)分辨率。
功能配置
通用轉(zhuǎn)碼
視頻直播目前可通過(guò)兩種方式進(jìn)行通用轉(zhuǎn)碼配置:
方式一:通過(guò)視頻直播控制臺(tái)操作,詳情可參見操作指南通用轉(zhuǎn)碼。
方式二:通過(guò)調(diào)用AddLiveStreamTranscodeAPI 添加通用轉(zhuǎn)碼配置信息。
Java SDK添加通用轉(zhuǎn)碼配置示例代碼如下:
//需要<>內(nèi)容替換成實(shí)際使用的值
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();
}
以上示例實(shí)現(xiàn)了對(duì)AppName為<AppName>的直播流進(jìn)行轉(zhuǎn)碼配置,轉(zhuǎn)碼參數(shù)使用系統(tǒng)預(yù)設(shè)模板<ld>,關(guān)于系統(tǒng)預(yù)設(shè)模板說(shuō)明請(qǐng)參見本文檔系統(tǒng)預(yù)設(shè)模板。
setLazy("<true>")表示拉流才會(huì)觸發(fā)轉(zhuǎn)碼,如果您需要在推流時(shí)就觸發(fā)轉(zhuǎn)碼,可以設(shè)置setLazy("false")。
更多API說(shuō)明請(qǐng)參見AddLiveStreamTranscode。
其他說(shuō)明:
重新推流后配置才可生效。
App取值必須與推流地址中的AppName名稱一樣,轉(zhuǎn)碼模板才能生效。取值不超過(guò)256字符,支持?jǐn)?shù)字、大小寫字母、短劃線(-)、下劃線(_),不能以短劃線(-)、下劃線(_)開頭。
App也支持取值為星號(hào)(*)字符,表示匹配任意字符串(包括空字符串)。
轉(zhuǎn)碼模板匹配存在優(yōu)先級(jí),優(yōu)先匹配和推流地址中AppName名稱相同的轉(zhuǎn)碼模板配置,若不存在和推流地址中AppName名稱一樣的轉(zhuǎn)碼模板配置,則會(huì)匹配App為星號(hào)(*)的轉(zhuǎn)碼模板配置。
模板ID與AppName以“復(fù)合主鍵”的形式存在。
您可以登錄視頻直播控制臺(tái),選擇流管理,在對(duì)應(yīng)的推流記錄中點(diǎn)擊操作列直播地址查看轉(zhuǎn)碼流地址。
直播地址中包含原畫(Original)地址和轉(zhuǎn)碼流地址。
您可在原播流地址
StreamName
后加_轉(zhuǎn)碼模板ID
進(jìn)行自定義拼接轉(zhuǎn)碼流地址,詳情可參見生成推流地址和播放地址。
自定義轉(zhuǎn)碼
如果通用轉(zhuǎn)碼模板不能滿足您的要求,您可以使用自定義轉(zhuǎn)碼配置,自定義轉(zhuǎn)碼配置支持編碼格式、分辨率、碼率、幀率、視頻GOP、觸發(fā)轉(zhuǎn)碼、轉(zhuǎn)碼模板ID的設(shè)置。
視頻直播目前可通過(guò)兩種方式進(jìn)行自定義轉(zhuǎn)碼配置:
方式一:通過(guò)視頻直播控制臺(tái)操作,詳情可參見自定義轉(zhuǎn)碼。
方式二:通過(guò)API添加直播流自定義轉(zhuǎn)碼配置。由于自定義轉(zhuǎn)碼參數(shù)設(shè)置較為復(fù)雜,我們建議您使用API時(shí)結(jié)合控制臺(tái)進(jìn)行自定義轉(zhuǎn)碼配置。
首先,您通過(guò)視頻直播控制臺(tái)添加一個(gè)自定義轉(zhuǎn)碼配置。
控制臺(tái)支持分辨率尺寸效果預(yù)覽以及快捷填入流暢,標(biāo)清,高清,超清模板參數(shù)。
完成各項(xiàng)參數(shù)調(diào)整后,通過(guò)調(diào)用DescribeLiveStreamTranscodeInfoAPI查詢轉(zhuǎn)碼配置信息。
Java SDK查詢轉(zhuǎn)碼配置信息示例代碼如下:
//需要<>內(nèi)容替換成實(shí)際使用的值
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));
您可以將查詢出的自定義轉(zhuǎn)碼配置信息在您的業(yè)務(wù)系統(tǒng)內(nèi)保存成模板。
返回參數(shù)說(shuō)明請(qǐng)參見DescribeLiveStreamTranscodeInfoAPI。
然后調(diào)用AddCustomLiveStreamTranscodeAPI根據(jù)域名和AppName添加自定義轉(zhuǎn)碼配置信息。
AddCustomLiveStreamTranscodeRequest addCustomLiveStreamTranscodeRequest=new AddCustomLiveStreamTranscodeRequest();
addCustomLiveStreamTranscodeRequest.setDomain("<DomainName>");
addCustomLiveStreamTranscodeRequest.setApp("<AppName>");
/**
* 轉(zhuǎn)碼參數(shù)設(shè)置
*/
AddCustomLiveStreamTranscodeResponse addCustomLiveStreamTranscodeResponse = null;
try {
addCustomLiveStreamTranscodeResponse = client.getAcsResponse(addCustomLiveStreamTranscodeRequest);
} catch (ClientException e) {
e.printStackTrace();
}
System.out.println(new Gson().toJson(addCustomLiveStreamTranscodeResponse));
轉(zhuǎn)碼參數(shù)說(shuō)明請(qǐng)參見AddCustomLiveStreamTranscodeAPI。
其他說(shuō)明:
重新推流后配置才可生效。
App取值必須與推流地址中的AppName名稱一樣,轉(zhuǎn)碼模板才能生效。取值不超過(guò)256字符,支持?jǐn)?shù)字、大小寫字母、短劃線(-)、下劃線(_),不能以短劃線(-)、下劃線(_)開頭。
App也支持取值為星號(hào)(*)字符,表示匹配任意字符串(包括空字符串)。
轉(zhuǎn)碼模板匹配存在優(yōu)先級(jí),優(yōu)先匹配和推流地址中AppName名稱相同的轉(zhuǎn)碼模板配置,若不存在和推流地址中AppName名稱一樣的轉(zhuǎn)碼模板配置,則會(huì)匹配App為星號(hào)(*)的轉(zhuǎn)碼模板配置。
模板ID與AppName以“復(fù)合主鍵”的形式存在。
您可以登錄視頻直播控制臺(tái),選擇流管理,在對(duì)應(yīng)的推流記錄中點(diǎn)擊操作列直播地址查看轉(zhuǎn)碼流地址。
直播地址中包含原畫(Original)地址和轉(zhuǎn)碼流地址。
您可在原播流地址
StreamName
后加_轉(zhuǎn)碼模板ID
進(jìn)行自定義拼接轉(zhuǎn)碼流地址,詳情可參見生成推流地址和播放地址。
多碼率轉(zhuǎn)碼
多碼率轉(zhuǎn)碼可以在一個(gè)轉(zhuǎn)碼模板內(nèi)配置多種轉(zhuǎn)碼模式。部分地區(qū)網(wǎng)絡(luò)環(huán)境差異較大,網(wǎng)絡(luò)波動(dòng)會(huì)影響終端的播放體驗(yàn),因此業(yè)務(wù)方需要配置多碼率來(lái)匹配帶寬情況。配置多碼率轉(zhuǎn)碼后,播放器可根據(jù)終端網(wǎng)絡(luò)帶寬環(huán)境,自動(dòng)播放相應(yīng)碼率的直播流,從而提高播放體驗(yàn)。
目前多碼率轉(zhuǎn)碼只能通過(guò)視頻直播控制臺(tái)進(jìn)行配置,詳情可參見多碼率轉(zhuǎn)碼。
目前多碼率轉(zhuǎn)碼流只能提供原畫地址以及HLS轉(zhuǎn)碼流地址。
播放多碼率轉(zhuǎn)碼流,需要增加
aliyunols=on
參數(shù)。示例地址如下:
http://<DomainName>/<AppName>/<StreamName>_<轉(zhuǎn)碼模板組ID>.m3u8?aliyunols=on&auth_key=1234****
其中
aliyunols=on
為必填的固定字段。
以下示例將向您展示多碼率轉(zhuǎn)碼在實(shí)際業(yè)務(wù)中的使用:
例如現(xiàn)在添加一個(gè)如下圖所示的多碼率轉(zhuǎn)碼配置。
在該模板組中自定義了四個(gè)級(jí)別的轉(zhuǎn)碼配置,不同級(jí)別參數(shù)值設(shè)置可參考本文檔系統(tǒng)預(yù)設(shè)模板。
然后進(jìn)行推流,使用Web端阿里云播放器進(jìn)行播放,通過(guò)調(diào)試可以發(fā)現(xiàn),播放器自動(dòng)根據(jù)終端網(wǎng)絡(luò)帶寬環(huán)境,播放了相應(yīng)碼率的轉(zhuǎn)碼流。
使用阿里云播放器,請(qǐng)參見播放器SDK。
H5自動(dòng)轉(zhuǎn)碼
超低延時(shí)直播RTS是以WebRTC信令交互方式為基礎(chǔ)的,原生瀏覽器WebRTC不支持視頻B幀和AAC編碼,H5播放自動(dòng)轉(zhuǎn)碼將為您實(shí)現(xiàn)自適應(yīng)的轉(zhuǎn)碼保障流暢播放。
在開通超低延時(shí)直播時(shí)可以開通H5自動(dòng)轉(zhuǎn)碼功能,具體操作請(qǐng)參見開通超低延時(shí)直播功能。
H5自動(dòng)轉(zhuǎn)碼是在原生瀏覽器超低延時(shí)直播(artc://)下處理視頻B幀和AAC編碼等問(wèn)題,如需對(duì)視頻內(nèi)容進(jìn)行轉(zhuǎn)碼(如調(diào)整碼率,幀率,分辨率等)還是需要通過(guò)通用轉(zhuǎn)碼或自定義轉(zhuǎn)碼進(jìn)行配置。
H5自動(dòng)轉(zhuǎn)碼可以和通用轉(zhuǎn)碼或自定義轉(zhuǎn)碼功能疊加使用。
視頻加密
在配置通用轉(zhuǎn)碼或自定義轉(zhuǎn)碼的過(guò)程中,您可能已注意到視頻加密相關(guān)字段,通過(guò)轉(zhuǎn)碼配置可以實(shí)現(xiàn)阿里云視頻加密功能,關(guān)于阿里云視頻加密功能說(shuō)明以及實(shí)現(xiàn)方式請(qǐng)參見阿里云視頻加密。
相關(guān)文檔
轉(zhuǎn)碼配置相關(guān)API,請(qǐng)參見直播轉(zhuǎn)碼。
使用Java SDK,可參見Java SDK使用說(shuō)明。