断点续传

原理

通过偏移量来实现断点续传

 

偏移量Offset

Offset头部变量标志当前上传文件完成的偏移量,Offset为0或者大于0的整型。

 

请求类型

HEAD
每一次HEAD类型请求,服务器总是会返回offset头部变量,标志当前上传完成的字节数。
PATCH
服务器通过PATCH类型请求接收文件上传的数据。所有PATCH请求必须使用Content-Type: application/offset+octet-stream.
上传节点
上传接口地址统一为http://upload.polyv.net:1080/files/

 

例子

创建文件
提交空的 POST 请求让服务器端创建一个待上传的文件. 需要在请求的Header增加两个变量:Final-Length和writeToken. 其中Final-Length为文件大小,writetoken是polyv后台的上传授权码。
Request:
POST /files HTTP/1.1
Host: upload.polyv.net
Final-Length: 100
writeToken: Y07Q4yopIVXN83n-MPoIlirBKmrMPJu0
Response:
HTTP/1.1 201 Created
Location: http://upload.polyv.net:1080/files/sl8da4jjbx28aac52069409bc8f6bf6e_s
Response会返回一个新的上传地址Location附带到Header里面,其中files后面的(sl8da4jjbx28aac52069409bc8f6bf6e_s)则为视频vid。 上传需要附带POST的参数:
标题 title 默认为notitle
标签 tag 默认为空
描述 desc 默认为空
扩展名 ext:(mp4,mov,avi等) 默认为bin
分类 cataid 默认为1,即用户上传空间的分类根目录
时间戳 ts 
签名 sign 根据将secretkey和时间戳按照顺序拼凑起来的字符串进行MD5计算得到的小写MD5值
哈希值 hash 根据将时间戳和writeToken按照顺序拼凑起来的字符串进行MD5计算得到的小写MD5值
用户ID userid POLYV账号的用户ID
续传
利用 HEAD request 取得Offset变量,决定从哪个地方恢复上传。下面例子演示从100字节的文件,从第70个字节中断后,继续上传。
Request:
HEAD /files/sl8da4jjbx28aac52069409bc8f6bf6e_s
HTTP/1.1
Host: upload.polyv.net
Response:
HTTP/1.1 200 Ok
Offset: 70
返回offset为70, 客户端开始用PATCH请求恢复上传剩余的30字节。
Request:
PATCH /files/sl8da4jjbx28aac52069409bc8f6bf6e_s
HTTP/1.1
Host: upload.polyv.net
Content-Type: application/offset+octet-stream
Content-Length: 30
Offset: 70
Response:

HTTP/1.1 200 Ok

 

示例源码

IOS上传源码
Java上传源码

点击在线演示

以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...

使用uploadify插件上传视频

下载国外开源的uploadify插件包flash版(uploadify官网),解压之后把uploadify目录放入网站根目录。uploadify插件的官方文档,可以点击这里查看,以下是通过uploadify插件调用保利威视上传本地视频接口的示例代码:
<script src="http://apps.bdimg.com/libs/jquery/2.1.1/jquery.js"></script><script src="uploadify/jquery.uploadify.min.js"></script>
<script>// <![CDATA[
$(function() {
        $.fileupload1 = $('#fileupload1').uploadify({
            'auto' : false,
            'formData' : {
                'fcharset' : 'ISO-8859-1',
                'writetoken' : 'aRTUQVx1Cikcpxq-oPcz40u14LHwd1zf',
                'cataid':'1',
                'JSONRPC'     : '{"title": "这里是标题", "tag": "标签", "desc": "视频文档描述"}'
            },
            'buttonText': '选择上传文件',
            'fileSizeLimit' : '3000MB',
            'fileTypeDesc' : '视频文件',
            'fileTypeExts' : '*.avi; *.wmv; *.mp4;*.mp3; *.mov; *.flv; *.mkv; *.rmvb',//文件类型过滤
            'swf'      : '../uploadify/uploadify.swf',
            'multi':true,
            'successTimeout':1800,
            'queueSizeLimit':100,
            'uploader' : 'http://v.polyv.net/uc/services/rest?method=uploadfile',
            //onUploadSuccess为上传完视频之后回调的方法,视频json数据data返回,
            //下面的例子演示如何获取到vid
            'onUploadSuccess':function(file,data,response){
                var jsonobj=eval('('+data+')');               
                alert(jsonobj.data[0].vid + " - " + jsonobj.data[0].playerwidth + " - " + jsonobj.data[0].duration);
            }
        });
    });
// ]]></script>
仅限2G以下视频上传,上传之后api会回调,返回视频数据data,为json格式。 先把返回结果文本转换为json对象,var jsonobj=eval('('+data+')'); 假设需要获取视频vid,则调用: jsonobj.data[0].vid flash播放地址: jsonobj.data[0].swf_link

更多字段:

