# 指定视频时间点截图

### 接口描述

```
1、通过视频id添加单个视频指定时间点截图任务
2、接口URL中的{userid}为点播账号userid，具体参考菜单【使用须知】->【获取密钥】
3、接口支持https协议
```

### 接口URL

```
http://api.polyv.net/v2/video/snapshot/{userid}/addTask
```

[在线API调用](https://git.polyv.net/help-center/document-center/-/blob/master/req.html?api=http:/api.polyv.net/v2/video/snapshot/%7Buserid%7D/addTask/README.md)

### 请求方式

```
POST
```

### 接口约束

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

### 请求参数描述

| 参数名         | 必选    | 类型     | 说明                                                                                                                                                                                                                        |
| ----------- | ----- | ------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| userid      | true  | String | 保利威点播账户id，可以参考【[获取密钥](https://git.polyv.net/help-center/document-center/-/blob/master/vod/api/getSecretKey/README.md)】获取，获取路径：官网->登录->点播（API接口）                                                                           |
| ptime       | true  | Long   | 当前时间的毫秒级时间戳，3分钟内有效                                                                                                                                                                                                        |
| sign        | true  | String | 签名，为40位大写的SHA1值,`生成签名的secretkey密钥作为通信数据安全的关键信息，严禁保存在客户端直接使用，所有API都必须通过客户自己服务器中转调用POLYV服务器获取响应数据`【详见[签名生成规则](https://git.polyv.net/help-center/document-center/-/blob/master/vod/api/buildSign/README.md)】                 |
| vid         | true  | String | 视频id                                                                                                                                                                                                                      |
| offsetTimes | true  | String | 截图时间点，每个任务最多20个，多个时间点以英文逗号分隔，如：5,10,15,20                                                                                                                                                                                 |
| width       | false | String | 截图的宽度，默认为原视频宽                                                                                                                                                                                                             |
| height      | false | String | 截图的高度，默认为原视频高                                                                                                                                                                                                             |
| callbackUrl | false | String | 截图完成后的回调地址，截图任务完成会通过post请求发送结果信息到回调地址【详见[回调说明](https://git.polyv.net/help-center/document-center/-/blob/master/vod/api/video_codec/snapshot/snapshot_at_specific_time?id=%E5%9B%9E%E8%B0%83%E8%AF%B4%E6%98%8E/README.md)】 |

### 示例

```requestUrl
http://api.polyv.net/v2/video/snapshot/1b448be323/addTask
```

表单参数：

```requestUrl
vid=1b448be32303e4922a8f70d6b48220ae_1&offsetTimes=5,10,15,20&width=300&sign=4FEC87EC6841211C36EC51A072A6D64DF72E1AF4&userId=1b448be323&ptime=1617700224540&height=300
```

### 响应参数描述

| 参数名     | 类型      | 说明                                                                                                                              |
| ------- | ------- | ------------------------------------------------------------------------------------------------------------------------------- |
| code    | Integer | 响应状态码，200为成功返回，非200为失败【详见[全局错误说明](https://git.polyv.net/help-center/document-center/-/blob/master/vod/api/errorInfo/README.md)】 |
| status  | String  | 响应状态文本信息                                                                                                                        |
| message | String  | 响应描述信息，当code为400或者500的时候，辅助描述错误原因                                                                                               |
| data    | Integer | 任务id                                                                                                                            |

### 回调说明

截图任务完成结果信息回调，可以及时通知用户截图任务的结果

**原理**

通过HTTP协议，向callbackUrl（回调地址）发送POST请求，将任务结果通知到用户设置的回调地址

**举例说明**

截图任务完成后，polyv会回调该接口，并带上签名信息，开发者可以通过签名信息来校验调用是否为polyv的合法调用，具体的签名规则：md5("snapshot" + vid + secretKey) 。如vid="e6b23c6f51350f106556806a576b1942\_e"，secretKey="testKey"，那么sign="3adb60893894d422d00ed2efae8c41f3" (小写md5)。 最终回调的url为`http://example.polyv.net/snapshot-callback.do?sign=3adb60893894d422d00ed2efae8c41f3`

任务成功回调信息

```json
{
    "taskId": 123,
    "vid": "e6b23c6f51350f106556806a576b1942_e",
    "status": "success",
    "snapshots": [
        {
            "offsetTime": 12,
            "imageUrl": "http://vod-assets.videocc.net/snapshot/e6b23c6f51/e6b23c6f519df1d317cca208edd448cb/12.jpg"
        },
        {
            "offsetTime": 78,
            "imageUrl": "http://vod-assets.videocc.net/snapshot/e6b23c6f51/e6b23c6f519df1d317cca208edd448cb/78.jpg"
        }
    ]
}
```

任务失败回调信息

```json
{
    "taskId": 123,
    "vid": "e6b23c6f51350f106556806a576b1942_e",
    "status": "fail",
    "snapshots": []
}
```

**回调字段说明**

| 参数名       | 类型      | 说明                                                                                                                                                                                                                       |
| --------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| taskId    | Integer | 任务id                                                                                                                                                                                                                     |
| vid       | String  | 视频id                                                                                                                                                                                                                     |
| status    | String  | 任务状态，成功为success，失败为fail                                                                                                                                                                                                  |
| snapshots | Array   | 任务成功为截图信息数组，失败为空数组【详见[snapshots参数描述](https://git.polyv.net/help-center/document-center/-/blob/master/vod/api/video_codec/snapshot/snapshot_at_specific_time?id=snapshots%E5%8F%82%E6%95%B0%E6%8F%8F%E8%BF%B0/README.md)】 |

**snapshots参数描述**

| 字段         | 类型      | 说明       |
| ---------- | ------- | -------- |
| offsetTime | Integer | 截图时间点    |
| imageUrl   | String  | 截图的url地址 |

### 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(VodSnapshotTest.class);
/**
 * 指定视频时间点截图
 * @throws Exception
 * @throws NoSuchAlgorithmException
 */
@Test
public void testAddSnapshotTask() throws Exception, NoSuchAlgorithmException {
    //公共参数,填写自己的实际参数
    String secretKey = super.secretKey;
    String userId = super.userId;
    String ptime = String.valueOf(System.currentTimeMillis());
    //业务参数
    String url = String.format("http://api.polyv.net/v2/video/snapshot/%s/addTask", userId);
    String vid = "1b448be32303e4922a8f70d6b48220ae_1";
    String offsetTimes = "5,10,15,20";
    String width = "300";
    String height = "300";
    String callbackUrl = "http://example.polyv.net/snapshot-callback.do";
    
    Map<String, String> requestMap = new HashMap<>();
    requestMap.put("userId", userId);
    requestMap.put("ptime", ptime);
    requestMap.put("vid", vid);
    requestMap.put("offsetTimes", offsetTimes);
    requestMap.put("width", width);
    requestMap.put("height", height);
    requestMap.put("callbackUrl", callbackUrl);
    requestMap.put("sign", VodSignUtil.getSign(requestMap, secretKey));
    String response = HttpUtil.postFormBody(url, requestMap);
    log.debug("测试指定视频时间点截图,{}", response);
    //do somethings
    
}
```

### 响应示例

系统全局错误说明详见[全局错误说明](https://git.polyv.net/help-center/document-center/-/blob/master/vod/api/errorInfo/README.md)

成功示例

```json
{
    "code": 200,
    "status": "success",
    "message": "success",
    "data": 2036
}
```

异常示例

签名不正确

```json
{
    "code": 400,
    "status": "error",
    "message": "the sign is not right",
    "data": ""
}
```
