直播转码可以解决推流端码率较高或较低而导致播放效果不好等问题。通过阅读本文,您可以快速了解直播转码的使用场景、使用限制、转码功能、模板参数、转码规则和宽度自适应等功能。
使用场景
当推流端码率较高而客户端带宽资源有限会导致视频播放卡顿;当推流端码率较低时会导致视频播放效果不好。使用直播转码服务可以快速帮您解决这些问题。
播放器插件需要实现多码率切换。前端播放器插件设置码率切换,需要同一路推流同时提供多种码率的播流地址。视频直播的实时转码功能为同一路推流同时提供多种码率的播流地址服务。
使用H.264编码进行推流,实时转码成H.265编码直播流进行播放,可以降低带宽。
使用H.265编码进行推流,实时转码成低码率H.265编码的直播流进行播放。
为了解决H.265在浏览器不兼容问题需要实时转码成H.264编码的直播流进行播放。
使用直播转码功能会产生转码费用,按转码标准、分辨率规格及对应总转码时长计费。计费规则详见直播转码费用。
使用限制
根据域名+AppName进行转码模板设置时,同一个模板里转码模板类型不能同时配置标准模板和窄带高清TM模板。
按AppName配置转码模板,推流地址中的 AppName 名称和转码模板对应时,转码模板生效。子播流域名复用主播流域名转码模板,子播流域名配置无效。
直播中心为北京、上海、深圳、新加坡时,每个域名下最多支持50路转码并发流,也就是一个域名下最多同时输出50路转码流。其他直播中心每个域名下最多支持10路转码并发流。如果一路高清分辨率直播流输入,同时转码成标清和流畅分辨率进行输出播放,算2路转码流。
本域名转码流数上限值为 300 路,当达到上限后,转码超限的播放连接会播放原始流。可前往播放域名中基本配置 > 基础信息中了解当前用量以及提升配额。
当提供的直播服务不能满足您当前业务需求时,请联系您的阿里云客户经理或通过阿里云其它渠道咨询。
功能说明
目前转码功能分为通用转码、自定义转码、多码率转码和H5自动转码。
通用转码:可引用系统预设模板,包括转码模板的ID和转码输出分辨率。转码输出的码率都是系统预设置不支持修改。
自定义转码:自定义转码配置支持编码格式、分辨率、码率、帧率、视频GOP、触发转码、转码模板ID的设置。
多码率转码:一个转码模板可以同时包含多个转码配置 ,配置多码率转码后,播放器可根据终端网络带宽环境,自动播放相应码率的直播流,从而提高播放体验。
H5自动转码:用于解决原生浏览器超低延时直播(artc://)不支持视频B帧和AAC编码等问题。
系统预设模板
标准模板
转码模板 | 画质优先模板ID-H264 | 画质优先模板ID-H265 | 时延优先模板ID-H264 | 时延优先模板ID-H265 | 分辨率 | 码率 |
流畅(横屏) | lld | lld265 | lld-ll | lld265-ll | 宽度自适应,高度:360 | ≤470 |
标清(横屏) | lsd | lsd265 | lsd-ll | lsd265-ll | 宽度自适应,高度:432 | ≤680 |
高清(横屏) | lhd | lhd265 | lhd-ll | lhd265-ll | 宽度自适应,高度:648 | ≤1500 |
超清(横屏) | lud | lud265 | lud-ll | lud265-ll | 宽度自适应,高度:1080 | ≤2500 |
标清(横屏) | lsd540 | lsd265-540 | lsd540-ll | lsd265-540-ll | 宽度自适应,高度:540 | ≤680 |
流畅(竖屏) | lld-v | lld265-v | lld-v-ll | lld265-v-ll | 宽度:360,高度自适应 | ≤470 |
标清(竖屏) | lsd-v | lsd265-v | lsd-v-ll | lsd265-v-ll | 宽度:432,高度自适应 | ≤680 |
高清(竖屏) | lhd-v | lhd265-v | lhd-v-ll | lhd265-v-ll | 宽度:648,高度自适应 | ≤1500 |
超清(竖屏) | lud-v | lud265-v | lud-v-ll | lud265-v-ll | 宽度:1080,高度自适应 | ≤2500 |
标清(竖屏) | lsd540-v | lsd265-540-v | lsd540-v-ll | lsd265-540-v-ll | 宽度:540,高度自适应 | ≤680 |
原画-仅转音频 | oriopus | |||||
原画-仅转音频 | oriaac |
窄带高清模板
转码模板 | 画质优先模板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 |
转码规则
视频直播默认支持延时转码,系统监测到某一路直播转码流无人观看时,不会执行转码。检测到播放端首次播放观看后启动转码,转码过程中5分钟内检测到无人观看即会停止转码。
每一路转码流仅执行一次转码。
转码不是必须服务,可按需配置。
转码协议目前支持FLV、RTMP、HLS、RTS。
分辨率自适应
转码根据横屏或竖屏采用分辨率自适应的算法。
若是横屏自适应转码,转码后视频将根据模板高度自适应宽度。
若是竖屏自适应转码,转码后视频将根据模板宽度自适应高度。
宽度自适应计算说明如下:
例如将1920*1080视频进行流畅横屏(模板ID:ld)转码,分辨率宽度自适应,高度:360,转码后分辨率为:640*360。
例如将1920*1080视频进行流畅竖屏(模板ID:ld-v)转码,分辨率宽度:360,高度自适应,转码后分辨率为:360*203。
目前只有通用转码和自定义转码支持自适应分辨率。
功能配置
通用转码
视频直播目前可通过两种方式进行通用转码配置:
方式一:通过视频直播控制台操作,详情可参见操作指南通用转码。
方式二:通过调用AddLiveStreamTranscodeAPI 添加通用转码配置信息。
Java SDK添加通用转码配置示例代码如下:
//需要<>内容替换成实际使用的值
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以“复合主键”的形式存在。
您可以登录视频直播控制台,选择流管理,在对应的推流记录中点击操作列直播地址查看转码流地址。
直播地址中包含原画(Original)地址和转码流地址。
您可在原播流地址
StreamName
后加_转码模板ID
进行自定义拼接转码流地址,详情可参见生成推流地址和播放地址。
自定义转码
如果通用转码模板不能满足您的要求,您可以使用自定义转码配置,自定义转码配置支持编码格式、分辨率、码率、帧率、视频GOP、触发转码、转码模板ID的设置。
视频直播目前可通过两种方式进行自定义转码配置:
方式一:通过视频直播控制台操作,详情可参见自定义转码。
方式二:通过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));
您可以将查询出的自定义转码配置信息在您的业务系统内保存成模板。
返回参数说明请参见DescribeLiveStreamTranscodeInfoAPI。
然后调用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));
转码参数说明请参见AddCustomLiveStreamTranscodeAPI。
其他说明:
重新推流后配置才可生效。
App取值必须与推流地址中的AppName名称一样,转码模板才能生效。取值不超过256字符,支持数字、大小写字母、短划线(-)、下划线(_),不能以短划线(-)、下划线(_)开头。
App也支持取值为星号(*)字符,表示匹配任意字符串(包括空字符串)。
转码模板匹配存在优先级,优先匹配和推流地址中AppName名称相同的转码模板配置,若不存在和推流地址中AppName名称一样的转码模板配置,则会匹配App为星号(*)的转码模板配置。
模板ID与AppName以“复合主键”的形式存在。
您可以登录视频直播控制台,选择流管理,在对应的推流记录中点击操作列直播地址查看转码流地址。
直播地址中包含原画(Original)地址和转码流地址。
您可在原播流地址
StreamName
后加_转码模板ID
进行自定义拼接转码流地址,详情可参见生成推流地址和播放地址。
多码率转码
多码率转码可以在一个转码模板内配置多种转码模式。部分地区网络环境差异较大,网络波动会影响终端的播放体验,因此业务方需要配置多码率来匹配带宽情况。配置多码率转码后,播放器可根据终端网络带宽环境,自动播放相应码率的直播流,从而提高播放体验。
目前多码率转码只能通过视频直播控制台进行配置,详情可参见多码率转码。
目前多码率转码流只能提供原画地址以及HLS转码流地址。
播放多码率转码流,需要增加
aliyunols=on
参数。示例地址如下:
http://<DomainName>/<AppName>/<StreamName>_<转码模板组ID>.m3u8?aliyunols=on&auth_key=1234****
其中
aliyunols=on
为必填的固定字段。
以下示例将向您展示多码率转码在实际业务中的使用:
例如现在添加一个如下图所示的多码率转码配置。
在该模板组中自定义了四个级别的转码配置,不同级别参数值设置可参考本文档系统预设模板。
然后进行推流,使用Web端阿里云播放器进行播放,通过调试可以发现,播放器自动根据终端网络带宽环境,播放了相应码率的转码流。
使用阿里云播放器,请参见播放器SDK。
H5自动转码
超低延时直播RTS是以WebRTC信令交互方式为基础的,原生浏览器WebRTC不支持视频B帧和AAC编码,H5播放自动转码将为您实现自适应的转码保障流畅播放。
在开通超低延时直播时可以开通H5自动转码功能,具体操作请参见开通超低延时直播功能。
H5自动转码是在原生浏览器超低延时直播(artc://)下处理视频B帧和AAC编码等问题,如需对视频内容进行转码(如调整码率,帧率,分辨率等)还是需要通过通用转码或自定义转码进行配置。
H5自动转码可以和通用转码或自定义转码功能叠加使用。
视频加密
在配置通用转码或自定义转码的过程中,您可能已注意到视频加密相关字段,通过转码配置可以实现阿里云视频加密功能,关于阿里云视频加密功能说明以及实现方式请参见阿里云视频加密。
相关文档
转码配置相关API,请参见直播转码。
使用Java SDK,可参见Java SDK使用说明。