# 上传视频

### 接口描述

```
1、上传视频
2、接口支持https协议
```

**服务端上传推荐使用：**[Java上传SDK](https://git.polyv.net/help-center/document-center/-/blob/master/docs/vod/api/video_upload/vod/api/video_upload/java_upload_sdk_doc/README.md)。

### 接口URL

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

### 请求方式

POST

### 接口约束

(接口同时支持HTTP 、HTTPS ，建议使用HTTPS 确保接口安全，接口调用有频率限制，[详细请查看](https://git.polyv.net/help-center/document-center/-/blob/master/vod/api/limit/README.md))

### 返回结果支持格式

```null
JSON
```

### 请求数限制

```null
TRUE
```

### 请求参数

| 参数名               | 必选    | 类型及范围  | 说明                                                                                                                                                      |
| ----------------- | ----- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 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可以在“视频管理”——“内容分类”中获取，如下图所示。cataid为catatree的最后一个long型的整数，catatree由cataid组成。当cataid值为1时，表示用户上传空间的根目录。                                      |
| 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 | 用户自定义数据，如果提交了该字段，会在[上传完成回调](https://git.polyv.net/help-center/document-center/-/blob/master/docs/vod/api/video_upload/vod/api/callBack/README.md)时透传返回。 |

![2](/files/rqhUcDEM4ALf0mDXz5No)

### 注意事项

```null
上传视频接口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 | 用户的可用空间已用完            |

### 返回结果

```xml
<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请求示例

快速接入基础代码请下载相关依赖源码， [点击下载源代码](https://git.polyv.net/help-center/document-center/-/blob/master/third_res/util.zip) ,下载后加入到自己的源码工程中即可。测试用例中的**HttpUtil.java 和 VodSignUtil.java** 都包含在下载文件中。

> 强烈建议您使用[点播Java SDK](https://git.polyv.net/help-center/document-center/-/blob/master/vod/java/README.md)完成API的功能对接，点播Java SDK 对API调用逻辑、异常处理、数据签名、HTTP请求线程池进行了统一封装和优化。

```java
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示例

```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    | 已删除    |

如果API想调用签名，可参考[签名生成规则](https://git.polyv.net/help-center/document-center/-/blob/master/vod/api/buildSign/README.md) 按参数签名顺序拼凑字符串为cataid=$(cataid)\&JSONRPC=$(JSONRPC)\&writetoken=$(writetoken)$(secretkey)，并进行sha1计算，得到sign。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://polyv.gitbook.io/document/docs/vod/api/video-upload/upload_video.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
