Java 上传SDK使用文档

Polyv Java 上传 SDK 为您提供服务端上传媒体文件到保利威云点播平台的开发工具包。

功能

  • 快捷上传多种格式的媒体文件。
  • 支持上传时的各种设置,如文件标题、描述、标签、上传目录、是否开启课件优化处理等。
  • 采用分片并发上传的方式,支持断点续传

使用方法

前提条件

  1. 使用本 SDK 前,要先开通保利威云点播服务。如果您还不了解该服务,请登录产品主页查看,详见:云点播
  2. 获取userId、secretKey 等相关信息用于用户身份校验,您可以在「云点播管理后台 -> 设置 -> API接口」页面中找到相关信息,点击这里登录后台

环境要求

Java版本1.8.0及以上

集成 SDK

  1. 下载Java上传SDK开发包(包含示例代码和所需jar包),点击这里下载
  2. 将解压后的jar文件拷贝至您的项目中;

  3. 使用IDE开发时引用jar包的方法,以Eclipse和IntelliJ IDEA为例说明如下:

3.1 在Eclipse中选择您的工程,右击 -> Properties -> Java Build Path -> Add JARs;

3.2 在IntelliJ IDEA中打开您的工程,File -> Project Structure -> Modules -> 右侧Dependencies -> + -> JARs or directories

API参考

1. 入口类 PolyvUploadClient.java

1.1 构造方法

PolyvUploadClient(String userId, String secretKey, int partitionSize, String checkpoint, int threadNum)

参数解释:

参数 说明
userId 保利威账号ID
secretKey 保利威账号的secretKey
partitionSize 可指定分片上传时每个分片的大小,单位:字节,默认为1MB,取值范围为100KB~5GB
checkpoint 使用断点续传时,写入续传位置的本地磁盘路径,需保证文件路径已经创建好
threadNum 可指定分片上传时的并发线程数,默认为1。注:该配置会占用服务器CPU资源,需根据服务器情况指定。

1.2 上传方法

uploadVideoParts(VideoInfo videoInfo)

该方法返回视频ID。

2. 视频实体类 VideoInfo.java

视频信息字段:

名称 类型 必填 描述
fileLocation String Y 视频文件在本地的绝对路径,必须包含文件后缀
title String N 视频标题,为空时会取视频文件名作为标题(不含后缀)
fileSize Long N 文件大小
describ String N 视频简介
tag String N 视频标签,多个用,分隔
cataId Long N 视频分类ID,默认值:1,表示上传到默认分类
luping Int N 是否进行课件优化处理,默认值:0
keepsource Int N 是否保持源文件播放,默认:0
videoPoolId String N 视频ID,当上传中断续传时,需要指定vid来恢复上传
state String N 自定义拓展信息,如果提交了该字段,会在上传完成的事件回调中透传返回。

示例代码

import net.polyv.bean.vo.VideoInfo;
import net.polyv.callback.UploadCallBack;
import net.polyv.entry.PolyvUploadClient;
import net.polyv.enumeration.UploadErrorMsg;

public class PolyvUploadVideoDemo {
    private static final String userId = ""; //保利威账号的userId(必填)
    private static final String secretKey = ""; //账号的secretKey(必填)

    public static void main(String[] args) {
        int partitionSize = 1*1024 * 1024; //可指定分片上传时每个分片的大小,默认为1M
        int threadNum = 1; //可指定分片上传时的并发线程数,默认为1,(注:该配置会占用服务器CPU资源,需根据服务器情况指定)
        String checkpoint = "/Users/TestUser/Desktop"; //断点续传的上传位置写入路径
        PolyvUploadClient client = new PolyvUploadClient(userId, secretKey, partitionSize, checkpoint, threadNum); //初始化PolyvUploadClient实例

        VideoInfo videoInfo = new VideoInfo();
        videoInfo.setFileLocation("/Users/TestUser/Desktop/testVideo.mp4"); //视频文件在服务器上的绝对路径,必须包含拓展名(必填)
        videoInfo.setTitle("测试视频"); // 视频标题(必填)
        videoInfo.setCataId(1L); // 上传的分类目录,默认值:1,表示上传到默认分类(可选)
        videoInfo.setDescrib("视频描述"); // 视频描述(可选)
        videoInfo.setTag("视频标签"); // 视频标签(可选)
        videoInfo.setLuping(0); //是否进行课件优化处理,默认值:0(可选)
        videoInfo.setKeepSource(0); //是否保持源文件播放,默认:0(可选)
        videoInfo.setState("自定义拓展信息"); //如果提交了该字段,会在上传完成的事件回调中透传返回

        System.out.println("vid=" + client.uploadVideoParts(videoInfo, new UploadCallBack() {
            @Override
            public void start(String s) {
                System.out.println("start=" + s);
            }
            @Override
            public void process(String s, long l, long l1) {
                System.out.println("process=" + s + ",uploaded=" + l + ", total=" + l1);
            }
            @Override
            public void complete(String s) {
                System.out.println("complete=" + s);
            }
            @Override
            public void success(String s) {
                System.out.println("success=" + s);
            }

            @Override
            public void error(String s, UploadErrorMsg uploadErrorMsg) {
                System.out.println("error=" + s + ", message=" + uploadErrorMsg.getMessage());
            }
        }, true));
        // 当上传中断,重新恢复的时候,可以指定vid来恢复上传 videoInfo.setVideoPoolId("xxxxxxxxxxx");
        //     videoInfo = new VideoInfo();
        //     videoInfo.setFileLocation("C:\\Users\\Lenovo\\Desktop\\video\\test.mp4");
        //     videoInfo.setVideoPoolId("xxxxxxxxxxx");
        //     System.out.println("vid=" + client.uploadVideoParts(videoInfo), new UploadCallBack() {
        //         @Override
        //         public void start(String s) {
        //             System.out.println("start=" + s);
        //         }
        //         @Override
        //         public void process(String s, long l, long l1) {
        //             System.out.println("process=" + s + ",uploaded=" + l + ", total=" + l1);
        //         }
        //         @Override
        //         public void complete(String s) {
        //             System.out.println("complete=" + s);
        //         }
        //         @Override
        //         public void success(String s) {
        //             System.out.println("success=" + s);
        //         }
        //         @Override
        //         public void error(String s, UploadErrorMsg uploadErrorMsg) {
        //             System.out.println("error=" + s + ", message=" + uploadErrorMsg.getMessage());
        //         }
        //     }, true);
        // }
    }
}

