上传视频
更新时间:2026-09-17 23:48:10
服务端上传推荐使用:Java上传SDK。
接口描述及约束
- 上传视频
- 接口支持https协议
- 该接口无需传递 sign 参数,而是通过传递 writetoken 参数来进行验签。
- 接口调用有频率限制,详细请查看
- 传入
vid参数可替换已有视频(原 vid 不变),详见下文替换视频
接口请求方式及URL
POST
http://v.polyv.net/uc/services/rest?method=uploadfile
返回结果支持格式
JSON
请求参数
| 参数名 | 必选 | 类型及范围 | 说明 |
|---|---|---|---|
| writetoken | true | string | 用户的写入数据密钥,获取方式可参考 【获取密钥】 |
| JSONRPC | true | string | json格式,{"title": "标题", "tag":"标签","desc":"描述"} |
| Filedata | true | file | file类型,支持的文件格式为:.flv,.avi,.mpg,.mp4,.wmv,.mov,.3gp,.asf等 |
| fcharset | flase | string | 当fcharset设为'ISO-8859-1'时,可以避免视频的文件名乱码 |
| cataid | false | long | 设定上传视频的分类,分类的id可以在管理后台的“分类视频列表”页面中获取,如下图所示。不传该参数时,新上传视频进入“默认分类”;替换视频时则保持原视频的分类不变。 |
| luping | false | int | 是否录屏优化。当值为1时,上传的视频不再采取默认的压缩编码机制,视频尺寸不再压缩,保证视频的清晰度。默认值为0 |
| format | false | string | 默认返回json格式,如果format=xml返回xml格式 |
| jsonp | false | string | 例如,正常情况{error:0,data:””},加 jsonp=a后返回a({error:0,data:””}) |
| fileMd5 | false | string | 文件校验码,为32位大写MD5的值 |
| watermark | false | string | 自定义水印图片地址,图片格式必须是png格式,支持http、https。 |
| watermarkLocation | false | string | 自定义水印图片位置,如没该参数,则自定义水印的显示情况跟随分类和账号。1:左上角;2:右上角;3:左下角;4:右下角 |
| state | false | string | 用户自定义数据,如果提交了该字段,会在上传完成回调时透传返回。 |
| vid | false | string | 要替换的视频vid,传入该参数即执行替换视频(原vid不变),不传则上传为新视频。支持两种格式:完整vid(如 36e77ba39cc4768ab541cb6bf4f775a0_3)或32位视频id(如 36e77ba39cc4768ab541cb6bf4f775a0)。可放在URL参数中,也可放在JSONRPC报文中传入。详见下文替换视频。 |
获取分类ID的方法如下图所示:

