直播转码可以解决推流端码率较高或较低而导致播放效果不好等问题。通过阅读本文,您可以快速了解直播转码的使用场景、使用限制、转码功能、模板参数、转码规则和宽度自适应等功能。
使用场景
重要 使用直播转码功能会产生转码费用,按转码标准、分辨率规格及对应总转码时长计费。计费规则详见直播转码费用。
使用限制
按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。
重要 目前只有通用转码和自定义转码支持自适应分辨率。
功能配置
通用转码
视频直播目前可通过两种方式进行通用转码配置:
控制台配置通用转码
- 登录视频直播控制台。
单击功能管理>直播转码,进入直播转码页面。
选择您所需要配置的域名,单击通用转码页签,单击添加,配置转码模板。
转码模板参数及说明如下表所示。
参数 | 说明 |
AppName | AppName必须与推流地址中的AppName名称一样,转码模板才能生效。 AppName不超过256字符,支持数字、大小写字母、短划线(-)、下划线(_)。 AppName也支持输入单个星号(*)字符,表示匹配任意字符串(包括空字符串)。
说明 如果配置了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也支持取值为星号(*)字符,表示匹配任意字符串(包括空字符串)。
转码模板匹配存在优先级,优先匹配和推流地址中AppName名称相同的转码模板配置,若不存在和推流地址中AppName名称一样的转码模板配置,则会匹配App为星号(*)的转码模板配置。
模板ID与AppName以“复合主键”的形式存在。
您可以登录视频直播控制台,选择流管理,在对应的推流记录中点击操作列直播地址查看转码流地址。
自定义转码
如果通用转码模板不能满足您的要求,您可以使用自定义转码配置,自定义转码配置支持编码格式、分辨率、码率、帧率、视频GOP、触发转码、转码模板ID的设置。
视频直播目前可通过两种方式进行自定义转码配置:
控制台配置自定义转码
- 登录视频直播控制台。
单击功能管理>直播转码,进入直播转码页面。
选择您所需要配置的域名,单击自定义转码页签,单击添加,配置转码模板。
转码模板参数及说明如下表所示。
参数 | 说明 |
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也支持取值为星号(*)字符,表示匹配任意字符串(包括空字符串)。
转码模板匹配存在优先级,优先匹配和推流地址中AppName名称相同的转码模板配置,若不存在和推流地址中AppName名称一样的转码模板配置,则会匹配App为星号(*)的转码模板配置。
模板ID与AppName以“复合主键”的形式存在。
您可以登录视频直播控制台,选择流管理,在对应的推流记录中点击操作列直播地址查看转码流地址。
多码率转码
多码率转码可以在一个转码模板内配置多种转码模式。部分地区网络环境差异较大,网络波动会影响终端的播放体验,因此业务方需要配置多码率来匹配带宽情况。配置多码率转码后,播放器可根据终端网络带宽环境,自动播放相应码率的直播流,从而提高播放体验。
目前多码率转码只能通过视频直播控制台进行配置。
控制台配置多码率转码
- 登录视频直播控制台。
单击功能管理>直播转码,进入直播转码页面。
选择您所需要配置的域名,单击多码率转码页签,单击添加,添加多码率转码模板组。
单击基本信息,编辑多码率转码模板组基本信息。
参数及说明如下表:
参数 | 说明 |
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自动转码功能,具体操作请参见开通超低延时直播功能。
视频加密
在配置通用转码或自定义转码的过程中,您可能已注意到视频加密相关字段,通过转码配置可以实现阿里云视频加密功能,关于阿里云视频加密功能说明以及实现方式请参见阿里云视频加密。