Change log

日期 版本 更新内容
2020-03-29 v1.1.1 支持自定义拓展字段,可在上传完成回调中透传返回
2019-08-05 v1.0.0 支持断点续传的新版Java上传SDK 发布
以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...

通过ASS字幕实现动态视频水印效果

ASS字幕简介

ASS字幕是大多数字幕制作者所公认的并且经常使用的两种字幕格式之一(另一种是SRT字幕),与SRT字幕的区别有:

  1. SRT字幕是简单的纯文本字幕,制作方法比较简单,一行字幕序号,一行时间代码和一行字幕数据就能完成了,但是SRT字幕无法使用如特效字体等其他高级功能。
  2. ASS字幕则属于高级字幕,采用SSA V4+脚本语言编写,制作方法比SRT字幕复杂,但是可以制作出华丽的特效字幕。

使用字幕制作软件,可以极大简化制作过程,提高制作效率,有多款成熟的软件可供选择。其中,Aegisub是一个免费,跨平台且开源的用于创建和修改字幕的工具。您可以使用Aegisub轻松地通过音频制作时间轴,并使用多种功能强大的工具,来修改字幕的样式,同时您还可以看到实时的视频预览。

通过ASS字幕实现动态的视频水印效果的原理

平时我们见到的视频水印都是静态的,固定在视频的某个位置。我们知道,在制作视频时可以把字幕压在视频流里面,这一过程是在视频编码中实现的。由于ASS字幕可以指定文字的位置、颜色、大小、透明度、动效(滚动、闪烁)等,我们在视频编码时可以利用ASS字幕的高级特性把特效文字编码在视频流中,并随着时间不断变化,从而实现动态水印效果。相比较静态水印,动态水印在品牌曝光,版权保护上可能更具优势。
以下为效果展示视频:

操作指引

  1. 登录点播后台,选择 设置-->视频设置-->视频水印,上传制作好的ASS字幕文件作为水印素材。
  2. 如果只想对上传到某一分类下的视频应用动态水印效果,选择 视频列表-->视频分类管理-->分类属性设置-->视频水印,上传制作好的ASS字幕文件作为水印素材。

注意事项

  1. 本功能是利用ASS字幕文件实现了水印的动态效果,ASS文件被当做水印素材的用途,而不是原本的字幕用途,所以请不要同字幕功能混淆。
  2. 水印设置成功后,只对新上传的视频生效。
  3. 由于在ASS字幕文件中,要显示的内容是跟随视频时间轴的,虽然每个视频的长度不一样,但我们的目的是把ASS字幕内容当做水印用途,所以对内容和时间的对应关系,要求并不需要很严格。建议上传的ASS字幕文件中,时间设长一些(长于大多数视频时长),这样就可以在视频播放过程中始终显示动态水印效果了。
以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...

回调通知使用说明

功能说明

在视频相关处理环节(如上传、转码、审核)完成后,系统会将处理结果提交到配置的回调地址,通知用户处理进展和状态,以便进行其他业务操作。

回调配置

登录云点播管理后台,在 设置 --> 回调设置 配置回调URL。
image-20200224093654793

事件类型

目前支持的事件通知类型参考如下:

一、视频上传完成

点播服务端接收完上传的视频文件后,会产生视频上传完成事件。

HTTP请求方式为:GET。

事件内容

名称 描述
sign 系统签名,由“upload”字符串拼接vid、secretkey并做MD5运算生成。例如,vid的值为e2e84a738302f20a4f6eb202976f5c63_e,secretkey的值为7UagtQOq2A,将字符串uploade2e84a738302f20a4f6eb202976f5c63_e7UagtQOq2A进行MD5计算,得到sign的值为:b245e3e65aa45b60dc02337b5cd914a7
type 回调类型:upload 已上传,invalidVideo 不合规格视频(当上传的视频的信息无法被系统分析时,判断为不合规格视频)。
vid 视频ID
state 用户自定义数据,在上传视频接口上传SDK中,如果提交了该字段,会在事件完成回调时透传返回。

回调示例

http://demo.polyv.net/callback?sign=b245e3e65aa45b60dc02337b5cd914a7&type=upload&vid=e2e84a738302f20a4f6eb202976f5c63_e

二、异步上传处理失败

当使用管理后台的视频同步功能或者使用异步方式上传视频,处理失败时会产生此事件。

当收到此回调时,说明远程上传视频失败,需检查源视频的URL地址。

HTTP请求方式为:GET。

事件内容

