该接口用于创建转码模板,在直播rtmp推流时可以参数指定使用特定模板对直播流进行多分辨率转码。
[POST] http://videodev-bj.ksyun.com:8091/livetran/preset
参与计算签名的resource的指定关键参数:method,contmd5,uniqname,即: {resource} = "contmd5=xxx&method=preset&uniqname=xxx"
POST请求body为json格式:
{
//应用名称,由2~32位字母、数字、下划线组成
"app":"live",
//模板名称,必选,用户命名空间唯一,由2~32位字母、数字、下划线组成
"preset": "live_for_demo",
//模板描述
"description": "demo",
"output":[
{
//转码视频输出格式关键参数集合,必选
"format":{
//指定输出视频各项参数,见输出格式表,必选
//该参数将用于生成转码后新推流地址desurl的后缀
"output_format":xxx,
//自定义视频码率 ,可选,默认800000,100000~10000000
"vbr":xxx,
//自定义音频码率,可选,默认64000,20000~320000
"abr":xxx,
//自定义帧率,可选,不大于30,1~30
"fr":xxx,
//音视频转码选项:默认0
//0:音视频都转码
//1:音频原样输出,视频转码
//2:视频原样输出,音频转码
//3:音视频都原样输出
"remuxflag": 0,
// 是否加logo的开关,默认值0:关闭
// 打开后,必须在output->video->logo中配置logo图
"logo_switch": 0,
// I帧之间的GOP,单位:秒,不设置默认5秒。
"gop": 5,
// 自定义转码路径后缀名。
"suffix":"_400"
}
},
//可以继续填充output成员,同时发起多个转码任务
//但outpput_format不可重复,即同一输出分辨率只可以设置一次
{
"format":{...}
}],
//视频其它设置,可选
"video": {
"logo": [{
//必填,bucket名字和水印文件名
//logo的图片所在的ks3中的路径,最终url由转码服务拼凑。
// 该pic必须是不需要签名就可以访问的
// 该pic必须是与转码服务在同一region的,目前只支持bucket在北京
"pic":"/{bucket_name}/{object_name}",
// 该pic最适合应用于哪种分辨率的视频上,short_side指定加logo后的短边长度。
// 比如:640x360,360x640,短边都是360
// 可选,如果不设置,disable_scale=1
"short_side": 480,
// 跟short_side,自动缩放pic的尺寸。
// 可选,默认为0,即开启自动缩放
// 例如:short_side = 480, 当某个视频是360P时,logo的尺寸会乘以scaleFactor(0.75),
// offsetX、offsetY也会做相应的调整。
"disable_scale" : 0,
// pic与宽与高的偏移值,宽向右为正,高向下为正。
// 可选值,默认把pic放在左上角,offsetX=10,offsetY=10
// 如果offsetX=-10,offsetY=10,则Pic放在视频右上角。
"offsetX": -10,
"offsetY": 10
},{
// 可以针对不同的short_side,有不同尺寸的logo,避免转码服务autoscale带来的质量损失。
// 当设置多个pic时,转码服务会自动选择最优的一张作为logo。
...
}]
},
//音频其它设置,可选
"audio": {
}
}
返回的body也是json格式
HTTP1.1 200 OK
"Content-type": "application/json"
{
//int, 错误码
"errno":xxx,
//string, 处理状态错误描述
"errmsg":xxx
}
调用示例
PHP版本
//接口api名称
$method = 'preset';
//者业务类型标识
$uniqname = 'test';
//开发者自定义模板名称
$preset = '9999';
//业务app名称
$app = 'live';
//post参数内容
$arrPreset = array(
'preset' => $preset,
'app' => $app,
'description' => 'test',
'output' => array(
array(
'format' => array(
'output_format' => 258,
'vbr' => 800000,
'abr' => 64000,
'fr' => 25,
'remuxflag' => 0
),
),
array(
'format' => array(
'output_format' => 259,
'vbr' => 900000,
'abr' => 54000,
'fr' => 35,
'remuxflag' => 0
),
),
),
);
//post body:json字符串
$cont = json_encode($arrPreset);
//post body求md5值
$contmd5 = md5($cont);
//用于签名的参数,字典序排列
$arrrsrc = array(
'contmd5' => $contmd5,
'method' => $method,
'uniqname' => $uniqname,
);
$strrsrc = http_build_query($arrrsrc);
//开发者ak/sk
$accesskey = 'D8uDWZ88ZKW48/eZHmRm';
$secretkey = 'QtL2SMqgGy15m8WdhJx/X2/cnhMhCWGzS/KPY8z6';
//过期时间
$expire = time() + 600;
//拼接用于计算签名sign的源字符串
$strtosign = "GET\n$expire\n$strrsrc";
//计算签名
$sign = hash_hmac('sha1', $strtosign, $secretkey, true);
$signature = base64_encode($sign);
//拼接query
$params = array(
'accesskey' => $accesskey,
'expire' => $expire,
'signature' => $signature,
'contmd5' => $contmd5,
'uniqname' => $uniqname,
);
$qstr = http_build_query($params);
//设置并发送http post请求
$srvurl = "http://videodev.ksyun.com:8980/livetran/$method?$qstr";
$headers = array(
'Content-Type: application/json',
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $srvurl);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, $cont);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($ch);
curl_close($ch);
//获取返回结果
$ret = json_decode($res, true);
if (!empty($ret) && $ret['errno'] == 0) {
echo $ret['errmsg'];
} else {
echo "$res\n";
}
设置直播加水印,需开通直播转码服务,通过转码模板的video logo进行设置。
支持中英文,数字和下划线,不超过30个字符
为支持水印最佳视觉效果,水印文件为透明png格式,且大小不超过200kb,高宽不超过200*200像素。如果要更换水印,请修改水印图样。
目前只支持北京bucket,若用户需要使用水印功能,请先开通北京bucket。
1.设置方法:在设置直播转码模板[3.8.1]时将logo_switch的值设置为1,默认值为0;时在output->video->logo中配置logo图
2.若设置的preset模板名称为default,并且在default中开启logo_switch为1,则default模板中的水印文件作为默认水印。客户推流时,URL不用带preset参数,就可实现所有流带default模板中之制定的水印文件。若没设置default模板,则需要在推流url中带preset=xxx,指定转码模板,使用模板xxx中设置好的logo水印文件进行加水印处理。
3.输出output与水印文件的对应关系,体现在logo设置中的short_side上面。例如某输出分辨率为480P,则会使用logo数组中short_side=480的水印文件。所以不允许针对同一个short_side设置不同的水印文件,否则使用水印图片效果不可控。
4.水印文件与某个转码输出相对应,例如可以设置在源码输出上加水印,或在某个实时转码的码率,如360P的实时转码输出加水印。
5.若客户进行多码率转码,建议客户自己针对不同的输出分辨率,上传合适规格的水印文件。通过多个logo结构设置多组水印,每个水印设置根据不同的short_side,对应不同尺寸的logo,避免转码服务autoscale带来的质量损失。若只上传了一个logo文件,且拉流有不同码率分辨率,且disable_scale=0,则该logo文件将自动拉伸适配,作用于所有输出码率流中。
Logo显示位置:左上角,右上角,左下角,右下角。 坐标按下x,y设置。例如:左上角(10,10),右上角(-10,10),左下角(10,-10),右下角(-10,-10)
若用户想保留原始分辨率加水印,则设置如下:
{
"app":"live",
"preset":"live_for_demo",
"description":"demo",
"output":[
{
"format":{
"output_format":271,
"fr":30,
"vbr":2000000,
"abr":192000,
"logo_switch":1
}
}
],
"video":{
"logo":[
{
"pic":"bucket123/logo.png",
"short_side":480,
"disable_scale":0,
"offsetX":-10,
"offsetY":10
}
]
}
}
在模版中打开智能转码开关,添加以下参数即可:
intelligent_switch // 智能转码开关 1-打开 0-关闭,默认为0
intelligent_cburl // 智能转码回调地址,POST方式接收
{
"app":"live",
"preset":"live_for_demo",
"description":"demo",
"output":[
{
"format":{
"output_format":257
}
},
{
"format":{
"output_format":268
}
}
],
"intelligent_switch":1,
"intelligent_cburl":"http://xx.com/callback"
}
智能判断后,如果模板里设置了intelligent_cburl,则采用POST方式进行回调;
回调请求body为json格式:
{
"streamName":"stream001", // 流名
"streamInfo":{
"width":1280, // 源流分辨率-宽
"height":720 // 源流分辨率-高
},
"intelligent":[
{
"reqid":"5b38c661bda8b96651e75fa40955b50f", // 任务ID
"format":"257", // output_format
"intelligent_del":0 // 智能删除标志位 1-删除 0-正常转码
},
{
"reqid":"7404f106bacb5855526077637d50b395",
"format":"268",
"intelligent_del":1
}
]
}