文档中心

设置直播转码模板(preset)

描述

该接口用于创建转码模板,在直播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
        }
    ]
}