名称 描述
sign 系统签名,由type、fileUrl、secretkey按顺序拼接并做MD5运算生成。例如:fileUrl 的值为 "http://a.mp4" , secretkey 的值为 kXmHMLeX6M ,将字符串 async_uploadhttp://a.mp4kXmHMLeX6M 进行MD5计算,得到 c2f168b96d882c1a03f1021c29208916
type 回调类型,返回固定值:async_upload。
fileUrl 用户提交的需要远程上传的视频URL地址
title 用户提交的需要远程上传的视频标题
state 用户自定义数据,在上传远程视频接口中,如果提交了该字段,会在事件完成回调时透传返回。

回调示例

http://demo.polyv.net/callback?sign=c2f168b96d882c1a03f1021c29208916&fileUrl=http://a.mp4&type=async_upload&title=test

三、视频同步失败

当视频上传成功后,系统需要把上传至边缘节点的视频源文件同步回中心节点,同步失败时会产生此事件。

HTTP请求方式为:GET。

事件内容

名称 描述
sign 系统签名,由type、vid、secretkey按顺序拼接并做MD5运算生成。
type 回调类型,返回固定值:videoSyncedFail。
vid 视频ID

回调示例

http://demo.polyv.net/callback?sign=b245e3e65aa45b60dc02337b5cd914a7&type=videoSyncedFail&vid=e2e84a738302f20a4f6eb202976f5c63_e

四、视频单个清晰度转码完成

视频的某种格式的某个清晰度(如:高清的mp4格式)转码完成时会产生此事件。

视频任一清晰度转码完成并审核通过后即可播放(视频状态会更新为“已发布”,如果其它清晰度的转码还未完成,播放器会自动选择已完成转码的清晰度)。

HTTP请求方式为:GET。

事件内容

名称 描述
sign 系统签名,由type、format、vid、df、secretkey按顺序拼接并做MD5运算生成,例如type的值为encode,format的值为flv,vid的值为e2e84a738302f20a4f6eb202976f5c63_e,df的值为1,secretkey的值为7UagtQOq2A,将字符串encodeflve2e84a738302f20a4f6eb202976f5c63_e17UagtQOq2A进行MD5计算,得到3c3eab358901ad19bc59b5df7704ed48
type 回调类型:encode 转码完成,encode_failed 转码失败
format 转码后的视频格式,非加密视频默认转码出flv、mp4格式;加密视频默认转码出pdx、m3u8格式。
vid 视频ID
df 视频清晰度:1 流畅,2 高清,3 超清

回调示例

http://demo.polyv.net/callback?sign=3c3eab358901ad19bc59b5df7704ed48&type=encode&format=mp4&vid=e2e84a738302f20a4f6eb202976f5c63_e&df=1

五、视频全部清晰度转码完成

视频所有清晰度转码完成会产生此事件。

由于返回内容较多,该回调的请求方式为POST。

事件内容

名称 描述
sign 系统签名,由eventType、vid、secretkey按顺序拼接并做MD5运算生成。注:sign不在POST Body中,而是作为回调URL中的一个参数返回
eventType 事件类型,取固定值:TranscodeComplete
status 视频转码状态,取值:success 成功,fail 失败 。只要有一个清晰度转码成功即返回success。
vid 视频ID
videoInfos 视频转码详情

videoInfos为数组,每个视频流的信息字段如下:

名称 描述
status 单个清晰度视频转码状态,取值:success 成功,fail 失败
format 视频格式
df 视频清晰度:1 流畅,2 高清,3 超清
bitrate 视频码率
duration 视频时长,单位:秒
size 视频大小,单位:Byte
resolution 视频分辨率

回调示例

Content-Type:application/json
Request URL:http://demo.polyv.net/callback?sign=3c3eab358901ad19bc59b5df7704ed48
HTTP POST Body:
{
  "eventType": "TranscodeComplete",
  "status": "success"
  "vid": "812a792458101ebf5ff6a1e5e76e1c58_8",
  "videoInfos": [
    {
      "duration": 883,
      "df": 1,
      "size": 15499011,
      "format": "mp4",
      "bitrate": 256,
      "resolution": "480x360",
      "status": "success"
    },
    {
      "duration": 883,
      "df": 2,
      "size": 27574109,
      "format": "mp4",
      "bitrate": 512,
      "resolution": "848x636",
      "status": "success"
    }
  ]
}

六、视频审核完成

视频任一清晰度转码完成后需经过智能审核或人工审核,只有审核通过的视频才可播放。审核完成后会产生此事件。

HTTP请求方式为:GET。

事件内容

名称 描述
sign 系统签名,由“manage”字符串拼接type、vid、secretkey并做MD5运算生成。例如,type的值为pass,vid的值为e2e84a738302f20a4f6eb202976f5c63_e,secretkey的值为7UagtQOq2A,将字符串managepasse2e84a738302f20a4f6eb202976f5c63_e7UagtQOq2A进行MD5计算,得到8ebb91d444ce53fafa3256670fb65d84
type 回调类型:pass 审核通过 nopass 审核不通过
vid 视频ID

回调示例

http://demo.polyv.net/callback?type=pass&vid=e2e84a738302f20a4f6eb202976f5c63_e&sign=8ebb91d444ce53fafa3256670fb65d84

七、视频删除完成

当视频文件被删除至回收站或者从回收站彻底删除时,会产生此事件。

HTTP请求方式为:POST。

事件内容

名称 描述
sign 系统签名,由eventType、secretkey按顺序拼接并做MD5运算生成:md5("DeleteMediaComplete"+secretKey) 。
注:sign不在POST Body中,而是作为回调URL中的一个参数返回。
eventType 回调类型,取固定值:DeleteMediaComplete
operateTime 操作时间,例如:2020-01-20 07:49:17
operator 操作者账号
status 操作状态,success 成功
deleteType 删除方式:MoveToTrash 删除到回收站 DeletePermanently 永久删除
vids 被删除视频的vid,批量删除时返回多个vid

