最近项目接触到和视频有关的功能,同事推荐了乐视云开放平台。了解后觉得还不错,可以一试,于是开始查询相关接口。
功能开发从15年11月3日开始,到2015年11月12日完成上传。基本功能也完毕。中间碰到了很多问题,这里把相关的代码整理一下,分享给有需要的人。
http://www.letvcloud.com/ 乐视云官网,开发前,你需要注册一个账号,获取到secret_key,方便后续开发。
一、视频上传。
联系官方技术后,收到了一个demo。我选用的web方式,修改部分代码后,完成了视频的上传。
demo下载地址:http://download.csdn.net/detail/happy7day/9265919
将demo中的html5Upload.js粘贴到项目中,在html页面中配置好路径,并修改uploadUrl的地址。
再将demo中lib文件夹中的Video.php粘贴到项目中,并修改video_init.php。
修改require文件的路径,再修改secretkey和user_unique
修改完成后,可以再加上自己的逻辑代码,将上传完成后返回的视频ID和视频唯一值存入数据库。
大家可以看到$videoid那里我做了一个减1的操作,是因为我保存传回的视频后,ID总是比真实ID大1,显示不正常,所以做了减1操作后就正常了,大家可以留意一下。
到这里,上传就结束了。
二、查询视频
http://help.letvcloud.com/Wiki.jsp?page=ResourceDownload
下载php sdk接口,粘贴到项目中
测试过程中可以参考http://help.letvcloud.com/Wiki.jsp?page=VideoManagement 视频的api和应用参数
需要注意的是sign的构造
调试工具使用 http://115.182.94.62/tools/index.php
此次测试用的是这个版本
LetvCloudV1.php
修改类文件的配置,将参数对应填上。
再修改类文件最后一个方法。
/**
* 获取HTTP请求结果
* @param $api API名称 , 如:video.get
* @param $apiParams API业务参数
* @return string
*/
public function httpCall($api,$apiParams){
//组装系统参数
$sysParams["api"] = $api;
$sysParams['format'] = $this->format;
//$sysParams['timestamp'] = time();
$sysParams['user_unique'] = $this->user_unique;
//$sysParams['timestamp'] = "1369300735578";
$sysParams['ver'] = $this->apiVersion;
//echo "<pre>";print_r($apiParams);exit;
//参数集合=系统参数+业务参数
$params = array_merge($sysParams, $apiParams);
//$params = $apiParams;
//构造请求URL
$resurl = '';
$resurl .= $this->restUrl;
//签名
//$params['sign'] = $this->generateSign($params);
$params['sign'] = $apiParams["sign"];
//参数放入GET请求串
foreach($params as $key=>$v)
{
if(!strpos($resurl, '?'))
{
$resurl .= "?{$key}=" . urlencode($v);
}
else
{
$resurl .="&{$key}=" . urlencode($v);
}
}
//echo htmlspecialchars($resurl);exit;
//发起HTTP请求
$respObj = $this->curl($resurl);
return $respObj;
}
最后这个方法修改的地方主要有两个,一个是timestamp的赋值,还有一个是$params['sign']的赋值。
修改这两个地方主要是因为调试发现传入参数不一致。不知道是不是接口版本的问题。
查,删,改视频,用到的都是这个方法,类文件中其他的方法使用后会报402错误,咨询过官方技术客服,但是还是不清楚具体的原因。
关于时间戳需要提前说一下,不可以使用time()直接获取,因为获取到的是10位的,而接口需要提供的是13位的。所以我找了个方法得到13位的时间戳,可以直接使用。
/**
*
* 返回一定位数的时间戳,多少位由参数决定
*
* @author 陈博
* @param type 多少位的时间戳
* @return 时间戳
*/
function getTimestamp($digits = false) {
$digits = $digits > 10 ? $digits : 10;
$digits = $digits - 10;
if ((!$digits) || ($digits == 10))
{
return time();
}
else
{
return number_format(microtime(true),$digits,'','');
}
}
每一次操作都要先实例化接口
include("../libs/LetvCloudV1.php");/*乐视云*/
$letvcloud=new LetvCloudV1();//创建对象
/**
* 获取单个视频信息
* @param int $video_id 视频id
* @return string
*/
$api="video.get";
$format="json";
//$timestamp=time();
$timestamp=getTimestamp('13');
$user_unique = "改成你们自己的";
$ver="2.0";
$secret_key = "改成你们自己的"; // 用户仪表盘上的私钥
$str1="api".$api."format".$format."timestamp".$timestamp."user_unique".$user_unique."ver".$ver."video_id".$videoid.$secret_key;
$md5sign=md5($str1);
$video_id=$videoid;
$apiParams=array();
$apiParams["api"]=$api;
$apiParams["format"]="json";
$apiParams["timestamp"]=$timestamp;
$apiParams["user_unique"]=$user_unique;
$apiParams["ver"]=$ver;
$apiParams["video_id"]=$video_id;
$apiParams["sign"]=$md5sign;
$videoinfo = $letvcloud->httpCall("video.get",$apiParams);
$jsonArray = json_decode($videoinfo,true);
//var_dump($jsonArray);
查询视频传递的签名原文字符串,因为不涉及到中文,所以不需要考虑编码的因素,但是编辑的时候就需要考虑了。
返回的json转换为数组后,大家可以根据数组传回的值自行赋值到页面上了。视频的查询就到这里。
三、视频的编辑
$txtvideoname=mb_convert_encoding($_POST["txtvideoname"],"UTF-8","GB2312");//页面传来的
$txtag=mb_convert_encoding($_POST["txtag"],"UTF-8","GB2312");//页面传来的
$txtinfo=mb_convert_encoding($_POST["txtinfo"],"UTF-8","GB2312");//页面传来的
$ispay=$_POST["hidispay"];//页面传来的
//构造sign
$api="video.update";
$format="json";
$timestamp=getTimestamp('13');
$user_unique = "改成你自己的";
$ver="2.0";
$secret_key = "改成你自己的"; // 用户仪表盘上的私钥
$str2="api".$api."format".$format."is_pay".$ispay."tag".$txtag."timestamp".$timestamp."user_unique".$user_unique."ver".$ver."video_desc".$txtinfo."video_id".$_POST["hidedit"]."video_name".$txtvideoname.$secret_key;
$md5sign= md5($str2);
$apiParams=array();
$apiParams["api"]=$api;
$apiParams["format"]=$format;
$apiParams["is_pay"]=$ispay;
$apiParams["tag"]=$txtag;
$apiParams["timestamp"]=$timestamp;
$apiParams["user_unique"]=$user_unique;
$apiParams["ver"]=$ver;
$apiParams["video_desc"] = $txtinfo;
$apiParams["video_id"]=$_POST["hidedit"];
$apiParams["video_name"]=$txtvideoname;
$apiParams["sign"]=$md5sign;
$videoupdate = $letvcloud->httpCall("video.update",$apiParams);
$jsonArray = json_decode($videoupdate,true);
if($jsonArray["code"]==0){
$msg_type=1;
show_msgbox("修改成功","url.php");exit();
}
在编辑视频中最重要的就是sign的构造。以及url的构造。
四、视频删除
if($delid){
$api="video.del";
$format="json";
$timestamp=getTimestamp('13');
$user_unique = "改成你自己的";
$ver="2.0";
$secret_key = "改成你自己的"; // 用户仪表盘上的私钥
$str1="api".$api."format".$format."timestamp".$timestamp."user_unique".$user_unique."ver".$ver."video_id".$delid.$secret_key;
$md5sign=md5($str1);
$video_id=$delid;
$apiParams=array();
$apiParams["api"]=$api;
$apiParams["format"]="json";
$apiParams["timestamp"]=$timestamp;
$apiParams["user_unique"]=$user_unique;
$apiParams["ver"]=$ver;
$apiParams["video_id"]=$video_id;
$apiParams["sign"]=$md5sign;
$videoinfo = $letvcloud->httpCall("video.del",$apiParams);
$jsonArray = json_decode($videoinfo,true);
if($jsonArray["code"]==0){
//改成你自己的逻辑删除操作
show_msgbox("删除成功","url.php");exit();
}
}
五、视频播放。
视频播放只需要提供一些固定参数就可以了,进入乐视云平台的控制台中找到视频列表,获取js代码,对视频唯一码进行动态赋值就可以正常播放显示了。
大家不懂的地方可以向技术客服提问。
因为现在还是初级版本,所以过程中有些地方不是很好理解,但是相信未来会越来越完善。