字段 说明
error 错误提示
swf_link 返回flash连接
tag 视频标签
mp4 MP4源文件
playerwidth 视频宽度
title 标题
duration 时长
first_image 视频首图
times 点击次数
context 视频描述
original_definition 最佳分辨率
images 视频截图
playerheight 视频高度
context 内容
ptime 上传时间
vid 视频id
cataid 分类id, 如1为根目录
以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...

上传视频的预览图

upFirstImage

    作用:上传并更改视频的预览图

URL

    http://v.polyv.net/uc/services/rest?method=upFirstImage

支持格式

    JSON

HTTP请求方式

    POST

请求数限制

    TRUE

请求参数

参数名必选类型及范围说明
writetokentruestring用户的上传钥匙
vidtruestring要修改的视频ID
Filedatafalsefile用户上传的图片文件:.jpg,.png
formatfalsestring默认返回json格式,如果format=xml返回xml格式
jsonpfalsestring 例如,正常情况{error:0,data:""},加jsonp=a后返回a({error:0,data:""})

注意事项

    返回错误列表
返回说明
0无错误
1找不到writetoken关联的user
2文件为空或者writetoken为空
3提交的json名字JSONRPC为null
4提交文件格式不正确
5readtoken为空
6分页输入出错
7vid不能为空
8找不到方法名

返回结果

<?xml version="1.0" encoding="UTF-8"?>
<xml>
        <error>0</error>
        <data>true</data>    
</xml>

JSON示例

{"error":"0","data":true}

字段说明

字段说明
error错误提示
data返回成功或失败
以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...

上传问答