回调示例

Content-Type:application/json
Request URL:http://demo.polyv.net/callback?sign=3c3eab358901ad19bc59b5df7704ed48
HTTP POST Body:
{
  "eventType": "DeleteMediaComplete",
  "operateTime": "2020-01-20 07:49:17",
  "operator": "aaa@polyv.net",
  "status": "success",
  "deleteType": "MoveToTrash",
  "vids": "e2e84a738302f20a4f6eb202976f5c63_e,e2e84a738302f20a4f6eb202976f5c63_f"
}

八、视频内容安全审核不通过

当视频经过AI智能扫描,发现有确认或疑似违规内容时,会产生此事件。

HTTP请求方式为:POST。

事件内容

名称 描述
sign 系统签名,由eventType、secretkey按顺序拼接并做MD5运算生成,md5("AIContentScanNotPassed"+secretKey)。
注:sign不在POST Body中,而是作为回调URL中的一个参数返回
eventType 回调类型,取固定值:AIContentScanNotPassed
scanSource 扫描来源,video 视频 ppt 三分屏课件
vid 视频ID
scanResults 扫描结果数组,包含一个或多个扫描结果,详见下表:

扫描结果信息如下:

名称 描述
imageUrl 检测图片的URL
scene 检测场景:porn 鉴黄 terrorism 暴恐涉政识别
label 检测结果分类,当scene=porn时,label取值为:
- normal 正常图片
- sexy 性感图片
- porn 色情图片
当scene为terrorism时,label取值为:
- normal 正常图片
- politics 涉政图片
- bloody 血腥图片
- weapon 武器
- others 其它
suggestion 检测建议:review 需人工复审;block 确认违规
rate 检测结果为该分类的概率,取值范围[0.00-100.00]

回调示例

Content-Type:application/json
Request URL:http://demo.polyv.net/callback?sign=6c5b14548fb9c06ee1b987debf88f639
HTTP POST Body:
{
  "eventType": "AIContentScanNotPassed",
  "scanSource": "video",
  "vid": "8205ac89d3699e1fc08cd8f9b8486748",
  "scanResults": [
    {
      "imageUrl": "http://img.videocc.net/uimage/8/8205ac89d3/8/8205ac89d3699e1fc08cd8f9b8486748_0_b.jpg",
      "scene": "porn",
      "label": "sexy",
      "suggestion": "block",
      "rate": 93.26
    }
  ]
}

九、课件转换完成

当上传的课件(PPT、PDF文件)转换图片完成时,会产生此事件。

HTTP请求方式为:POST。

事件内容

名称 描述
sign 系统签名,由eventType、secretkey按顺序拼接并做MD5运算生成,md5("CoursewareConvertComplete"+secretKey)。
注:sign不在POST Body中,而是作为回调URL中的一个参数返回
eventType 回调类型,取固定值:CoursewareConvertComplete
status success 转换成功, convertFailed 转换失败,auditNotPassed 内容审核不通过
vid 视频ID
convertedImages 转换后的图片,包含一个或多个图片信息,当转换失败时不返回。详见下表:

转换后的图片信息如下:

名称 描述
pageNo 课件页码,从1开始
pageTitle 课件页标题,若PPT文件中未设置页标题,则值为空
pageImage 转换后的图片地址
pageThumbnail 缩略图地址

回调示例

Content-Type:application/json
Request URL:http://demo.polyv.net/callback?sign=de9d5652a5682718c5662499c5e4e5bb
HTTP POST Body:
{
  "eventType": "CoursewareConvertComplete",
  "status": "success",
  "vid": "f13e995735d99df23a7728be335e7a41_f",
  "convertedImages": [
    {
      "pageNo": 1,
      "pageTitle": "第一页的标题",
      "pageImage": "https://doc-oss.polyv.net/images/2020/04/b0a8a0ed3425c117e6552cd027b6eb4b31243c9/b0a8a0e6d3425c117e6552cd027b6eb4b31243c9_0000.jpeg",
      "pageThumbnail": "https://doc-oss.polyv.net/images/2020/04/b0a8a0ed3425c117e6552cd027b6eb4b31243c9/b0a8a0e6d3425c117e6552cd027b6eb4b31243c9_0000_s.jpeg"
    },
    {
      "pageNo": 2,
      "pageTitle": "第二页的标题",
      "pageImage": "https://doc-oss.polyv.net/images/2020/04/b0a8a0ed3425c117e6552cd027b6eb4b31243c9/b0a8a0e6d3425c117e6552cd027b6eb4b31243c9_0001.jpeg",
      "pageThumbnail": "https://doc-oss.polyv.net/images/2020/04/b0a8a0ed3425c117e6552cd027b6eb4b31243c9/b0a8a0e6d3425c117e6552cd027b6eb4b31243c9_0001_s.jpeg"
    }
  ]
}
以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...

统计视频观看时长的相关方式说明

不少教育类场景都有统计观众的视频观看时长的需求,以此来判断是否完成了课程,能否触发下一步动作(比如观看下一阶段的课程),或者单纯统计并在前台显示观众的观看时长以及观看视频数量。

整体来看统计观看时长有两种方案,一种是通过服务端API来获取统计数据,另一种是借助前端播放器提供的接口,业务方自己统计,两种方案的优劣及适用场景见下表:

