修改原代码使网页腾讯视频播放器自动播放

是CC视频云平台对外开放的数据接口。利用这些API,可以对接CC视频的数据和功能。当前API的版本号为2.0,目前API仅对合作方开启,如果您想了解Spark
API或有使用API的需求,请通过CC视频后台申请,审核通过后方可使用。
获取账户信息
GET api/user
通过此接口,可以获取账户信息。请求示例如下所示:
返回结果格式(json或xml)
可选&&&注:默认返回xml格式内容
返回数据user包含如下字段:
用户空间信息
用户流量信息
space包含如下字段:
用户空间总量,单位G
用户空间剩余总量,单位G
用户空间使用总量,单位G
traffic包含如下字段:
用户流量总量,单位G
用户剩余流量大小,单位G
用户已使用流量大小,单位G
"account":"",
"version":"试用版",
"expired":"",
"total":2,
"remain":1.9,
"used":0.1
"traffic":{
"total":5,
"remain":4.8,
"used":0.2
&?xml version="1.0" encoding="UTF-8"?&
&account&&/account&
&version&&![CDATA[试用版]]&&/version&
&expired&&/expired&
&total&2&/total&
&remain&1.9&/remain&
&used&0.1&/used&
&total&5&/total&
&remain&4.8&/remain&
&used&0.2&/used&
&/traffic&
获取指定ID视频信息
第一版(原接口):
GET api/video
通过此接口,可以获取指定ID的视频信息(不包括已删除、正在处理中的视频)。请求示例如下所示:
返回结果格式(json或xml)
可选&&&注:默认返回xml格式内容
返回数据video包含如下字段:
视频时长,单位秒
视频分类ID
视频截图地址
imageindex
视频截图序号
image-alternate
视频截图排列信息
image-alternate包含如下字段:
视频截图排列序号
视频截图地址
"id":"123456",
"title":"测试",
"desp":"test",
"tags":" spark test ",
"duration":2,
"category":"123456",
"image":"/1.jpg",
"imageindex":1,
"image-alternate":[
"index":0,
"url":"/0.jpg"
&?xml version="1.0" encoding="UTF-8"?&
&title&&![CDATA[视频标题]]&&/title&
&desp&&![CDATA[视频描述]]&&/desp&
&tags&&![CDATA[标签1 标签2 标签3]]&&/tags&
&duration&12345&/duration&
&category&12345&/category&
&image&/abc.jpg&/image&
&imageindex&1&/imageindex&
&image-alternate&
&index&0&/index&
&url&/abc0.jpg&/url&
&/image-alternate&
&image-alternate&
&index&1&/index&
&url&/abc1.jpg&/url&
&/image-alternate&
GET api/video/v2
通过此接口,除了获取原接口所有信息,还可以获取视频转码文件大小。请求示例如下所示:
返回结果格式(json或xml)
可选&&&注:默认返回xml格式内容
返回数据video包含如下字段:
视频时长,单位秒
视频分类ID
视频截图地址
imageindex
视频截图序号
image-alternate
视频截图排列信息
definition
视频文件大小信息
image-alternate包含如下字段:
视频截图排列序号
视频截图地址
definition包含如下字段:
definitionlevel
视频清晰度值
definitiondesc
视频清晰度描述
terminaltype
终端类型(0:PC端,10:移动端)
"id":"123456",
"title":"测试",
"desp":"test",
"tags":" spark test ",
"duration":2,
"category":"123456",
"image":"/1.jpg",
"imageindex":1,
"image-alternate":[
"index":0,
"url":"/0.jpg"
"definition": [
"definitionlevel": 2,
"definitiondesc": "高清",
"terminaltype": 0,
"filesize": 6587147
&?xml version="1.0" encoding="UTF-8"?&
&title&&![CDATA[视频标题]]&&/title&
&desp&&![CDATA[视频描述]]&&/desp&
&tags&&![CDATA[标签1 标签2 标签3]]&&/tags&
&duration&12345&/duration&
&category&12345&/category&
&image&/abc.jpg&/image&
&imageindex&1&/imageindex&
&image-alternate&
&index&0&/index&
&url&/abc0.jpg&/url&
&/image-alternate&
&image-alternate&
&index&1&/index&
&url&/abc1.jpg&/url&
&/image-alternate&
&definition&
&definitionlevel&0&/definitionlevel&
&definitiondesc&普通&/definitiondesc&
&terminaltype&0&/terminaltype&
&filesize&2839461&/filesize&
&/definition&
GET api/video/update
通过此接口,可以编辑指定ID的视频信息(不包括已删除、正在处理中的视频)。请求示例如下所示:
视频标题,长度限制为0~40个字符。
视频标签,标签之间用空格区分。单个标签字符长度0~10,标签字符总长度0~20,超出部分自动截取。
description
视频描述,长度限制为0~200个字符。
categoryid
视频分类ID
视频播放地址
可选&&&注:若不需编辑播放地址,请勿加入此参数。
imageindex
参数为视频封面截图序号
可选&&&注:若不需编辑视频封面截图序号,请勿加入此参数。
返回结果格式(json或xml)
可选&&&注:默认返回xml格式内容
返回数据video包含如下字段:
视频分类ID
视频播放页面地址
imageindex
视频截图序号
删除视频信息
GET api/video/delete
通过此接口,可以删除指定ID的视频信息(不包括处理中视频)。请求示例如下所示:
返回结果格式(json或xml)
"result":"OK"
&?xml version="1.0" encoding="UTF-8"?&
&result&OK&/result&
获取视频分类信息
GET api/video/category
通过此接口,可以获取视频分类信息。请求示例如下所示:
返回结果格式(xml或json)
可选&&&注:默认返回xml格式内容
注:返回结果中的 level 包括 BASIC 和 PREMIUM,BASIC 中只包含一个默认父分类,无法创建自定义父分类, PREMIUM 版本中包含用户创建的父分类
返回数据video包含如下字段:
视频分类等级
视频分类信息
category包含如下字段:
sub-category
子分类信息
sub-category包含如下字段:
子分类名称
"level":"PREMIUM",
"category":[{
"name":"category1",
"sub-category":[{
"name":"sub category1"
&?xml version="1.0" encoding="UTF-8"?&
&level&BASIC&/level&
&category&
&id&123&/id&
&name&&![CDATA[category1]]&&/name&
&sub-category&
&id&456&/id&
&name&&![CDATA[sub category1]]&&/name&
&sub-category&
&/category&
创建视频分类信息
GET api/category/create
通过此接口,可以创建视频分类信息。请求示例如下所示:
super_categoryid
一级分类ID
可选&&&注:若为空,创建一级分类
返回结果格式(xml或json)
可选&&&注:默认返回xml格式内容
返回数据category包含如下字段:
super-category-id
"category":{
"name":"分类1",
"super-category-id":"123"
&?xml version="1.0" encoding="UTF-8"?&
&category&
&name&&![CDATA[分类1]]&&/name&
&super-category-id&123&/super-category-id&
&/category&
GET api/category/update
通过此接口,可以编辑已有的视频分类信息。请求示例如下所示:
categoryid
视频分类ID
返回结果格式(xml或json)
可选&&&注:默认返回xml格式内容
返回数据category包含如下字段:
super-category-id
删除视频分类信息
GET api/category/delete
通过此接口,可以删除已有的视频分类信息。请求示例如下所示:
categoryid
视频分类ID
返回结果格式(xml或json)
可选&&&注:默认返回xml格式内容
"result":"OK"
&?xml version="1.0" encoding="UTF-8"?&
&result&OK&/result&
获取视频列表
GET api/playlists
通过此接口,可以获取指定用户的视频列表信息。请求示例如下所示:
num_per_page
返回信息页面中,每页包含的视频个数。
可选&&&注:阈值为1~100
返回结果格式(xml或json)
可选&&&注:默认返回xml格式内容
返回数据playlists包含如下字段:
返回视频列表总数量
视频列表信息
playlist包含如下字段:
视频列表ID
视频列表名称
videocount
categoryid
"playlists":{
"total":100,
"playlist":[
"name":"列表名称1",
"videocount":2,
"categoryid":123
&?xml version="1.0" encoding="UTF-8"?&
&playlists&
&total&100&/total&
&playlist&
&name&&![CDATA[列表名称1]]&&/name&
&videocount&2&/videocount&
&categoryid&123&/categoryid&
&/playlist&
&/playlists&
创建视频列表
GET api/playlist/create
通过此接口,可以创建视频列表。请求示例如下所示:
视频列表名称
视频列表要添加的视频ID,用","分割
必选&&&注:","为英文半角
categoryid
视频分类ID
可选&&&注:若为空,为默认二级分类
返回结果格式(xml或json)
可选&&&注:默认返回xml格式内容
返回数据playlist包含如下字段:
视频列表ID
视频列表名称
categoryid
视频分类ID
video包含如下字段:
视频在列表中的序号
"playlist":{
"name":"列表名称1",
"categoryid":"",
"id":"123",
&?xml version="1.0" encoding="UTF-8"?&
&playlist&
&name&&![CDATA[列表名称1]]&&/name&
&categoryid&&/categoryid&
&id&123&/id&
&index&1&/index&
&/playlist&
GET api/playlist/update
通过此接口,可以创建视频列表。请求示例如下所示:
playlistid
视频列表名称
视频列表修改后名称
视频列表要添加的视频ID,用","分割
可选&&&注:","为英文半角
categoryid
视频分类ID
返回结果格式(xml或json)
可选&&&注:默认返回xml格式内容
返回数据playlist包含如下字段:
视频列表ID
视频列表名称
categoryid
视频分类ID
video包含如下字段:
视频在列表中的序号
删除视频列表
GET api/playlist/delete
通过此接口,可以删除指定的视频列表信息。请求示例如下所示:
playlistid
视频列表ID
返回结果格式(xml或json)
可选&&&注:默认返回xml格式内容
"result":"OK"
&?xml version="1.0" encoding="UTF-8"?&
&result&OK&/result&
获取视频播放代码
GET api/video/playcode
通过此接口,可以获取指定视频的视频播放HTML代码段。请求示例如下所示:
player_width
播放器宽度
player_height
播放器高度
是否自动播放
返回结果格式(xml或json)
返回数据video包括如下字段
嵌入网页的播放代码
"playcode":"&script src='/player?vid=E6A9&siteid=C3A27&autoStart=false&width=600&height=490&playerid=6EDE&playertype=1' type='text/javascript'&&/script&"
&?xml version="1.0" encoding="UTF-8"?&
&playcode&
&![CDATA[&script src='/player?vid=E6A9&siteid=C3A27&autoStart=false&width=600&height=490&playerid=6EDE&playertype=1' type='text/javascript'&&/script&]]&
&/playcode&
批量获取视频信息
第一版(原接口):
GET api/videos
通过此接口,可以批量获取视频信息(不包括已删除、正在处理中的视频)。请求示例如下所示:
videoid_from
起始视频ID,返回结果不包含该视频;若为空,则从第一个视频开始。
videoid_to
终止视频ID,返回结果包含该视频;若为空,则到最后一个视频为止。
num_per_page
返回信息页面中,每页包含的视频个数。
可选&&&注:阈值为1~100
返回结果格式(xml或json)
返回数据videos包含如下字段:
返回视频数量
video包含如下字段:
视频时长,单位秒
视频分类ID
视频截图地址
imageindex
视频截图序号
image-alternate
视频截图排列信息
image-alternate包含如下字段:
视频截图排列序号
视频截图地址
"videos":{
"total":100,
"title":"Video Title",
"desp":"Video Description",
"tags":"tag1 tag2 tag3",
"duration":12345,
"category":"12345",
"image":"/abc.jpg",
"imageindex":1,
"image-alternate":[
"index":0,
"url":"/abc0.jpg"
&?xml version="1.0" encoding="UTF-8"?&
&total&100&/total&
&title&&![CDATA[Video Title]]&&/title&
&desp&&![CDATA[Video Description]]&&/desp&
&tags&&![CDATA[tag1 tag2 tag3]]&&/tags&
&duration&12345&/duration&
&category&12345&/category&
&image&/abc.jpg&/image&
&imageindex&1&/imageindex&
&image-alternate&
&index&0&/index&
&url&/abc0.jpg&/url&
&/image-alternate&
&image-alternate&
&index&1&/index&
&url&/abc1.jpg&/url&
&/image-alternate&
GET api/videos/v2
通过此接口,除了获取原接口返回的信息,还在每个视频信息中添加了视频转码文件大小。请求示例如下所示:
videoid_from
起始视频ID,返回结果不包含该视频;若为空,则从第一个视频开始。
videoid_to
终止视频ID,返回结果包含该视频;若为空,则到最后一个视频为止。
num_per_page
返回信息页面中,每页包含的视频个数。
可选&&&注:阈值为1~100
返回结果格式(xml或json)
返回数据videos包含如下字段:
返回视频数量
video包含如下字段:
视频时长,单位秒
视频分类ID
视频截图地址
imageindex
视频截图序号
image-alternate
视频截图排列信息
definition
视频文件大小信息
image-alternate包含如下字段:
视频截图排列序号
视频截图地址
definition包含如下字段:
definitionlevel
视频清晰度值
definitiondesc
视频清晰度描述
terminaltype
终端类型(0:PC端,10:移动端)
"videos":{
"total":100,
"title":"Video Title",
"desp":"Video Description",
"tags":"tag1 tag2 tag3",
"duration":12345,
"category":"12345",
"image":"/abc.jpg",
"imageindex":1,
"image-alternate":[
"index":0,
"url":"/abc0.jpg"
"definition": [
"definitionlevel": 2,
"definitiondesc": "高清",
"terminaltype": 0,
"filesize": 6587147
&?xml version="1.0" encoding="UTF-8"?&
&total&100&/total&
&title&&![CDATA[Video Title]]&&/title&
&desp&&![CDATA[Video Description]]&&/desp&
&tags&&![CDATA[tag1 tag2 tag3]]&&/tags&
&duration&12345&/duration&
&category&12345&/category&
&image&/abc.jpg&/image&
&imageindex&1&/imageindex&
&image-alternate&
&index&0&/index&
&url&/abc0.jpg&/url&
&/image-alternate&
&image-alternate&
&index&1&/index&
&url&/abc1.jpg&/url&
&/image-alternate&
&definition&
&definitionlevel&0&/definitionlevel&
&definitiondesc&普通&/definitiondesc&
&terminaltype&0&/terminaltype&
&filesize&2839461&/filesize&
&/definition&
按分类获取视频信息
按分类获取视频信息:
GET api/videos/category
通过此接口,可以获取指定分类下的视频信息(不包括已删除、正在处理中的视频)。请求示例如下所示:
categoryid
视频分类ID
num_per_page
返回信息页面中,每页包含的视频个数。
可选&&&注:阈值为1~100
返回结果格式(xml或json)
返回数据videos包含如下字段:
返回视频数量
video包含如下字段:
视频时长,单位秒
视频分类ID
视频截图地址
imageindex
视频截图序号
image-alternate
视频截图排列信息
image-alternate包含如下字段:
视频截图排列序号
视频截图地址
"videos":{
"total":100,
"title":"Video Title",
"desp":"Video Description",
"tags":"tag1 tag2 tag3",
"duration":12345,
"category":"12345",
"image":"/abc.jpg",
"imageindex":1,
"image-alternate":[
"index":0,
"url":"/abc0.jpg"
&?xml version="1.0" encoding="UTF-8"?&
&total&100&/total&
&title&&![CDATA[Video Title]]&&/title&
&desp&&![CDATA[Video Description]]&&/desp&
&tags&&![CDATA[tag1 tag2 tag3]]&&/tags&
&duration&12345&/duration&
&category&12345&/category&
&image&/abc.jpg&/image&
&imageindex&1&/imageindex&
&image-alternate&
&index&0&/index&
&url&/abc0.jpg&/url&
&/image-alternate&
&image-alternate&
&index&1&/index&
&url&/abc1.jpg&/url&
&/image-alternate&
GET api/videos/search
通过此接口,可以搜索视频信息(不包括已删除、正在处理中的视频)。请求示例如下所示:
查询条件,不可为空。
格式:查询字段:查询内容 查询字段:TITLE 查询内容:查询关键字
注:格式中的“:”为英文半角 Example:q=TITLE:test
查询结果排序方式,不可为空。
格式:排序字段:排序方式 排序字段:CREATION_DATE、FILE_SIZE
排序方式:ASC、DESC
注:格式中的“:”为英文半角 Example: sort=CREATION_DATE:DESC
categoryid
二级分类ID
num_per_page
返回信息页面中,每页包含的视频个数。
返回结果格式(xml或json)
返回数据videos包含如下字段:
返回视频数量
video包含如下字段:
视频时长,单位秒
视频分类ID
creation-date
视频创建时间
视频文件大小,单位字节
视频截图地址
该接口为用户提供自编码完成视频上传功能,包括Flash和HTTP两种方式。
Flash视频上传
Spark API 需要 Flash 插件的版本在 10.1 以上方可正常使用,请确保 Flash 插件版本符合要求。
在上传视频的过程中,不需要与 Spark 平台进行 HTTP 通信,使用 JavaScript 和 Spark 提供的 Flash 进行交互即可完成。上传接口用到的所有 javascript 函数定义见下表:
on_spark_selected_file(file_name, file_size)
file_name: 上传文件名file_size: 上传的文件大小,单位字节
on_spark_upload_validated(status, videoid)
status: 验证结果videoid: 视频 id
on_spark_upload_progress(progress)
progress: 上传进度。正确时,0~100 之间的整数,包括 0 和 100;错误时,返回-1.
网页嵌入 Spark 提供的上传 Flash 时,需要传递下列参数:
Flash参数(flashvars)
progress_interval
回调进度函数的时间间隔,默认 1 秒
notify_url
视频处理完毕后的通知地址
上传视频流程
第一步,选择文件
Spark 提供一个透明的 Flash 进行文件上传,地址如下:
/flash/api/uploader.swf
由于它是透明的,所以可以置于任何一个 html 元素的上方而不影响的页面视觉效果。上传文件时,必须通过点击到该 flash 从而打开浏览对话框进行文件选择。 文件选择成功后,Flash 会调用页面中的on_spark_selected_file 函数,页面可以选择合适的方式处理该事件。
第二步,验证参数
当用户选择文件后,需将下面的参数按照 THQS 算法处理后传递给 Flash 的 start_upload 函数后,才能开始上传流程。首先要进行参数和权限的验证,通过 后才开始文件上传。
categoryid
视频标题,若值为空,则采用去后缀的文件名作为title
description
验证完成后,Flash 会调用 on_spark_upload_validated 函数传递验证结果以及视频 id。验证状态码的含义如下:
验证状态码
NETWORK_ERROR
Spark API 错误码
第三步,文件上传
文件开始上传后,Flash 会周期性调用 on_spark_upload_progress 函数来报告上传进度,间隔秒数由 progress_interval 参数指定。如果上传的进度为负数, 则说明发生网络错误,上传中断。返回 100 则表示上传成功。当返回 100 或者 -1 后,Flash 就不再调用该函数了。
第四步,回调
当处理完毕视频后(上传、转码、审核都完成后),Spark 平台会通过由参数 notify_url 指定的 HTTP/HTTPS 地址以 GET 方式发起回调。若用户网站地址使用HTTPS协议进行数据安全传输时,用户需保证其拥有的CA证书是合法的。
用户指定的 notify_url 符合以下四种 notify_url 格式之?即为合法:
1、http://domain
2、http://domain?data=****(data为用户自定义的参数)
3、https://domain
4、https://domain?data=****
若参数 notify_url 中携带有用户自定义的参数,则在进行回调通知时会将用户自定义的参数和下表中的参数?起以 THQS 方式进行加密。
视频 id,16位 hex 字符串
视频状态。”OK”表示视频处理成功,”FAIL”表示视频处理失败。
片长(单位:秒)
视频截图地址
视频处理失败有多种情况,例如视频文件异常、视频内容违规等等。
&?xml version="1.0" encoding="UTF-8"?&
&video&OK&/video&
当 notify_url 指定的接口返回上述 xml 时,Spark 会认为网站已经成功接收到了回调信息,不再进行重试。返回其它任何内容,Spark 视频平台会进行重试,重试的间隔会随着重试次数的增大而增大。若重试 7 次后,依然没有成功,则不再进行通知。因此,Spark 视频平台最多通知 8 次。这 8 次的通知时间距第一次的通知时间的差分别为:
[0,15s, 1m, 4m, 16m, 1h4m, 4h16m, 17h4m]
HTTP视频上传(断点续传)
1.创建视频上传信息
GET api/video/create
通过此接口,可以生成用户上传视频信息。请求示例如下所示:
此接口需使用THQS加密请求数据验证。具体算法见
description
categoryid
二级分类id,主账号可选
文件大小 单位Byte
notify_url
视频处理完毕的通知地址
返回结果格式(json或xml)
可选&&&注:默认返回xml格式内容
成功响应结果
返回数据uploadinfo包含如下字段:
servicetype
上传meta信息URL 对应
上传文件块URL 对应
失败响应结果
其他错误信息:
错误关键字
INVALID_REQUEST
用户输入参数错误
SPACE_NOT_ENOUGH
用户剩余空间不足
SERVICE_EXPIRED
用户服务终止
PROCESS_FAIL
服务器处理失败
TOO_MANY_REQUEST
访问过于频繁
PERMISSION_DENY
用户服务无权限
2.创建视频上传信息
GET servlet/uploadmeta
通过此接口,发送用户视频文件meta信息。接口支持断点续传。请求示例如下所示:
用户id,不可为空
断点续传请求时可为可选
视频文件vid
是否首次 first=1表示首次
断点续传为非首次first=2
断点续传请求时可为可选
视频文件md5
断点续传请求时为可选
视频文件大小 单位Byte
断点续传请求时为可选
servicetype
servicetype来源于 创建视频上传信息
接口返回值 断点续传请求时为可选
返回结果格式(json或xml)
可选&&&注:默认返回json格式内容
返回数据包含如下字段:
响应结果 0 成功 -1失败
错误信息 出错时会给出错误信息
已接收文件长度,单位 Byte
正确响应结果
"result": 0,
"msg": "success",
"received": 0
&?xml version="1.0" encoding="UTF-8"?&
&result&0&/result&
&msg&success&/msg&
&received&0&/received&
错误响应结果
"msg": "文件接收异常",
"received": 0
&?xml version="1.0" encoding="UTF-8"?&
&result&-1&/result&
&msg&文件写入错误&/msg&
&received&0&/received&
3.上传视频文件块CHUNK
POST servlet/uploadchunk
通过此接口,向服务器分块发送视频数据。接口支持断点续传。请求示例如下所示:
为保证效率,最大chunksize=4MB。
返回结果格式(json或xml)
可选&&&注:默认返回json格式内容
返回数据包含如下字段:
响应结果 0 成功 -1失败
错误信息 出错时会给出错误信息
已接收文件长度,单位 Byte
正确响应结果
"result": 0,
"msg": "success",
"received": 10240
&?xml version="1.0" encoding="UTF-8"?&
&result&0&/result&
&msg&success&/msg&
&received&10240&/received&
错误响应结果
"msg": "文件接收异常",
"received": 0
&?xml version="1.0" encoding="UTF-8"?&
&result&-1&/result&
&msg&文件写入错误&/msg&
&received&0&/received&
协议详解:
此接口使用POST方式将实际文件的指定部分二进制数据发送到服务器,
服务器会返回已接收到的实际文件长度,当服务器返回文件长度等于发送文件长度时即文件已发送完成。
标准协议:Content-Range部分
POST协议详解示例
HTTP协议需要用户修改 header中Content-Range内容。
Content-Range: bytes x-y/z
x 表示该段数据在文件中的开始位置==上次请求返回received数值
y 表示该段数据在文件中的结束位置
z 表示文件总长度
提醒:y表示文件索引下标位置,所以有
y <= z - 1
(binary)部分为文件部分块二进制内容
##### 报文格式
POST /servlet/uploadchunk HTTP/1.1
Accept: text/*
Content-Type:multipart/form- boundary=----------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7
User-Agent: Mozilla/5.0 (M Intel Mac OS X 10_9_4)
Content-Length: 421
Connection: Keep-Alive
Cache-Control: no-cache
Content-Range: bytes 0-100/500
------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7
Content-Disposition: form-name="file";filename="MyFile.jpg"
Content-Type: application/octet-stream
------------Ij5GI3GI3ei4GI3ei4KM7GI3KM7KM7--
使用步骤:
用户调用返回数据
并提取vid,metaurl,chunkurl等返回数据。
用户调用(metaurl)将文件描述等信息发送到服务器。
用户反复调用(chunkurl)将文件实际数据发送到服务器直到全部发完。
如果调用(chunkurl)中间出现中断,可使用断点续传方式(metaurl)获取已发文件长度后继续调用(chunkurl)将文件发送完成。
Player API
利用 Player API 与 CC视频播放器进行交互,可以改变播放器界面、实现一些增值功能。
目前仅限于Flash播放器,FlashPlayer插件版本要求为10.1及以上,播放器页面代码中须允许播放器与页面脚本通信。
接口分为两种类型:方法、 回调;具体使用方法可参照。
方法,是指播放器开放的JavaScript函数,开发者可通过这些函数与播放器进行交互;回调,是指播放过程中,可触发的播放器事件。
seek(time)
定位至指定时间,参数time(单位:秒)
getDuration()
获取视频片长(单位:秒)
getPosition()
获取当前播放时间(单位:秒)
getQualities()
获取当前视频可?清晰度列表返回类型:Arrayeg. [{value:"0",label:"普通"},{value:"1",label:"清晰"}]
getTitle()
获取视频标题
setQuality(quality)
设置清晰度参数 quality 为 getQualities 方法获取的 value 值
setVolume(volume)
参数volume取值范围:[0-1].&&eg. setVolume(0.5)
normalScreen()
setConfig(config)
配置播放器参数config为配置对象,详细参照
on_cc_player_init(vid,objectId)
初始化播放器界面元素vid : 视频IDobjectId:页面中播放器的id值
HTML代码:
&object ... id="cc_A5FEB0EA05FDC"&
&param name="allowFullScreen" value="true" /&
&param name="allowScriptAccess" value="always" /&
&embed ... name="cc_A5FEB0EA05FDC" allowFullScreen="true"
allowScriptAccess="always" ... /&
JavaScript代码:
&script type="text/javascript"&
var player1 = getSWF( "cc_A5FEB0EA05FDC" );
function on_cc_player_init( vid, objectID ){
var player = getSWF( objectID );
( player1 == player );
player.start();
function getSWF( swfID ) {
if (window.document[ swfID ]) {
return window.document[ swfID ];
} else if (navigator.appName.indexOf("Microsoft") == -1) {
if (document.embeds && document.embeds[ swfID ]) {
return document.embeds[ swfID ];
return document.getElementById( swfID );
&lt/script&
通过配置以下各项参数,可以改变播放器的界面,开启更多的回调接口,还可以使用其他的功能,如自定义全屏、字幕功能。配置播放器的方法见,配置项如下所示:
control_enable
是否显示控制条0, 不显示;1, 显示;默认值为1
progressbar_enable
是否可操作进度条0, 不可操作;1, 可操作;默认值为1
loadingpic_enable
是否启用缓冲片头0, 不启用;1, 启用;默认值为1
loading_enable
是否显示loading图标0, 不显示;1, 显示;默认值为1
bigbutton_enable
是否显示非自动播放是播放器中间的开始按钮0, 不显示;1, 显示;默认值为1
tip_enable
是否可显示播放器顶部的提示条0,不显示;1, 显示;默认值为1
alert_enable
是否可显示播放器中间的提示面板0, 不显示;1, 显示;默认值为1
recommend_enable
是否启用播放结束后的推荐界面0, 不启用;1, 启用;默认值为1
keyboard_enable
是否启用按键操作0, 不启用;1, 启用;默认值为1
rightmenu_enable
是否启用右侧菜单0, 不启用;1, 启用;默认值为1
fullscreen_enable
是否使用自定义全屏操作默认0,设置为1可以替代Flash全屏
fullscreen_function
替代Flash全屏的JS函数的名称,这个函数需要返回一个值以确定当前状态(0, 正常;1,全屏)
注:使用此配置需将fullscreen_enable值设置为1
player_plugins
配置播放器插件,详见
on_player_stop
播放结束后回调JS函数的名称,默认为 on_spark_player_stop
on_player_pause
暂停播放时回调JS函数的名称,默认为 on_spark_player_pause
on_player_resume
暂停后继续播放时回调JS函数的名称,默认为 on_spark_player_resume
on_player_ready
播放器准备就绪回调JS函数的名称,默认为 on_spark_player_ready
on_player_start
开始播放时回调JS函数的名称,默认为 on_spark_player_start
on_player_seek
拖动播放时回调JS函数的名称。回调函数的参数:from,to
from, 定位之前的时间点(单位 秒);to, 定位指定的时间点(单位 秒)
on_player_buffering
缓冲开始或结束时回调JS函数的名称,回调函数的参数:flag
flag, 是否缓冲中; 取值:0, 否;1, 是
on_player_setquality
清晰度改变时回调JS函数的名称。回调函数的参数:quality
quality, 当前清晰度;取值:0, 普通;1, 清晰;2, 高清
on_player_volumechange
音量改变时回调JS函数的名称。回调函数的参数:vol
vol, 当前音量;取值范围:0-1
on_player_playerror
当播放失败时回调JS函数的名称。回调函数的参数:code
on_player_fullscreen
全屏或退出全屏时回调JS函数的名称。回调函数的参数:flag
是否全屏;取值:0, 否;1, 是
JavaScript代码:
&script type="text/javascript"&
function customFullScreen(){
//TODO 自定义全屏
function onPlayPaused(){
// 已暂停播放
function on_cc_player_init( vid, objectID ){
var config = {};
config.fullscreen_enable = 1; //启用自定义全屏
config.fullscreen_function = "customFullScreen"; //设置自定义全屏函数的名称
config.on_player_pause = "onPlayPaused"; //设置当暂停播放时的回调函数的名称
var player = getSWF( objectID );
player.setConfig( config );
function getSWF( swfID ) {
if (window.document[ swfID ]) {
return window.document[ swfID ];
} else if (navigator.appName.indexOf("Microsoft") == -1) {
if (document.embeds && document.embeds[ swfID ]) {
return document.embeds[ swfID ];
return document.getElementById( swfID );
插件是指基于播放器实现的可插拔的独立功能块,开发者可配置player_plugins来启用插件功能。
使用插件时,请在 player_plugins 配置项中配置插件的名称和参数,使用方法见。
字幕插件可以让播放器在播放视频的同时显示相关文字,启用时在配置中添加插件名称 Subtitle ,参数如下:
字幕文件地址,仅支持srt格式的字幕文件,此参数为必需参数
字体大小,默认20
字体颜色,默认0xFFFFFF
surroundColor
文字环绕颜色,默认0x000000
字体名称,默认Times New Roman
文本与播放区域底部的距离占播放区域高的百分比,默认 0.15
字幕文件编码,支持 utf-8 、gbk,默认 utf-8
字幕的背景色,默认为0xffffff
字幕的背景透明度,取值0到1,默认值是0
字幕的行与行间距,默认值是0,可赋值整数
注意事项:字幕文件所在的服务器根目录需要部署一个安全策略文件( crossdomin.xml ),使播放器能够跨域访问字幕文件。
了解更多关于安全策略文件可访问如下地址:
JavaScript代码:
&script type="text/javascript"&
function on_cc_player_init( vid, objectID ){
var config = {};
config.player_plugins = {
Subtitle : {
url : "http://yourdomain/subtitle.srt"
, size : 20
, color : 0xCCCCCC
, surroundColor : 0x0000FF
, bottom : 0.15
, font : "微软雅黑"
, code : "utf-8"
var player = getSWF( objectID );
player.setConfig( config );
播放器错误码
视频列表为空
无效的视频列表
列表模式视频信息加载失败
视频信息加载失败
视频审核中
用户流量已用尽
用户账号被锁
视频被屏蔽或删除
视频信息错误
无视频文件
当前域名不允许播放
授权播放验证未通过
切换清晰度失败
播放中播放失败
利用SDK可以对接CC视频云服务平台,进行视频上传和播放。目前上传仅对合作方开启,如果您有使用SDK的需求,请通过CC视频后台申请API
Key,审核通过后方可使用。
当前版本为2.3.1,此版本SDK支持iOS 5.0 及以上操作系统。
DWMoviePlayerController 模块继承于 MPMoviePlayerController,提供使用 userId、videoId、API KEY初始化方法,从CC视频云获取视频播放信息。
第一步,初始化 DWMoviePlayerController
Spark 提供一个透明的 Flash 进行文件上传,地址如下:
DWMoviePlayerController *player = [[DWMoviePlayerController alloc] initWithUserId:userId
andVideoId:videoId
key:apiKey];
DWMoviePlayerController *player = [[DWMoviePlayerController alloc] initWithUserId:userId key:apiKey];
player.videoId = videoId;
第二步,设置请求播放信息HTTP通信超时时间
player.timeoutSeconds = 20;
默认超时时间10秒。
第三步,设置block
DWMoviePlayerController 有以下block:
typedef void(^DWMoivePlayerGetPlayUrlsBlock)(NSDictionary *playUrls);
typedef void(^DWErrorBlock)(NSError *error);
@property (copy, nonatomic)DWMoivePlayerGetPlayUrlsBlock getPlayUrlsB
获取视频播放信息或播放过程中发生错误或失败时,回调该block。可以在该block内更新UI,如更改视频播放状态。
@property (copy, nonatomic)DWErrorBlock failB
其中 getPlayUrlsBlock 获取视频播放信息
player.getPlayUrlsBlock = ^(NSDictionary *playUrls) {
// [必须]判断 status 的状态,不为"0"说明该视频不可播放,可能正处于转码、审核等状态。
NSNumber *status = [playUrls objectForKey:@"status"];
if (status == nil || [status integerValue] != 0) {
NSLog("playUrlsBlock invalid");
// 保存playUrls 或 选择某种清晰度进行播放。
当SDK准备好视频播放信息时,会调用该block。你可以在该block中保存播放信息或实现播放逻辑。
获取的播放信息 NSDictionary *playUrls 为UTF-8编码,内容形如:
"status": 0,
"statusinfo": "正常",
"defaultquality": 10,
"qualityDescription": [@"清晰", @"高清"],
"qualities": [{
"quality": 10,
"desp": "清晰",
"playurl": "http://xxx./..."
"quality": 20,
"desp": "高清",
"playurl": "http://xxx./..."
表示这个视频在CC视频云上的当前的状态值。
只有当status为0时,该视频才可以播放。
statusinfo
是状态值的文字描述,如正处于转码、正在审核等。
defaultquality
默认清晰度值
qualityDescription
清晰度文字描述
不同清晰度播放url列表
清晰度数值
清晰度数值和清晰度文字描述
视频播放url
注意:CC视频的播放url具有时效性,你需要在每次播放时请求视频播放信息,以取得最新的视频播放url。
第四步,开始请求播放信息
[player startRequestPlayInfo];
播放流程的控制和
使用方法一致。这里以前文获取的播放信息做简单介绍。
将 DWMoviePlayerController 的 view 添加到你的UIViewController中
在 - (void)viewDidLoad {} 中
CGRect frame = CGRectZ
// 设置合适的 frame
UIView *videoBackgroundView = [[UIView alloc] initWithFrame:frame];
[self.view addSubview:videoBackgroundView];
player.view.frame = videoBackgroundView.
[videoBackgroundView addSubview:player.view];
[player prepareToPlay];
[player play];
[player pause];
[player play];
[player stop];
切换清晰度
[player stop];
NSString *playUrlString = @"..."; // 从视频播放信息 playUrls 中选择一种清晰度。
player.contentURL = [NSURL URLWithString:playUrlString];
[player prepareToPlay];
[player play];
DWUploader模块提供将本地视频文件上传至CC视频云的功能。上传视频时需提供userId、API KEY、视频标题、标签和简介。 DWUploader采用多个block与App进行交互,上传视频时你需创建一个上传实例,设置上传超时时间,设置各个block,如DWUploaderProgressBlock、DWUploaderFinishBlock等,在这些block中实现App的业务逻辑。
第一步,初始化 DWUploader
视频首次上传使用userId、API KEY、视频本地路径、视频标题、标签及简介初始化DWUploader。服务器根据这些信息为视频分配videoId、上传服务器等资源,通常把这些资源称为上传上下文。当视频上传被中断(如网络断开或用户暂停),可使用上传上文初始化DWUploader实现断点续传,若此时还未获取上传上下文,则使用首次上传初始化方式重新初始化上传。
首次上传视频初始化DWUploader
DWUploader *uploader = [[DWUploader alloc] initWithuserId:userId
andKey:apiKey
uploadVideoTitle:videoTitle
videoDescription:videoDescripton
videoTag:videoTag
videoPath:videoPath
notifyURL:nil];
断点续传初始化DWUploader
DWUploader *uploader = [[DWUploader alloc] initWithVideoContext:self.uploadContext];
注意:通常情况下,不可对同一视频多次使用第一种初始化方式初始化上传,这样会造成大量重复视频,增加你后期管理视频的同事的工作量,且CC视频会根据你的付费套餐对每天的上传次数有不同的限制,超过最大上传次数,当天便无法上传视频。
注意:视频标题不得为空,否则会导致上传失败。
第二步,设置上传HTTP通信超时时间
uploader.timeoutSeconds = 20;
默认超时时间为10秒。
若上传过程中产生HTTP通信超时,则会调用DWErrorBlock,可以在该block设置错误处理逻辑。
第三步,设置block
DWUploader有如下block:
typedef void (^DWUploaderFinishBlock)();
typedef void (^DWErrorBlock)(NSError *error);
typedef void (^DWUploaderVideoContextForRetryBlock)(NSDictionary *videoContext);
typedef void (^DWUploaderProgressBlock)(float progress, NSInteger totalBytesWritten, NSInteger totalBytesExpectedToWrite);
在该block获取上传进度,可以在block内更新UI,如更新上传进度条。
@property (copy, nonatomic)DWUploaderProgressBlock progressB
上传完成时回调该block,可以在block内更新UI,如将视频标记为上传完成。
@property (copy, nonatomic)DWUploaderFinishBlock finishB
上传失败时回调该block,可以在该block内更新UI,如将视频标记为上传失败。
@property (copy, nonatomic)DWErrorBlock failB
在该block内获取上传上下文,并保存上传上下文,用来实现断线续传。
@property (copy, nonatomic)DWUploaderVideoContextForRetryBlock videoContextForRetryB
当遇到网络问题或服务器原因时上传暂停,回调该block。
@property (copy, nonatomic)DWErrorBlock pausedB
第四步,开始上传
[uploader start];
视频上传控制
视频上传控制用来和UI进行交互,当用户点击开始上传、暂停、继续时,可以通过调用DWUploader的start、pause、resume方法实现对应的视频上传控制。
DWDownloader模块提供从CC视频云下载视频的功能,下载时需提供userId、API KEY、videoId及用来保存下载视频的本地文件路径。
注意:CC视频的下载url具有时效性,你需要在每次下载时重新初始化DWDownloader,以取得正确的下载url。
第一步,初始化 DWDownloader
DWDownloader *downloader = [[DWDownloader alloc] initWithUserId:userId
andVideoId:videoId
key:apiKey
destinationPath:videoPath];
第二步,设置下载HTTP通信超时时间
downloader.timeoutSeconds = 20;
默认超时时间为10秒。
下载过程中HTTP通信超时时,会调用failBlock下载失败的block。告知你下载超时。
第三步,设置block
DWDownloader有如下block:
typedef void (^DWErrorBlock)(NSError *error);
typedef void (^DWDownladerFinishBlock)();
typedef void (^DWDownloaderProgressBlock)(float progress, NSInteger totalBytesWritten, NSInteger totalBytesExpectedToWrite);
在该block获取下载进度,可以在block内更新UI,如更新下载进度条。
@property (copy, nonatomic)DWDownloaderProgressBlock progressB
下载完成时回调该block,可以在block内更新UI,如将视频标记为下载完成。
@property (copy, nonatomic)DWDownladerFinishBlock finishB
下载失败时回调该block,可以在该block内更新UI,如将视频标记为下载失败。
@property (copy, nonatomic)DWErrorBlock failB
第四步,开始下载
[downloader start];
第一步,初始化 DWDownloader
DWDownloader *downloader = [[DWDownloader alloc] initWithUserId:userId
andVideoId:videoId
key:apiKey];
第二步,设置下载HTTP通信超时时间
downloader.timeoutSeconds = 20;
默认超时时间为10秒。
下载过程中HTTP通信超时时,会调用failBlock下载失败的block。告知你下载超时。
第三步,设置getplayinfoblock
typedef void(^DWDownloaderGetPlayUrlsBlock)(NSDictionary *playUrls);
* @brief 获取视频下载信息。
@property (copy, nonatomic)DWDownloaderGetPlayUrlsBlock getPlayinfoB
通过次block获取视频下载信息,NSDictionary *playUrls的结构为:
playinfo : {
defaultdefinition = 10;
definitionDescription =
"\U6e05\U6670",
"\U9ad8\U6e05"
definitions =
definition = 10;
desp = "\U6e05\U6670";
playurl = "http://bm2.33./flvs/ca/Qxc52/uCrWqgNwgC-10.mp4?t=&key=8CEFBE5258FCA&upid=0415299";
definition = 20;
desp = "\U9ad8\U6e05";
playurl = "http://cm22.c110./flvs/ca/Qxc52/uCrWqgNwgC-20.mp4?t=&key=E2E295D6F21BADF3BD88C2&upid=0415299";
status = 0;
statusinfo = "\U6b63\U5e38";
第四步,调用获取方法
[downloader getPlayInfo];
第五步,初始化 DWDownloader
DWDownloader *downloader = [[DWDownloader alloc] initWithUserId:userId
andVideoId:videoId
key:apiKey
destinationPath:videoPath];
第六步,设置下载HTTP通信超时时间
downloader.timeoutSeconds = 20;
默认超时时间为10秒。
下载过程中HTTP通信超时时,会调用failBlock下载失败的block。告知你下载超时。
第七步,设置block
参考流程1中设置。
第八步,调用下载方法
[downloader startWithUrlString:(NSString *)urlString];
下载视频控制
视频下载控制用来和UI进行交互,当用户点击开始下载、暂停、继续时,可以通过调用DWDownloader的start、pause、resume方法实现对应的视频下载控制。
SDK Demo是使用SDK对接CC视频云的示例源码,Demo的设计旨在展示SDK各项功能的使用方法,如果希望应用获得更好的使用体验,可根据需求自行更改。
Demo采用代码绘制UI界面,这种方式利于精准控制,批量修改、多人协作。
第一步,设置账户信息
首先将你userId和API KEY填写在Demo工程下的Demo-Prefix.pch 中:
#define DWACCOUNT_USERID @"****************"
#define DWACCOUNT_APIKEY @"********************************"
并核对,确认填写无误。userId和API KEY信息会显示在 Demo app 的首页。
第二步,设置下载使用的videoId
你需要在DWDownloadViewController.m中修改generateTestData函数:
- (void)generateTestData
// 将@"..."替换成你要下载的videoId,可以添加多个。
self.videoIds = @[];
第三步,设置播放使用的videoId
你需要在DWPlayerViewController.m中修改generateTestData函数:
- (void)generateTestData
// 将@"..."替换成你要播放的videoId,可以添加多个。
self.videoIds = @[];
到此Demo配置完毕,已可以使用Demo测试你的账号。
播放器支持本地播放和网络播放,你可以使用DWCustomPlayerViewController播放CC视频云上的视频,也可以使用它播放本地文件,同时你也可以使用MPMoviePlayerController自带的播放器播放。与MPMoviePlayerController相比,DWCustomPlayerViewController提供了字幕、清晰度切换、画面尺寸调整、音量控制等功能;播放页面的UI元素全部是定制的、可修改的。
第一步,使用DWCustomPlayerViewController播放CC视频云上的视频
参见2.1.1 使用SDK播放CC视频云上视频的流程。
第二步,使用DWCustomPlayerViewController播放从CC视频云下载的视频
DWMoviePlayerController *player = [[DWMoviePlayerController alloc] init];
// 设置屏幕高宽比例为:适应屏幕大小,保持宽高比
player.scalingMode = MPMovieScalingModeAspectF
player.view.backgroundColor = [UIColor clearColor];
CGRect frame = CGRectZ
// 设置合适的 frame
UIView *videoBackgroundView = [[UIView alloc] initWithFrame:frame];
[self.view addSubview:videoBackgroundView];
player.view.frame = videoBackgroundView.
[videoBackgroundView addSubview:player.view];
// 设置本地播放NSURL
player.contentURL = [[NSURL alloc] initFileURLWithPath:self.videoLocalPath];
[player prepareToPlay];
[player play];
//[player pause];
//[player stop];
调试与反馈问题
SDK提供了DWLog模块用来打印HTTP通信日志,可以在App的任意位置开启或关闭 打印HTTP通信日志等功能。下面是DWLog的使用方法:
// 开启 打印HTTP通信日志 功能
[DWLog setIsDebugHttpLog:YES];
// 关闭 打印HTTP通信日志 功能
[DWLog setIsDebugHttpLog:NO];
当遇到无法播放、上传或下载时,首先要排除userId和API KEY是否有效,其次判断网络是否正常、是否已经连接。除此之外还可以通过 HTTP通信日志排查问题。
当前版本为2.3.1,此版本SDK支持Android 2.3及以上操作系统。
CC视频Android SDK是基于Android API实现的类库,支持Android2.3及以上版本,开发者可通过此SDK对接CC视频云服务平台,进行播放、上传和下载操作。
CC视频2.0版Android SDK包提供了以下文件:
CCSDK.jar,是集成SDK播放、上传和下载等功能的类库;
sdk_guide,是SDK的使用指南;
ccsdkdemo,是使用SDK对接CC视频云服务的示例源码,支持Android4.0及以上版本;
sdk_doc,是描述SDK内部接口信息的文档。
为确保SDK可正常使用,请按照以下操作配置项目环境:
1. 将CCSDK.jar添加到Android项目中,并配置当前项目可正确的引用此类库。
2. 配置项目的网络权限和文件读写权限:
&!-- 用于网络通信 --&
&uses-permission android:name="android.permission.INTERNET" /&
&!-- 用于存储已下载文件 --&
&uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&
3. CCSDK.jar已经过混淆处理,如果需要对应用进行混淆编译,请在混淆的配置文件中加入以下代码,以避免SDK被二次混淆编译。
-keep public class com.bokecc.sdk.mobile.**{*;}
-keep public interface com.bokecc.sdk.mobile.**{*;}
SDK视频播放由DWMediaPlayer类实现,DWMediaPlayer继承了Android的媒体播放器MediaPlayer类,并重载其prepare()和prepareAsync()方法。
使用DWMediaPlayer既可播放CC视频云服务平台下的视频(以下简称在线播放),也可播放本地视频。
使用SDK的在线播放功能时,仅需设置视频ID、账户ID、API KEY及Context(上下文信息)即可播放云端视频。具体实现方式如下:
String videoId ="123456";
Context context = getApplicationContext();
DWMediaPlayer player = new DWMediaPlayer();
// 设置视频播放信息
player.setVideoPlayInfo(videoId, "USERID", "API_KEY", context);
player.prepareAsync();
当播放器准备播放完成后,调用start()方法开始播放视频。同时,DWMediaPlayer提供了getVideoStatusInfo(获取视频状态),getVideoTitle(获取视频标题)等方法,开发者可根据需要在应用中展示相应的信息。
选择清晰度播放
DWMediaPlayer提供了getDefinitions()方法获取当前播放的视频清晰度列表。如果需要切换视频的清晰度,可根据当前视频的清晰度对DWMediaPlayer进行设置。具体实现方式如下,
// 获取清晰度列表
Map&String, Integer& definitions = player.getDefinitions();
// 获取某种清晰度对应的状态码
int definitionCode = definitions.get("definitionInfo");
// 设置播放清晰度
player.setDefinition(context, definitionCode);
在使用DWMediaPlayer播放本地视频时,与使用Android默认媒体播放器MediaPlayer播放本地视频的方法相同,仅需设置视频文件地址。具体实现方式如下,
String path = "/123456.MP4";
DWMediaPlayer player = new DWMediaPlayer();
//设置视频文件地址
player.setDataSource(path);
player.prepare();
当播放器准备完成后,调用start()方法即可开始播放视频。
DWMediaPlayer重载了MediaPlayer的setOnErrorListener()方法,如果需要在应用中提示错误信息,可调用此方法设置OnErrorListener。具体实现方式如下,
private OnErrorListener onErrorListener = new OnErrorListener() {
public boolean onError(MediaPlayer mp, int what, int extra) {
//TODO 处理错误信息
player.setOnErrorListener(onErrorListener);
SDK视频上传由Uploader类实现,Uploader通过HTTP协议与服务端进行通信,上传视频信息和视频文件。同时,SDK提供了上传回调接口UploadListener来监听视频上传流程,如果需要在应用中展示上传状态、上传进度等信息,可根据需要进行设置。
Uploader使用示例
使用Uploader上传前,请先了解Uploader的工作流程:
1. 创建Uploader实例,初始化视频信息,此时Uploader进入等待状态(WAIT)。
2. 当需要开始上传时,调用start()方法开始上传,此时Uploader进入上传状态(UPLOAD)。
3. 当需要暂停上传时,调用pause()方法。另外,在上传过程中可能出现网络异常问题,当出现此问题时,Uploader默认会暂停当前上传操作,进入暂停状态(PAUSE)。
4. 当需要恢复上传时,调用resume()方法,若无网络异常等问题,此时Uploader会重新上传视频文件。
5. 当需要取消上作时,调用cancel()方法,此时Uploader会进入等待状态(WAIT)。
创建Uploader实例需提供VideoInfo(视频信息)和 API KEY,使用示例如下:
VideoInfo videoInfo = new VideoInfo();
videoInfo.setTitle("title");
videoInfo.setTags("tag");
videoInfo.setDescription("description");
// 设置视频文件地址
videoInfo.setFilePath("filePath");
// 设置账号信息
videoInfo.setUserId("USERID"
// 设置回调信息
videoInfo.setNotifyUrl(“NOTIFY_URL");
Uploader uploader = new Uploader(videoInfo,"API_KEY");
// 开始上传
uploader.start();
VideoInfo是用来记录上传过程与视频相关的信息,具体介绍请参考sdk_doc,在初始化视频信息时,服务端需根据视频的标题、标签、描述等来创建视频,所以在使用VideoInfo创建Uploader实例时,请确保视频信息非空。
设置上传回调
Uploader在执行上传操作时,默认会检查是否设置了UploadListener。若已设置UploadListener,Uploader会回调UploadListener已实现的方法;若未设置,则不回调任何信息。UploadListener具体使用方法如下:
UploadListener uploadListener = new UploadListener(){
public void handleProcess(long range, long size, String videoId) {
// TODO 处理上传进度
public void handleException(DreamwinException exception, int status) {
// TODO 处理上传过程中出现的异常
public void handleStatus(VideoInfo videoInfo, int status) {
// TODO 处理上传回调的视频信息及上传状态
public void handleCancel(String videoId) {
// TODO 处理取消上传的后续操作
uploader.setUploadListener(uploadListenner);
SDK视频下载由Downloader类实现的,Downloader通过HTTP协议与服务端进行通信,获取视频下载地址。同时,SDK提供了下载回调接口DownloadListener来监听视频下载流程,如果需要向用户展示下载状态、下载进度等信息,可根据需要进行设置。
Downloader使用示例
在使用Downloader前,请先了解Downloader的工作流程:
1. 创建Downloader实例,初始化视频文件下载信息,此时Downloader进入等待状态(WAIT)。
2. 当需要开始下载时,调用start()方法,此时Downloader进入下载状态(DOWNLOAD)。
3. 当需要暂停下载时,调用pause()方法。另外,在下载过程中可能出现网络异常问题,当出现此问题时,Downloader默认会暂停下载操作,进入暂停状态(PAUSE)。
4. 当需要恢复下载时,调用resume()方法。若无网络异常等问题,此时Downloader会重新下载视频文件。
5. 当需要取消视频下载时,调用cancel()方法,此时Downloader会进入等待状态(WAIT)。
创建Downloader实例需提供视频存储文件,视频ID,账户ID和API KEY。示例如下:
File file = new File("/123456.MP4");
String videoId ="123456";
Downloader downloader = new Downloader(file, videoId,"USERID","API_KEY");
// 开始下载
downloader.start();
SDK视频下载需指定文件存储路径,所以在创建Downloader实例时,请提供正确的文件存储路径。
设置下载回调
Downloader在执行下载操作时,默认会检查是否设置了DownloadListener。若已设置DownloadListener,Downloader会回调DownloadListener接口已实现的方法;若未设置,则不回调任何信息。DownloadListener使用方法如下:
DownloadListener downloadListener = new DownloadListener(){
public void handleProcess(long start, long end, String videoId) {
// TODO 处理下载进度
public void handleException(DreamwinException exception, int status) {
// TODO 处理下载过程中发生的异常信息
public void handleStatus(String videoId, int status) {
// TODO 处理视频下载信息及相应状态
public void handleCancel(String videoId) {
// TODO 处理取消下载的后续操作
downloader.setDownloadListener(downloadListener);
选择清晰度下载
流程如下:
1. 创建Downloader实例;
2. 调用setOnProcessDefinitionListener()方式设置清晰度回调;
3. 调用getDefinitionMap()方法获取清晰度;
4. 根据获取的清晰度,调用setDownloadDefinition()方法设置想要的清晰度;
5. 调用start()下载指定清晰度。
获取清晰度时需实现OnProcessDefinitionListener接口的onProcessDefinition()方法,并调用Downloader的setOnProcessDefinitionListener()方法设置获取清晰度回调,获取清晰度的示例如下:
class DownloadDemo{
private HashMap&Integer, String&
private OnProcessDefinitionListener onProcessDefinitionListener = new OnProcessDefinitionListener(){
public void onProcessDefinition(HashMap&Integer, String& definitionMap) {
if(definitionMap != null){
dm = definitionM
Log.e("get definition error", "视频清晰度获取失败");
public void onProcessException(DreamwinException exception) {
Log.i("get definition exception", exception.getErrorCode().Value());
private getDefinition(){
downloader.setOnProcessDefinitionListener(onProcessDefinitionListener);
downloader.getDefinitionMap();
SDK Demo是使用SDK对接CC视频云服务的示例源码,目前支持Android4.0及以上版本。Demo的设计旨在展示SDK各项功能的使用方法,如果希望应用获得更好的使用体验,可根据需求自行更改。
在编译安装Demo前,请按照以下操作进行配置:
1. 设置帐户信息,在ConfigUtil类中配置USERID(帐户ID)和API KEY。
public final static String API_KEY = "API KEY";
public final static String USERID = "123456";
2. 添加播放列表,在PlayFragment类中配置playVideoIds(可播放的视频ID)。
//TODO 待播放视频ID列表,可根据需求自定义
private String[] playVideoIds = new String[] {
"111111"};
添加下载列表,在DownloadFragment类中配置downloadVideoIds(可下载的视频ID)。
//TODO 待下载视频ID,可根据需求自定义
private String[] downloadVideoIds = new String[] {
"111111"};
功能模块简介
Demo包含播放、上传和下载三个功能模块:
播放模块,展示了在线播放,屏幕缩放,清晰度切换,字幕等功能,具体实现请参考PlayFragment及MediaPlayActivity类。
上传模块,展示了视频上传的处理流程,及如何使用SDK进行后台上传,具体实现请参考UploadFragment及UploadService类。
下载模块,展示了视频下载的处理流程,及如何使用SDK进行后台下载,具体实现请参考DownloadFragment及DownloadService类。
调试与反馈问题
辅助调试工具
SDK提供HTTP通信日志调试功能。在使用SDK进行播放、上传、下载过程中,如果遇到与网络通信相关的问题,可通过设置HTTP日志的级别获取通信信息。使用示例如下:
// 设置HTTP通信日志级别
HttpUtil.LOG_LEVEL = HttpLogLevel.DETAIL;
默认日志级别为GENERAL(记录HTTP通信发?生时间、响应状态码)。
Q:无法播放视频
1. 检查已配置的帐户是否开通移动端播放权限
2. 根据HTTP通信日志,排查网络问题
3. 检查视频状态是否正常
Q:上传视频出现异常
1. 检查已配置的帐户是否开通了客户端上传权限
2. 根据HTTP通信日志,排查网络问题
Q:下载视频出现异常
1. 检查已配置的帐户是否开通了移动端权限
2. 根据HTTP通信日志,排查网络问题
3. 检查视频状态是否正常

我要回帖

更多关于 腾讯视频播放器 的文章

 

随机推荐