参数描述(以下参数都必须提交

1 writetoken 用户上传的钥匙 
2 vid 视频的id
3 seconds 问题出现的秒数(第seconds秒)
4 question 问题描述
5 choices  json格式备选选项,四个 ,正确答案需要加多一个"right_answer":1 例如:'[{"answer":"100"},{"answer":"22","right_answer":1},{"answer":"30"},{"answer":"45"}]'
6 answer 回答正确时候的解答详情
7 wrongAnswer 回答错误时候的解答详情
8 wrongShow 答错是否显示解答详情 1为显示,0不显示
9 wrongTime 答错退回秒数(第wrongTime秒),-1不回退
10 examId 测试问题Id,为空的时候新创建一个,不为空则修改这条问题
11 right_answer 类型为整型,1表示正确答案,0表示错误答案

 

在页面中加入

<script type="text/javascript">
function updateExam(){
  $.post("http://v.polyv.net/uc/services/rest", {
      method:"saveExam",
      writetoken:'Y07Q4yopIVXN83n-MPoIlirBKmrMPJu0',
      vid:'sl8da4jjbx02064017aff9989bfb824f_s',
      examId:'',//为空新增问题
      seconds:10,
      question:'10+12=?',
      choices:'[{"answer":"100"},{"answer":"22","right_answer":1},{"answer":"30"},{"answer":"45"}]',
      skip:"true",//设置是否可以跳过问答,true表示可以跳过,不添加这个参数默认没有跳过的功能
      answer:'第二个答案,解答',//回答正确时候的解答详情
      wrongAnswer:'答错了',//回答错误时候的解答详情
      wrongShow:1,//答错是否显示解答详情
      wrongTime:10//答错退回第十秒,-1不回退
   },function(result){
        var data = eval(result);     
        if(data.error==0){
            alert('成功,examId:'+data.examId);
        }else{
            alert('失败了');
        }
   });
}
</script>

<input type="button" onclick="javascript:updateExam()" value="点击"/>
以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...

上传视频字幕

参数描述

1 writetoken 用户上传的钥匙 
2 vid 视频的id
3 title srt显示名,为空则用文件名代替
4 Filedata srt文件

在页面中加入

link rel="stylesheet" type="text/css" href="/uploadify/uploadify.css">
<script type="text/javascript" src="/javascripts/libs/jquery.min.js"></script>
<script type="text/javascript" src="/uploadify/jquery.uploadify.min.js"></script>

<script type="text/javascript">
  $(function() {
        $.fileupload1 = $('#fileupload1').uploadify({
          'auto'     : false,
            'formData'     : {
                'writetoken' : 'Y07Q4yopIVXN83n-MPoIlirBKmrMPJu0',
                'vid'     : 'sl8da4jjbx7e220f1c15213f9f04782e_s',
              'title' : ''
            },
           'buttonText': '选择上传文件',
           'fileSizeLimit' : '10MB',//上传文件大小限制
           'fileTypeDesc' : '视频文件',
           'fileTypeExts' : '*.srt;',//文件类型过滤
            'swf'      : '/uploadify/uploadify.swf',
            'uploader' : 'http://v.polyv.net/uc/services/rest?method=uploadSRT',
            'onUploadSuccess':function(file,data,response){

              var jsonobj=eval('('+data+')');
              if(jsonobj.error==0){
                  alert("srt uploaded!");
              }

            }
        });
  });
</script>

<input type="file" name="Filedata" id="fileupload1" />
<input type="button" onclick="javascript:$('#fileupload1').uploadify('upload')" value="点击上传"/>

 

以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...

POLYV Web上传插件(V1.0)

使用POLYV Web上传插件,首先在页面上做一个上传按钮。

<input type="button" id="upload" value="上传"></input>

接下来,引用POLYV Web上传插件的js,初始化上传参数并新建一个上传示例。
上传参数解释:
cataid:上传目录id;
luping:开启视频课件优化处理,对于上传录屏类视频清晰度有所优化;
state:自定义参数,可以通过回调通知接口抓取到该字段;
keepsource:源文件播放(不对源文件进行编码)。

var obj = {
    uploadButtton: "upload",   //打开上传控件按钮id
    userid : "sl8da4jjbx",
    ts : "1470708600000",
    hash : "66983f12660727d5767ca397f52e54ca",
    cataid:'1352947888026',
    sign: "fa36e05987b4b7c3b150003dd1122b30",
    luping: 1, //开启课件优化
    extra: {
        state: 'hellopolyv',//自定义参数,可以通过回调通知接口抓取到该字段
        keepsource: '1' //源文件播放(不对源文件进行编码)
            }
   }
    var upload = new PolyvUpload(obj);

hash的值,是根据将13位的毫秒级时间戳和writeToken按照顺序拼凑起来的字符串进行MD5计算得到的值,如:

<?php
$ts = time()*1000;
$writeToken = "Y07Q4yopIVXN83n-MPoIlirBKmrMPJu0";
$plain = $ts.$writeToken;
$hash = md5($plain);
?>

sign的值,是根据将secretkey和13位的毫秒级时间戳按照顺序拼凑起来的字符串进行MD5计算得到的值,如:

<?php
$ts = time()*1000;
$secretkey = "DFZhoOnkQf";
$sign = md5($secretkey.$ts);
?>

由于时间戳的有效期为3分钟,为了避免停留在同一个页面3分钟后,无法在同一个页面使用该上传插件的功能,需要客户端页面每隔3分钟刷新获取最新的ts、hash、sign的值,并调用插件的update方法更新数据。

//前端js每隔3分钟去调用reload.php去获取最新的ts、hash、sign
//并通过上传插件的update方法去更新数据
<script type="text/javascript">
    setInterval(function(){
       $.getJSON( "reload.php?callback=?", function( data ) {
        upload.update(data);

       });
     },3*60*1000);
</script>
//服务端reload.php的源码示例,用来输出ts、sign、hash的值
<?php
$callback = $_GET["callback"];
$userid = "sl8da4jjbx";
$ts = time()*1000;
$secretkey = "DFZhoOnkQf";
$sign = md5($secretkey.$ts);

$writeToken = "Y07Q4yopIVXN83n-MPoIlirBKmrMPJu0";
$plain = $ts.$writeToken;
$hash = md5($plain);
?>

<?php echo $callback;?>({
ts:'<?php echo $ts;?>',
sign:'<?php echo $sign;?>',
hash:'<?php echo $hash;?>'
});

如果需要在前端页面中显示服务器返回的响应信息,可以点击”上传”——“视频列表”——“返回视频信息”触发response事件,需要在初始化上传参数中加上response事件参数,并在页面中加上对应的文本框元素。如果还需要在点击“返回视频信息”按钮时自动关闭弹窗,可以加上upload.closeWrap()方法。

var obj = {
    response: function(json) {  
        var scriptdata = "<script>" +
        "var player = polyvObject('#plv_" + json.vid + "').videoPlayer({\n" +
                                    "'width':'690',\n"+
                                    "'height':'385',\n"+
                                    "'vid' : '" + json.vid + "'"+
                                "});<\/script>";
                                
        document.getElementById("textbody").value = document.getElementById("textbody").value + scriptdata;
        
        //如果需要关闭窗口
        upload.closeWrap();
        
    }
}

点击”上传”——“视频列表”——“返回视频信息”,可以在文本框看到POLYV云平台返回的response事件函数中的data数据。12

示例可点击参考:POLYV Web上传插件
示例源码:POLYV_uploadPlugin.zip

以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...

视频远程同步工具

对于远程服务器上的视频文件,Polyv有一个远程抓取接口, 不过批量视频抓取,可以采用视频远程同步工具。

导入任务

先用文本编辑器创建文件,整理好视频的链接和对应的标题逗号分隔,每一行一条列表,保存为csv格式文件,如下图:csv在同步工具界面右上方按钮点击“导入任务”,选择视频要导入的分类目录,上传刚刚创建的csv文件。
(注:csv文件内容有中文,需要把csv文件保存为utf-8的编码格式,如下所示)
1

同步任务

上传完毕之后,软件会分析任务总数,剩下就是等待同步工具完成任务了。 grab

导出任务

等到任务同步全部完成,点击右侧导出按钮,可以导出抓取后的结果列表,文件格式为csv,每个视频一行,格式为”标题,vid,完成时间”用逗号隔开。export

以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...