统计方式 前端统计 服务端API获取
时效性 实时 非实时。由于服务端需要处理整个平台的播放数据,所以会有一定延时。
数据准确性 准确 有轻微误差。因网络、链路等影响,前端上报的播放数据有可能会发送失败,所以服务端返回的观看时长不能保证绝对准确。
开发成本 较高,业务方需借助播放器的相关接口,自行在前端计算观看时长等数据并上报业务后台。 低,只需调用对应的API来获取统计结果。
适用场景 对统计实时性要求高的业务场景 对统计实时性要求不高的业务场景

前端统计方式介绍

Web播放器(包括PC H5、Flash、移动端H5播放器)

在Web页面播放视频时,可借助播放器提供的相关接口、事件并结合自身业务规则来统计所需的数据,并上报自己的业务系统。

接口:

  • j2s_getCurrentTime() //获取当前播放的时间点,比如视频播放到第20s时返回:20。
  • j2s_realPlayVideoTime() //获取正片播放时间,不包括广告、片头、暂停、片尾等时间,视频播放过程中该值会累加。

事件:

  • s2j_onPlayStart // 播放器成功加载视频文件并缓冲完成后,即将开始播放时触发。
  • s2j_onPlayOver // 播放结束后触发。

其它的播放器属性、接口和事件详见播放器事件汇总播放器函数汇总

注:j2s_realPlayVideoTime获取的是播放的自然时间时长,比如当使用2倍速播放到视频的第60s时:
player.j2s_getCurrentTime() = 60
player.j2s_realPlayVideoTime() = 30

移动端SDK(Android SDK、iOS SDK)

在APP中播放视频时,可使用保利威点播SDK提供的相关接口、事件并结合自身业务规则来统计所需的数据,并上报自己的业务系统。

iOS SDK:

  • @property (nonatomic, assign, readonly) NSTimeInterval viewerWatchDuration // 用户观看时间,假如用2倍速播放到视频的第60s,该方法返回30。
  • @property (nonatomic, assign, readonly) NSTimeInterval videoContentPlayedTime //视频内容播放的时间,假如用2倍速播放到视频的第60s,该方法返回60。

Android SDK:

  • getWatchTimeDuration() // 用户观看时间,假如用2倍速播放到视频的第60s,该方法返回30。
  • getVideoContentPlayedTime() // 视频内容播放时间,假如用2倍速播放到视频的第60s,该方法返回60。

SDK也都有播放开始、完成、出错等事件回调,其它的播放器属性、接口和事件详见Github文档:iOS,Android

服务端API获取方式介绍

通过观看日志:

通过视频完成度接口:

接口文档:获取视频观看完成度接口

该接口可查看某一观众累计观看某一视频的完成度情况。无论观众使用哪种终端、分多少次观看,接口返回的是最终的汇总的完成度。

比如,视频A时长为50分钟,观众使用PC H5观看了第0~20分钟,使用手机H5观看了第10~30分钟,又使用APP观看了第40~50分钟,累计观看时长为20+20+10=50分钟,但观看的视频内容是 0~30 和 40~50 的部分。虽然累计观看时长与视频时长相同,但完成度为 (30+10)/50=80%。而用前端统计的方式,只能统计当次观看的时长,即使通过业务后台汇总累加了每次的时长,也只能通过对比观看时长和视频时长来判断是否完成了观看,上述例子中观看时长与视频时长相同,但实际完成度是80%。

通过视频高级分析来统计:

功能说明文档:高级分析功能说明

接口文档:高级分析-分页查询观看行为列表

注:
- 通过观看日志接口获取的数据在正常情况下的延时为10分钟。
- 后台导出excel表中的开始时间,是数据存储的时间,并不等同于视频开始播放的时间。
- 视频观看完成度在服务端每隔1小时计算一次,也就是有最大1小时的延迟。
- 高级分析每天统计一次,也就是有最大24小时的延迟。
- 完成度接口和高级分析中的完成度是基于视频正常速度来计算的,假如用2倍速完整观看一个视频,完成度会计算为50%。

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

恢复回收站视频API接口

接口URL

https://api.polyv.net/v2/video/{userId}/recover-videos

接口说明

(接口调用有频率限制,详细请查看)

该接口恢复点播回收站中的视频,接口支持批量恢复,一次性最多支持恢复100个视频。

返回结果支持格式

JSON

请求方式

POST

请求参数

参数名 必选 类型及范围 说明
userId true string 用户id,路径参数
ptime true string 当前13位毫秒级时间戳,3分钟内有效
sign true string 签名,40位大写的sha1值
vids true string 点播视频vid

返回结果

{
    "code": 200,
    "status": "success",
    "message": "success",
    "data": ""
}

失败返回json

// 时间戳过期:
{
  "code": 400,
  "status": "error",
  "message": "ptime is too old.",
  "data": ""
}
// 视频vids为空
{
    "code": 400,
    "status": "error",
    "message": "vids can't be empty",
    "data": ""
}
// vids数量超过100个
{
    "code": 400,
    "status": "error",
    "message": "vids limits 100",
    "data": ""
}
// 签名报错
{
    "code": 400,
    "status": "error",
    "message": "the sign is not right.",
    "data": ""
}

响应参数说明

字段 说明 类型 schema
code 响应码 int32
status 响应状态:success/error/fail string
message 错误信息说明 string
data 响应数据

响应错误说明

错误代码 message 说明
400 sign can not be empty. 加密串为空
400 ptime is too old. 时间戳过期
400 ptime is illegal. 时间戳参数格式不对或者超过当前时间3分钟
400 Could not find user by userId. userId不存在
400 the sign is not right. 签名不正确
400 vids can't be empty 视频vid为空
400 vids limits 100 vids数量超过100个

