金山云老版直播API文档

最近更新时间:2018-06-26 14:55:53

1. 接口地址

http://videodev-bj.ksyun.com:8091/livetran/{method} 目前本文档接口只提供json格式的响应

2. 公共参数

直播转码业务提供http形式的开放接口,所有接口在query中定义了如下公共参数,主要用于进行开发者身份的鉴权验证,防止非法访问、保护开发者权益

参数名 是否必须 描述
accesskey 公钥
expire 过期格林威治时间秒数
contmd5 POST必须 body的md5值
uniqname 开发者身份唯一标识,由2~128位字母、数字、下划线组成
signature 签名

金山云开发者中心给调用方提供公钥accesskey,用来在HTTP请求中显式的指示用户身份,开发者中心同时也提供私钥secretkey,由调用方负责保密保管,作为signature的计算源数据。

signature的计算原则如下

1. 签名计算方法:

{signature} = Base64(HMAC-SHA1({secretkey}, UTF-8-Encoding-Of({StringToSign})))

其中{secretkey}为开发者密钥,参数{StringToSign}计算方法见第2条

2. {StringToSign}计算方法:

{StringToSign} = "GET" + "\n" + {expire} + "\n" + {resource}

其中{expire}为过期时间的格林治时间秒数,{resource}参数计算方法见第3条

3. {resource}计算方法:

{resource} = "{k0}={v0}&{k1}={v1}&..."

其中{k0}{k1}...为指定的参数名,{v0}{v1}...为对应的参数值,各参数及其拼接方法遵循如下规则

  • 拼接成{resource}的参数{k0}{k1}...是除去{signature},{accesskey},{expire}外的所有指定的关键参数,参数名与参数值用等号=连接,参数值需经过url编码,参数之间依照参数名的字典顺序依次用与号&连接,拼接后最终形如"k0=v1&k1=v1"
  • 每个接口均以其接口名{method}作为计算{resource}的一个参数值(字母小写),参数名为method
  • 若接口body不为空,则需要加入名为contmd5的参数,值为body的md5值
  • 若接口url的query中需要加入其他关键参数,也需要列入到计算{resource}参数列表中

3. 设置直播转码模板

该接口用于创建转码模板,在直播rtmp推流时可以参数指定使用特定模板对直播流进行多分辨率转码。 http post发起创建请求,body和应答为json格式 method:preset 参与计算签名resource的指定关键参数:method,contmd5,uniqname,即:

{resource} = "contmd5=xxx&method=preset&uniqname=xxx"

请求body:

{
    //应用名称,由2~32位字母、数字、下划线组成
    "app":"live",
    //模板名称,必选,用户命名空间唯一,由2~32位字母、数字、下划线组成
    "preset": "live_for_demo",
    //模板描述
    "description": "demo", 
    "output":[
    {
        //转码视频输出格式关键参数集合,必选
        "format":{...},
        //推流开关参数集合,可选
        "switch":{...}
    },
    //可以继续填充output成员,同时发起多个转码任务
    //但outpput_format不可重复,即同一输出分辨率只可以设置一次
    {   
        "format":{...}
    }],
    //视频其它设置,可选
    "video": {...},
    //音频其它设置,可选
    "audio": {...}
}

返回结果

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,
            ),
            'switch' => array(                                                       
                'sn' => 1,
            ),
        ),
    ),
);

//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 = 'user_secretkey';
$secretkey = 'user_secretkey';
//过期时间
$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";
}

4. 获取模板列表

http get发起获取请求,应答为json格式 method: getpresetlist 参与计算签名resource的指定关键参数:method,uniqname,app

{resource} = "app=xxx&method=getpresetlist&uniqname=xxx"

请求参数:

参数名 是否必须 描述
app 由2~32位字母、数字、下划线组成

返回结果body:

{
    //int, 错误码
    "errno":xxx,
    //string, 处理状态错误描述
    "errmsg":xxx
    //模板列表
    "presetlist":[
        {
            //模板名称
            "preset":"live_for_demo",
            //模板描述
            "description":"demo"
        },
        {},
        ...
    ], 
}

接口调用示例代码php版

//接口api名称
$method = 'getpresetlist';
//者业务类型标识
$uniqname = 'test';
//业务app名称
$app = 'live';
//用于签名的参数,字典序排列
$arrrsrc = array(
    'app'       => $app,
    'method'    => $method,
    'uniqname'  => $uniqname,
);
$strrsrc = http_build_query($arrrsrc);
//开发者ak/sk
$accesskey = 'user_secretkey';
$secretkey = 'user_secretkey';
//过期时间
$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,
    'app'       => $app,
    'uniqname'  => $uniqname,
);
$qstr = http_build_query($params);

//设置并发送http get请求
$srvurl = "http://videodev.ksyun.com:8980/livetran/$method?$qstr";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $srvurl);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
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";
}

5. 获取模板详情

http get发起获取请求,应答为json格式 method: getpresetdetail 参与计算签名resource的指定关键参数:method,uniqname,app,preset