替换视频
传入 vid 参数即执行替换视频:本次上传的新文件将替换该 vid 指向的已有视频,原 vid 保持不变,客户端可继续复用已有视频标识。替换后的处理链路(重新转码、加密、刷新CDN缓存等)与点播管理后台的「替换视频」功能一致。
替换规则:
- 替换成功后接口返回的 vid 与原 vid 相同,视频内容更新为新上传的文件。
- 原视频的以下设置会自动继承,替换后保持不变:
- 视频外链(publish_url)
- 课件(PPT)、字幕、子视频
- 播放密码、问答设置、播放授权、试看时长
- 微信分享页设置(分享标题、封面图、简介、页面模板、底部按钮等)
- 以下信息按新文件重新生成,不受原视频影响:分辨率、码率档位、时长、源文件大小、视频截图、播放地址。
- 分类:请求中传了
cataid则移动到指定分类;不传则保持原视频的分类不变。 - 存储空间按新旧源文件大小的差值计算,不会重复累加占用。
- 替换后视频状态回到「等待编码/正在编码」,处理完成后通过上传完成回调通知(
state参数透传返回),也可通过返回结果中的md5checksum字段核对新文件是否上传完整。
替换限制(与点播管理后台一致):
| 限制说明 | 返回错误码 |
|---|---|
| 目标视频不存在,或不属于当前 writetoken 对应的账号 | 26 |
| 直播转存生成的视频不支持替换 | 27 |
| 视频当前状态不允许替换(如已删除、转码中、等待审核等) | 28 |
| 视频存在未完成的转码任务,请等待处理完成后再替换 | 29 |
注意:替换视频会覆盖原视频内容,替换完成后无法恢复为原视频,请谨慎操作。
替换视频请求示例:
vid 放在URL参数中:
http://v.polyv.net/uc/services/rest?method=uploadfile&vid=36e77ba39cc4768ab541cb6bf4f775a0_3
vid 也可以放在JSONRPC报文中传入:
{"title": "新标题", "vid": "36e77ba39cc4768ab541cb6bf4f775a0_3"}
注意事项
上传视频接口POST不能携带cookie
上传的视频不能大于 2G
返回错误列表
| 返回 | 说明 |
|---|---|
| 0 | 无错误 |
| 1 | 找不到writetoken关联的user |
| 2 | 文件为空或者writetoken为空 |
| 3 | 提交的json名字JSONRPC为null |
| 4 | 提交文件格式不正确 或 视频大于 2G |
| 5 | readtoken为空 |
| 6 | 分页输入出错 |
| 7 | vid不能为空 |
| 8 | 找不到方法名 |
| 14 | 文件md5校验失败 |
| 15 | 后台处理出错 |
| 16 | 用户的可用空间已用完 |
| 26 | 替换视频时,目标视频不存在或不属于当前账号 |
| 27 | 替换视频时,直播转存的视频不支持替换 |
| 28 | 替换视频时,视频当前状态不允许替换 |
| 29 | 替换视频时,视频存在未完成的转码任务 |
返回结果
<xml>
<error>0</error>
<total/>
<data>
<video>
<md5checksum>
<![CDATA[ 44b145c6bea7dd826191990dfb38d1fd ]]>
</md5checksum>
<tag>
<![CDATA[ 标签 ]]>
</tag>
<mp4>
<![CDATA[http://mpv.videocc.net/36e77ba39c/0/36e77ba39cc4768ab541cb6bf4f775a0_1.mp4]]>
</mp4>
<title>
<![CDATA[ upload上传视频 ]]>
</title>
<df>2</df>
<times>
<![CDATA[ 0 ]]>
</times>
<mp4_1>
<![CDATA[http://mpv.videocc.net/36e77ba39c/0/36e77ba39cc4768ab541cb6bf4f775a0_1.mp4]]>
</mp4_1>
<vid>
<![CDATA[ 36e77ba39cc4768ab541cb6bf4f775a0_3 ]]>
</vid>
<mp4_2>
<![CDATA[http://mpv.videocc.net/36e77ba39c/0/36e77ba39cc4768ab541cb6bf4f775a0_2.mp4]]>
</mp4_2>
<cataid>
<![CDATA[ 1 ]]>
</cataid>
<swf_link>
<![CDATA[http://player.polyv.net/videos/36e77ba39cc4768ab541cb6bf4f775a0_3.swf]]>
</swf_link>
<status>
<![CDATA[ 10 ]]>
</status>
<seed>1</seed>
<flv2>
<![CDATA[http://plvod01.videocc.net/36e77ba39c/0/36e77ba39cc4768ab541cb6bf4f775a0_2.flv]]>
</flv2>
<flv1>
<![CDATA[http://plvod01.videocc.net/36e77ba39c/0/36e77ba39cc4768ab541cb6bf4f775a0_1.flv]]>
</flv1>
<sourcefile>
<![CDATA[ ]]>
</sourcefile>
<playerwidth>
<![CDATA[ 600 ]]>
</playerwidth>
<hls/>
<default_video>
<![CDATA[http://plvod01.videocc.net/36e77ba39c/0/36e77ba39cc4768ab541cb6bf4f775a0_1.flv]]>
</default_video>
<duration>
<![CDATA[ 00:00:33 ]]>
</duration>
<filesize/>
<first_image>
<![CDATA[http://img.videocc.net/uimage/3/36e77ba39c/0/36e77ba39cc4768ab541cb6bf4f775a0_0.jpg]]>
</first_image>
<original_definition>
<![CDATA[ 672x378 ]]>
</original_definition>
<context>
<![CDATA[ 视频文档描述 ]]>
</context>
<previewVid>
<![CDATA[ m63c44pl69mm7435lp871mp3pn7n448l0_6 ]]>
</previewVid>
<playerheight>
<![CDATA[ 490 ]]>
</playerheight>
<ptime>
<![CDATA[ 2017-12-04 10:36:18 ]]>
</ptime>
</video>
</data>
</xml>
Java请求示例
快速接入基础代码请下载相关依赖源码, 点击下载源代码 ,下载后加入到自己的源码工程中即可。测试用例中的**HttpUtil.java 包含在下载文件中。
强烈建议您使用点播Java SDK完成API的功能对接,点播Java SDK 对API调用逻辑、异常处理、数据签名、HTTP请求线程池进行了统一封装和优化。
private static final Logger log = LoggerFactory.getLogger(VodVideoUploadTest.class);
/**
* 上传点播视频
*/
@Test
public void testUpload() throws Exception, NoSuchAlgorithmException {
//业务参数
String url = "http://v.polyv.net/uc/services/rest?method=uploadfile";
String writeToken = super.writeToken;
Map<String, String> requestMap = new HashMap<>();
requestMap.put("writetoken", writeToken);
requestMap.put("JSONRPC", "{\"title\": \"标题\", \"tag\":\"标签\",\"desc\":\"描述\"}");
Map<String, File> fileMap = new HashMap<>();
fileMap.put("Filedata",new File("E:\\polyv\\polyv.mp4"));
String response = HttpUtil.postFile(url,requestMap,fileMap,null);
log.debug("测试上传点播视频,{}", response);
//do somethings
}
JSON示例
{
error: "0",
data: [
{
images_b: [
"http://img.videocc.net/uimage/3/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_0_b.jpg",
"http://img.videocc.net/uimage/3/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_1_b.jpg",
"http://img.videocc.net/uimage/3/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_2_b.jpg",
"http://img.videocc.net/uimage/3/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_3_b.jpg",
"http://img.videocc.net/uimage/3/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_4_b.jpg",
"http://img.videocc.net/uimage/3/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_5_b.jpg"
],
md5checksum: "44b145c6bea7dd826191990dfb38d1fd",
tag: "标签",
mp4: "http://mpv.videocc.net/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_1.mp4",
title: "标题",
df: 2,
times: "0",
mp4_1: "http://mpv.videocc.net/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_1.mp4",
vid: "36e77ba39c0e5dac84dba418d81a793d_3",
mp4_2: "http://mpv.videocc.net/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_2.mp4",
cataid: "1",
swf_link: "http://player.polyv.net/videos/36e77ba39c0e5dac84dba418d81a793d_3.swf",
source_filesize: 2295887,
status: "10",
seed: 1,
flv2: "http://plvod01.videocc.net/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_2.flv",
flv1: "http://plvod01.videocc.net/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_1.flv",
sourcefile: "",
playerwidth: "600",
hls: [
"http://hls.videocc.net/36e77ba39c/3/36e77ba39c0e5dac84dba418d81a793d_1.m3u8",
"http://hls.videocc.net/36e77ba39c/3/36e77ba39c0e5dac84dba418d81a793d_2.m3u8"
],
default_video: "http://plvod01.videocc.net/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_1.flv",
duration: "00:00:33",
filesize: [
0,
0
],
first_image: "http://img.videocc.net/uimage/3/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_0.jpg",
original_definition: "672x378",
context: "描述",
images: [
"http://img.videocc.net/uimage/3/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_0.jpg",
"http://img.videocc.net/uimage/3/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_1.jpg",
"http://img.videocc.net/uimage/3/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_2.jpg",
"http://img.videocc.net/uimage/3/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_3.jpg",
"http://img.videocc.net/uimage/3/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_4.jpg",
"http://img.videocc.net/uimage/3/36e77ba39c/d/36e77ba39c0e5dac84dba418d81a793d_5.jpg"
],
previewVid: "363c44pl69m0c8klm57kpl715k51l496k_6",
playerheight: "490",
ptime: "2017-12-04 11:12:50"
}
]
}
字段说明
| 字段 | 说明 |
|---|---|
| swf_link | Flash链接地址 |
| tag | 标签 |
| mp4 | 视频地址 |
| playerwidth | 视频宽度 |
| title | 视频标题 |
| duration | 视频时长 |
| first_image | 视频截图 |
| times | 点击次数 |
| context | 视频描述 |
| images | 所有截图 |
| previewVid | 预览视频VID |
| playerheight | 视频高度 |
| ptime | 上传时间 |
| vid | 视频id |
| cataid | 分类id, 如1为根目录 |
| default_video | 用户默认播放视频 |
| df | 视频码率数 |
| flv1 | 流畅码率flv格式视频地址 |
| flv2 | 高清码率flv格式视频地址 |
| flv3 | 超清码率flv格式视频地址 |
| mp4_1 | 流畅码率mp4格式视频地址 |
| mp4_2 | 高清码率mp4格式视频地址 |
| mp4_3 | 超清码率mp4格式视频地址 |
| hls1 | 流畅码率hls格式视频地址 |
| hls2 | 高清码率hls格式视频地址 |
| hls3 | 超清码率hls格式视频地址 |
| hlsIndex | 自适应码率hls播放地址 |
| images_b | 视频截图大图地址 |
| seed | 加密视频为1,非加密为0 |
| status | 视频状态 |
| md5checksum | 上传到POLYV云平台的视频源文件的MD5值,可以用来校验是否上传错误或完整 |
| 视频状态码 | 含义 |
|---|---|
| 60/61 | 已发布 |
| 10 | 等待编码 |
| 20 | 正在编码 |
| 40 | 视频处理失败 |
| 50 | 等待审核 |
| 51 | 审核不通过 |
| -1 | 已删除 |