PHP请求示例

<?php

$userId="xxxxxx";
$secretkey="xxxxxx";
$url = 'http://api.polyv.net/v2/video/'.$userId.'/recover-videos';
$header = array('application/x-www-form-urlencoded');
$data = array(
    "ptime" => time()*1000,
    "vids" => "xxxxxx_x",
);
ksort($data);
$str='';
foreach ($data as $k => $v) {
    $str = $str.$k.'='.$v.'&';
}
$str=substr($str,0,strlen($str)-1);
$str=$str.$secretkey;
$hash=strtoupper(sha1($str));
$data["sign"]=$hash;
// 请求接口
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$sResult = curl_exec($ch);
if($sError=curl_error($ch)){
    die($sError);
}
curl_close($ch);
//打印获得的数据
print_r($sResult);
?>

签名规则:

将非空的请求参数按照参数名字典顺序排列,连接参数名与参数值,并在尾部加上secretkey,生成40位大写SHA1值,作为sign。 以下是示例过程:

1、请求参数为

ptime = "1492591990000"
vid = "382839019131be68715e9455f8d0971a_3"
format = "json"

2、将请求参数按照参数名字典顺序排列

format = "json"
ptime = "1492591990000"
vid = "382839019131be68715e9455f8d0971a_3"

3、连接字符串
连接参数名与参数值,并在尾部加上secretkey(secretkey的值为tIQp4ATe9Z),如下:

format=json&ptime=1492591990000&vid=382839019131be68715e9455f8d0971a_3tIQp4ATe9Z

4、生成签名sign

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

创建视频弹幕接口

接口URL

https://api.polyv.net/v2/danmu/{userId}/add

接口说明

(接口调用有频率限制,详细请查看)

上传点播视频弹幕接口,弹幕暂不支持特殊字符与表情符。

返回结果支持格式

JSON

请求方式

POST

请求参数

参数名 必选 类型及范围 说明
userId true string 用户id,路径参数
ptime true string 当前13位毫秒级时间戳,3分钟内有效
sign true string 签名,40位大写的sha1值
vid true string 点播视频vid
msg true string 弹幕信息
time true string 弹幕出现的时间,格式 HH:mm:ss
sessionId false string 场次号
param2 false string 自定义参数
fontSize false int32 字体大小,默认:18
fontMode false string 出现位置,顶部:top,底部:bottom,滚动:roll(默认)
fontColor false string 字体颜色,格式0xFFFFFF, 默认:0xFFFFFF

返回结果

// 成功结果
{
    "code": 200,
    "status": "success",
    "message": "success",
    "data": {
        "Id": 1115759
    }
}

失败返回json

// 时间戳过期:
{
  "code": 400,
  "status": "error",
  "message": "ptime is too old.",
  "data": ""
}
// 签名报错
{
    "code": 400,
    "status": "error",
    "message": "the sign is not right.",
    "data": ""
}
// 必须参数为空
{
    "code": 400,
    "status": "error",
    "message": "vid, msg and time should not be empty.",
    "data": ""
}
// 弹幕时间格式不对
{
    "code": 400,
    "status": "error",
    "message": "Wrong time format.",
    "data": ""
}
// 非法参数
{
    "code": 400,
    "status": "error",
    "message": "font size illegal",
    "data": ""
}
// 视频不存在
{
    "code": 400,
    "status": "error",
    "message": "vid doesn't exist.",
    "data": ""
}

响应参数说明

字段 说明 类型 schema
code 响应码 int32
status 响应状态:success/error/fail string
message 错误信息说明 string
data 响应数据 object
data.Id 弹幕Id int32

响应错误说明

错误代码 message 说明
400 sign can not be empty. 加密串为空
400 ptime is too old. 时间戳过期
400 ptime is illegal. 时间戳参数格式不对或者超过当前时间3分钟
400 Could not find user by userId. userId不存在
400 the sign is not right. 签名不正确
400 vid doesn't exist. 视频vid为空
400 vid, msg and time should not be empty. 必传参数为空
400 Wrong time format. 弹幕时间格式不对
400 font size illegal 字体格式非法

PHP请求示例

<?php

$userId="xxxxxxxxxxx";
$secretkey="xxxxxxxxxxx";
$url = 'http://api.polyv.net/v2/danmu/'.$userId.'/add';
$header = array('application/x-www-form-urlencoded');
$data = array(
    "ptime" => time()*1000,
    "msg" => "弹幕......",
    "vid" => "xxxxxxxxxxx",
    "time" => "00:01:10"
);
ksort($data);
$str='';
foreach ($data as $k => $v) {
    $str = $str.$k.'='.$v.'&';
}
$str=substr($str,0,strlen($str)-1);
$str=$str.$secretkey;
$hash=strtoupper(sha1($str));
$data["sign"]=$hash;
// 请求接口
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
$sResult = curl_exec($ch);
if($sError=curl_error($ch)){
    die($sError);
}
curl_close($ch);
//打印获得的数据
print_r($sResult);
?>

签名规则:

将非空的请求参数按照参数名字典顺序排列,连接参数名与参数值,并在尾部加上secretkey,生成40位大写SHA1值,作为sign。 以下是示例过程:

1、请求参数为

ptime = "1492591990000"
vid = "382839019131be68715e9455f8d0971a_3"
format = "json"

2、将请求参数按照参数名字典顺序排列

format = "json"
ptime = "1492591990000"
vid = "382839019131be68715e9455f8d0971a_3"