{resource} = "app=xxx&method=getpresetdetail&preset=xxx&uniqname=xxx"

请求参数:

参数名 是否必须 描述
app 应用名称,由2~32位字母、数字、下划线组成
preset 模板名称,由2~32位字母、数字、下划线组成

返回结果body:

{
    //int, 错误码
    "errno":xxx,
    //string, 处理状态错误描述
    "errmsg":xxx
    //array, 模板详情
    "presetdetail":{
        //模板描述
        "description": "demo", 
        "output":[
            {
                //转码视频输出格式关键参数集合,必选
                "format":{
                    //指定输出视频各项参数
                    "output_format":"xxx",
                    //自定义视频码率
                    "vbr":xxx,
                    //自定义音频码率
                    "abr":xxx,
                    //帧率,不大于30
                    "fr":xxx,
                    //音视频转码选项0,1,2,3
                    "remuxflag": 0
                }
            }
        ]
    }
}

接口调用示例代码php版

//接口api名称
$method = 'getpresetdetail';
//者业务类型标识
$uniqname = 'test';
//业务app名称
$app = 'live';
//开发者自定义模板名称
$preset = '9999';
//用于签名的参数,字典序排列
$arrrsrc = array(
    'app'       => $app,
    'method'    => $method,
    'preset'    => $preset,
    'uniqname'  => $uniqname,
);
$strrsrc = http_build_query($arrrsrc);
//开发者ak/sk
$accesskey = 'user_secretkey';
$secretkey = 'user_secretkey';
//过期时间
$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,
    'preset'    => $preset,
    'app'       => $app,
    'uniqname'  => $uniqname,
);
$qstr = http_build_query($params);

//设置并发送http get请求
$srvurl = "http://videodev.ksyun.com:8980/livetran/$method?$qstr";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $srvurl);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
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";
}

6. 删除模板

http get发起删除请求,应答为json格式 method: delpreset 参与计算签名resource的指定关键参数:method,uniqname,app,preset

{resource} = "app=xxx&method=delpreset&preset=xxx&uniqname=xxx"

请求参数:

参数名 是否必须 描述
app 应用名称,由2~32位字母、数字、下划线组成
preset 模板名称,由2~32位字母、数字、下划线组成

返回结果

HTTP1.1 200 OK
"Content-type": "application/json"

{
    //int, 错误码
    "errno":xxx,
    //string, 出错信息
    "errmsg":"xxx"
}

接口调用示例代码php版

//接口api名称
$method = 'delpreset';
//者业务类型标识
$uniqname = 'test';
//业务app名称
$app = 'live';
//开发者自定义模板名称
$preset = '9999';
//用于签名的参数,字典序排列
$arrrsrc = array(
    'app'       => $app,
    'method'    => $method,
    'preset'    => $preset,
    'uniqname'  => $uniqname,
);
$strrsrc = http_build_query($arrrsrc);
//开发者ak/sk
$accesskey = 'user_secretkey';
$secretkey = 'user_secretkey';
//过期时间
$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,
    'preset'    => $preset,
    'app'       => $app,
    'uniqname'  => $uniqname,
);
$qstr = http_build_query($params);

//设置并发送http get请求
$srvurl = "http://videodev.ksyun.com:8980/livetran/$method?$qstr";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $srvurl);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
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";
}

7. 查询直播转码状态

http get发查询请求,应答为json格式 method: getstreamtranlist 参与计算签名resource的指定关键参数:uniqname,app,method,streamid

{resource} = "app=xxx&method=getstreamtranlist&streamid=xxx&uniqname=xxx"

请求参数:

参数名 是否必须 描述
app 应用名称,由2~32位字母、数字、下划线组成
streamid 直播推流名称,由2~128位字母、数字、下划线、或.-#@组成

返回结果

HTTP1.1 200 OK
"Content-type": "application/json"
{
    //int, 错误码
    "errno":xxx,
    //string,错误详情
    "errmsg":"xxxx",
    //string, 转码任务状态列表
    "tranlist":[
        {
            //int, 转码format
            "format":xxx,
            //int, 转码状态
            "status":xxx
        },
        {...},
        ...
    ]
}

接口调用示例代码php版

//接口api名称
$method = 'delpreset';
//者业务类型标识
$uniqname = 'test';
//业务app名称
$app = 'live';
//流名称
$streamid = '333';
//用于签名的参数,字典序排列
$arrrsrc = array(
    'app'       => $app,
    'method'    => $method,
    'streamid'  => $streamid,
    'uniqname'  => $uniqname,
);
$strrsrc = http_build_query($arrrsrc);
//开发者ak/sk
$accesskey = 'user_secretkey';
$secretkey = 'user_secretkey';
//过期时间
$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,
    'streamid'  => $streamid,
    'app'       => $app,
    'uniqname'  => $uniqname,
);
$qstr = http_build_query($params);

//设置并发送http get请求
$srvurl = "http://videodev.ksyun.com:8980/livetran/$method?$qstr";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $srvurl);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
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";
}

金山云,开启您的云计算之旅

免费注册