PHP使用CURL调用萤石云开放平台直播接口
序言
为了加强记忆,写的比较详细
关于萤石云开放平台
如果是自己测试的话,可以直接去萤石云官网,注册成为开发者,在 开发者服务->我的应用 里有萤石云官方给的测试用的AppKey和Secret,可以供开发者测试接口。
如果是做项目的话,客户应该有开发者账号,找客户要一下AppKey和Secret。
另外,还需要 设备 的序列号 和 通道号
整体逻辑
首先拿到 AppKey,Secret,序列号,通道号。有了AppKey和Secret就可以获取AccessToken。有了AccessToken,序列号,通道号,就可以获取直播地址了。
- AppKey
- Secret
- AccessToken
- 序列号:通道号
CURL
先说一下 curl
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);//$url为访问的接口地址
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);//访问方式POST
curl_setopt($ch, CURLOPT_POSTFIELDS, $parm);//向接口传递参数
//下面两条在访问https协议地址时会用上
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
$output = curl_exec($ch);//执行
curl_close($ch);
//这里是去掉json数据的bom头
if(preg_match('/^\xEF\xBB\xBF/',$output))
{
$output = substr($output,3);
}
$info = json_decode(trim($output),true);//得到数组形式的数据
调用萤石云开放平台接口
1.根据appKey和secret获取accessToken
接口地址:https://open.ys7.com/api/lapp/token/get
请求方式:POST
请求参数:appKey , Secret
具体代码
$appKey = $data['app_key'];
$secret = $data['secret'];
$curlPost = array("appKey"=>$appKey,"appSecret"=>$secret);
//把数组形式的参数转为‘appkey=....&secret=...'这种形式
$parm = http_build_query($curlPost);
$url = 'https://open.ys7.com/api/lapp/token/get';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $parm);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
$output = curl_exec($ch);
curl_close($ch);
if(preg_match('/^\xEF\xBB\xBF/',$output))
{
$output = substr($output,3);
}
//可获取accessToken和过期时间(过期时间为毫秒级时间戳)
$info = json_decode(trim($output),true);
2.开通直播功能接口
如果需要就调用这个接口,如果提示已经开通直播功能,可以直接调用获取直播地址的接口
接口地址:https://open.ys7.com/api/lapp/live/video/open
请求方式:POST
请求参数:accessToken , Source
Source就是[设备序列号]:[通道号],例如427734222:1
具体代码
$accessToken = $data['accessToken'];
$source = 序列号:通道号;
$curlPost = array("accessToken"=>$accessToken,"source"=>$source);
$parm = http_build_query($curlPost);
$url = 'https://open.ys7.com/api/lapp/live/video/open';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $parm);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
$output = curl_exec($ch);
curl_close($ch);
if(preg_match('/^\xEF\xBB\xBF/',$output))
{
$output = substr($output,3);
}
$info = json_decode(trim($output),true);//返回数据中code=200为操作成功
3.获取直播地址接口
接口地址:https://open.ys7.com/api/lapp/live/address/get
请求方式:POST
请求参数:accessToken , Source
Source就是[设备序列号]:[通道号],例如427734222:1
具体代码
$accessToken = $data['accessToken'];
$source = 序列号:通道号;
$curlPost = array("accessToken"=>$accessToken,"source"=>$source);
$parm = http_build_query($curlPost);
$url = 'https://open.ys7.com/api/lapp/live/address/get';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $parm);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
$output = curl_exec($ch);
curl_close($ch);
if(preg_match('/^\xEF\xBB\xBF/',$output))
{
$output = substr($output,3);
}
$info = json_decode(trim($output),true);
$info中有很多种直播地址,如果是在手机上播放的话,选
hls或hlsHd
以上
AccessToken的有效期为7天,再写个判断是否过期的接口就行了
前端需要萤石云插件UIKit Javascript
如果curl获取不到数据,仔细检查下curl_setopt()是否缺少
OVER
来源:CSDN
作者:耳东_晨
链接:https://blog.csdn.net/The_My_World/article/details/103705320