3、连接字符串
连接参数名与参数值,并在尾部加上secretkey(secretkey的值为tIQp4ATe9Z),如下:

format=json&ptime=1492591990000&vid=382839019131be68715e9455f8d0971a_3tIQp4ATe9Z

4、生成签名sign

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

上传点播视频字幕文件

接口URL

https://api.polyv.net/v2/video/{userId}/srt/upload

接口说明

(接口调用有频率限制,详细请查看)

上传点播视频字幕接口,改接口会自动检测字幕语言。

返回结果支持格式

form-data

请求方式

POST

请求参数

参数名 必选 类型及范围 说明
userId true string 用户id,路径参数
ptime true string 当前13位毫秒级时间戳,3分钟内有效
sign true string 签名,40位大写的sha1值
vid true string 点播视频vid
title true string 字幕名称
file true file 字幕文件,支持utf-8编码
asDefault false string 是否作为默认字幕,Y:是,N:否
language false string 语言,默认自动检测,支持语言:中文、繁体中文 、英语、日语、韩语、法语、德语、俄语、西班牙语、阿拉伯语、葡萄牙语、其他

返回结果

{
    "code": 200,
    "status": "success",
    "message": "success",
    "data": null
}

失败返回json

// 时间戳过期:
{
  "code": 400,
  "status": "error",
  "message": "ptime is too old.",
  "data": ""
}
// 文件名称为空
{
    "code": 400,
    "status": "error",
    "message": "title can't be empty",
    "data": ""
}
// 文件为空
{
    "code": 400,
    "status": "error",
    "message": "file can't be empty",
    "data": ""
}
// 签名报错
{
    "code": 400,
    "status": "error",
    "message": "the sign is not right.",
    "data": ""
}

响应参数说明

字段 说明 类型 schema
code 响应码 int32
status 响应状态:success/error/fail string
message 错误信息说明 string
data 响应数据

响应错误说明

错误代码 message 说明
400 sign can not be empty. 加密串为空
400 ptime is too old. 时间戳过期
400 ptime is illegal. 时间戳参数格式不对或者超过当前时间3分钟
400 Could not find user by userId. userId不存在
400 the sign is not right. 签名不正确
400 vid can't be empty 视频vid为空
400 file can't be empty 视频文件不能为空
400 title can't be empty 标题为空
400 language is not support 不支持的语言

PHP请求示例

<?php

$userId="xxxxxx";
$secretkey="xxxxxx";
$url = 'http://api.polyv.net/v2/video/'.$userId.'/srt/upload';
$header = array('Content-type: multipart/form-data');
$data = array(
    "ptime" => time()*1000,
    "title" => "xxxxx",
    "vid" => "xxxxxx_x",
);
ksort($data);
$str='';
foreach ($data as $k => $v) {
    $str = $str.$k.'='.$v.'&';
}
$str=substr($str,0,strlen($str)-1);
$str=$str.$secretkey;
$hash=strtoupper(sha1($str));
$data["sign"]=$hash;
$data['file']='@/home/moshunwei/english.srt';
// 请求接口
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$sResult = curl_exec($ch);
if($sError=curl_error($ch)){
    die($sError);
}
curl_close($ch);
//打印获得的数据
print_r($sResult);
?>

签名规则:

将非空的请求参数按照参数名字典顺序排列,连接参数名与参数值,并在尾部加上secretkey,生成40位大写SHA1值,作为sign。 以下是示例过程:

1、请求参数为

ptime = "1492591990000"
vid = "382839019131be68715e9455f8d0971a_3"
format = "json"

2、将请求参数按照参数名字典顺序排列

format = "json"
ptime = "1492591990000"
vid = "382839019131be68715e9455f8d0971a_3"

3、连接字符串
连接参数名与参数值,并在尾部加上secretkey(secretkey的值为tIQp4ATe9Z),如下:

format=json&ptime=1492591990000&vid=382839019131be68715e9455f8d0971a_3tIQp4ATe9Z

4、生成签名sign

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

上传点播弹幕文件接口

接口URL

https://api.polyv.net/v2/danmu/{userId}/upload

接口说明

(接口调用有频率限制,详细请查看)

上传点播弹幕文件接口。

返回结果支持格式

form-data

请求方式

POST

请求参数

参数名 必选 类型及范围 说明
userId true string 用户id,路径参数
ptime true string 当前13位毫秒级时间戳,3分钟内有效
sign true string 签名,40位大写的sha1值
vid true string 点播视频vid
file true file 弹幕文件,支持utf-8编码

返回结果

{
    "code": 200,
    "status": "success",
    "message": "success",
    "data": null
}

失败返回json

// 时间戳过期:
{
  "code": 400,
  "status": "error",
  "message": "ptime is too old.",
  "data": ""
}
// 文件名称为空
{
    "code": 400,
    "status": "error",
    "message": "title can't be empty",
    "data": ""
}
// 文件为空
{
    "code": 400,
    "status": "error",
    "message": "file can't be empty",
    "data": ""
}
// 签名报错
{
    "code": 400,
    "status": "error",
    "message": "the sign is not right.",
    "data": ""
}

响应参数说明

字段 说明 类型 schema
code 响应码 int32
status 响应状态:success/error/fail string
message 错误信息说明 string
data 响应数据

响应错误说明

错误代码 message 说明
400 sign can not be empty. 加密串为空
400 ptime is too old. 时间戳过期
400 ptime is illegal. 时间戳参数格式不对或者超过当前时间3分钟
400 Could not find user by userId. userId不存在
400 the sign is not right. 签名不正确
400 vid doesn't exist. 视频不存在
400 Please Use UTF-8 for SRT files 文件格式或编码问题

PHP请求示例

<?php

$userId="xxxxxx";
$secretkey="xxxxxx";
$url = 'https://api.polyv.net/v2/danmu/'.$userId.'/upload';
$header = array('Content-type: multipart/form-data');
$data = array(
    "ptime" => time()*1000,
    "vid" => "xxxxxx_x",
);
ksort($data);
$str='';
foreach ($data as $k => $v) {
    $str = $str.$k.'='.$v.'&';
}
$str=substr($str,0,strlen($str)-1);
$str=$str.$secretkey;
$hash=strtoupper(sha1($str));
$data["sign"]=$hash;
$data['file']='@/home/xxxxxx/danmu.srt';
// 请求接口
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$sResult = curl_exec($ch);
if($sError=curl_error($ch)){
    die($sError);
}
curl_close($ch);
//打印获得的数据
print_r($sResult);
?>

签名规则:

将非空的请求参数按照参数名字典顺序排列,连接参数名与参数值,并在尾部加上secretkey,生成40位大写SHA1值,作为sign。 以下是示例过程:

1、请求参数为

ptime = "1492591990000"
vid = "382839019131be68715e9455f8d0971a_3"

2、将请求参数按照参数名字典顺序排列

ptime = "1492591990000"
vid = "382839019131be68715e9455f8d0971a_3"

3、连接字符串
连接参数名与参数值,并在尾部加上secretkey(secretkey的值为tIQp4ATe9Z),如下:

format=json&ptime=1492591990000&vid=382839019131be68715e9455f8d0971a_3tIQp4ATe9Z

4、生成签名sign

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

集成说明

概述

Polyv 音频播放器是保利威云点播Web播放器的重要补充,主要应用于音频为主的业务场景,基于HTML5实现PC/移动端兼容,并深度融合了保利威视频云业务,如支持加密播放等,为用户提供简单、快速、安全、稳定的播放服务。

基础功能

  1. 支持播放上传到保利威平台的音视频文件,并且支持播放加密的音视频文件。
  2. 播放控制(播放、暂停,拖拽进度调整等)。
  3. 两套默认皮肤可选,也可以自定义样式。

格式支持

  • 音频格式:mp3、aac、m3u8
  • 音频编码:mp3、aac
  • 视频格式:mp4、m3u8
  • 视频编码:h264

注:
1. 如果上传文件时设置的是默认转码方式,所有的文件都会转码为视频文件,使用音频播放器播放视频文件时,只会播放声音,没有图像。
2. 如果上传文件时设置了"源文件播放",平台不会对源文件进行转码,播放器会直接播放源文件。建议上传mp3或aac格式的文件,其它音频格式文件,如3gp、ogg、wav、FLAC、mov等,能否正常播放取决于浏览器支持。
3. 如果上传视频文件时设置了“生成音频文件”,平台在转码时会额外转出一份mp3文件,音频播放器会播放该mp3文件。

适配情况

mp3 aac mp4 m3u8
iOS
Android 4.0+
Chrome 34+
Firefox 49+
IE IE9+ IE9+ IE9+ IE11+ for Windows 8.1+
Edge
Safari 8+

常见适配问题:
1. 设置autoplay=true无效,不会自动播放
- 移动端浏览器中音频自动播放一直是禁止的,目前通用的办法是通过用户手动触发播放(例如监听用户的点击事件并调用play方法),但不排除一些特性的浏览器和webview允许自动播放。
- PC端Chrome 55以上版本、MacOS High Sierra Safari 11以上的浏览器也都限制自动播放。
2. 音量调节功能(setVolume)在iOS和部分Android浏览器上不支持。
3. 倍速播放功能(setSpeed)在部分移动端浏览器上不支持,比如Android 微信。

集成方式

引入资源

<!-- 指定版本 -->
<script src="//player.polyv.net/resp/vod-audio-player/0.1.2/audio-player.min.js"></script>
<!-- 最新版本 -->
<script src="//player.polyv.net/resp/vod-audio-player/latest/audio-player.min.js"></script>

创建 HTML 节点

<div id="myAudioPlayer"></div>

创建播放器实例

const plvAudioPlayer = new PlvAudioPlayer({
  vid: '从 polyv 后台获取的 vid',
  wrap: '#myAudioPlayer',
  skin: 'white'
});

监听播放器事件

// 播放器初始化完毕
plvAudioPlayer.on('ready', function() {
  console.info('ready');
});

调用播放器方法,及获取播放器属性

// 切换加密视频
plvAudioPlayer.changeVid({
  ts: ts,
  sign: sign,
  vid: vid
});
// 获取音频文件当前播放进度
const currentTime = plvAudioPlayer.currentTime;
以上内容是否对您有帮助?根本没有帮助文档较差文档一般文档不错文档很好
Loading...

字幕设置

字幕设置:顶部功能列表的“播放器”—选择已有播放器(或创建新的播放器)—点击“修改”,如下图所示:
1
点击“修改”后,进入如下图界面,找到“字幕设置”,进行字幕相关属性设置。
2
显示字幕:选择后开启字幕功能;
双语字幕:选中后开启双字幕功能,将根据字幕文件的语言匹配双字幕;
  设为默认字幕:把双字幕设为默认字幕;
  上方字幕:双字幕中位于上方的字幕;
  下方字幕:双字幕中位于下方的字幕;
字幕样式设置:可控制字幕的样式,包括字体、字号、字体颜色、加粗、倾斜、描边、字体间距、字幕高度位置等,具体如下图:
4

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