如何使用
<div id="player"></div>
<script src="//player.polyv.net/script/player.js"></script>
<script>
var player = polyvPlayer({
wrap: '#player',
width: 800,
height: 533,
vid: '88083abbf5535a4d7b4d8614427559e0_8',
});
</script>
选项
参数 | 类型 | 默认值 | 说明 |
---|---|---|---|
wrap | string / HTMLElement | - | 页面上存在需要载入播放器的DOM元素或css选择器 |
width | number / string | 100% |
播放器的宽度 |
height | number / string | auto |
播放器的高度 |
vid | string | - | 从 polyv 后台上传的视频会生成一个视频唯一vid |
loop | boolean | false |
视频播放结束后是否循环播放 |
autoplay | boolean | undefined |
播放器加载后视频是否自动播放,也可从后台设置(因移动端浏览器限制,不支持自动播放,该参数只对PC端有效。) |
volume | number | 0.75 |
视频默认音量大小,范围 (0, 1),播放器会记录上一次播放的音量 |
flash | boolean | false |
是否默认打开flash播放器,注意:设置后播放器皮肤为简雅蓝、高贵金、清新绿、活力红时才显示播放器切换按钮 |
df | number | - | 视频默认清晰度,可设置为0 、1 、2 、3 ,分别对应自动、流畅、高清、超清,设置该参数会覆盖后台的设置 |
hideRepeat | boolean | false |
播放结束后是否显示重播面板,可通过play.HTML5.changeRepeat改变 |
code | string | - | 跑马灯设置中自定义的code值 |
speed | boolean/array | [2, 1.5, 1.2, 0.5] | 设置为false则关闭倍速,可传入数组自定义显示哪几种倍速,速率1不需要填入,会自动添加,所设置速率值必须大于0,少于或等于3,最多设置6种速率(不包含1),所设置值会按由大到小自动排序 |
showHd | boolean | true |
是否显示清晰度选择 |
ignoreIE | boolean | false |
设置该选项将会在ie浏览器中禁用HTML5播放器(edge浏览器除外,国内360,QQ等浏览器的兼容模式表现为ie浏览器,所以也会被禁用) |
watchStartTime | number | undefined |
从第几秒开始播放,需少于视频时长 |
watchEndTime | number | undefined |
播放到第几秒结束播放,需少于视频时长,在该值到结束的进度条禁止点击,如果设置值少入watchStartTime,则watchStartTime失效 |
skinLocation | number | 1 |
控制栏显示在视频区域内外或不显示,可选0(不显示)、1(视频内)、2(视频外) |
ban_history_time | string | off |
是否禁止记住播放进度,下次打开会从上次进度打开(设置watchStartTime后还是会从watchStartTime处开始播放),默认为off(不禁止),on为禁止 |
hideSwitchPlayer | boolean | false |
是否禁止显示HTML5与flash播放器切换按钮 |
priorityMode | string | video |
默认打开视频模式还是音频模式,需要该视频有对应的音频转码可选video/audio |
audioMode | boolean | true |
是否开启音频模式 |
videoMode | boolean | true |
是否开启视频模式,设置为false后将会以音频模式播放,无论是否有音频转码 |
screenshot | boolean | false |
是否开启视频截图功能 |
ban_seek_by_limit_time | string | off |
是否禁止视频拖拽未播放区域 |
ban_seek | string | off |
设置为 on 播放器将会彻底禁止拖拽 |
loading_bg_img | string | - | 视频默认封面图 |
ban_record_interaction_right_answer | string | off |
设置为 on 问答回答正确不会记录,每次刷新播放都需重新回答 |
url | string | undefined |
设置后播放器以该url为播放地址播放(支持m3u8、mp4或其他当前浏览器支持的格式视频),不与vid同时设置也可以从changeVid中切换vid或另外的播放url |
start | number | undefined |
子视频开始时间 |
end | number | undefined |
子视频结束时间 |
lang | string | undefined |
播放器显示语言,若未设置则读取后台设置,自动选择暂未支持,默认中文,可设置zh_CN/en |
mainScreen | string | "ppt" |
默认三分屏主屏(video/ppt) |
subWidth/subHeight | number | 355/200 |
默认三分屏副屏宽/高 |
pptVisible | boolean | true |
三分屏初始化时是否需要默认显示 |
pptEnable | boolean | false |
是否显示三分屏 |
show_rate | number | undefined |
允许播放的最高清晰度 1(流畅)、2(高清) |
preloadDataSize | number(kb) | 15000 |
视频最大缓冲量,设置后会根据实际播放时长和清晰度加载切片数量(500 - 60000) |
preloadDurationLength | number(秒) | undefined |
视频最大缓冲时长,在使用常规加密视频会综合preloadDataSize的设置算出实际时长比较使用较大值,源视频文件使用preloadDurationLength |
is_interaction | string | on |
是否显示后台设置的问答 |
keyboardSeekTime | number | 15000 |
键盘控制前进/后退毫秒数 |
allowFullscreen | boolean | true |
是否允许全屏,界面上操作禁止全屏,接口全屏依然允许 |
viewerInfo | object | \ | 自定义观众信息。设置后,播放器上报的观看行为日志中会附带观众信息。详见:观众信息设置。 |
history_video_duration | number | 5 |
视频总时长超过多少分钟时记录播放进度 |
showAuto | boolean | true |
是否显示自动清晰度按钮 |
flashConfig | object | {} |
切换flash播放器,或者在移动端下额外传入参数对象 |
video_align | string | "center" 视频内容对齐方式 top / bottom / left / right |
|
srt_caption_txt_size | number | 20 |
字幕字体大小, 20~40 px |
srt_caption_txt_height | number | 20 |
底部字幕离底部高度,单位px |
srt_caption_base_height | number | 720 |
字幕字体底部基准高度,视频尺寸变化,srt_caption_txt_height 值会根据该高度调整高度 |
srt_caption_base_width | number | 1280 |
字幕字体大小基准宽度,字幕大小会随视频尺寸变化 |
fullscreenProxy | boolean | false |
全屏代理,设置后点击全屏按钮或者双击播放器不会调用全屏api,会触发 window.onFullscreenProxy(vid, toFullscreen) 事件,调用者自行做全屏处理,适合在全屏状态下叠加用户自定义的元素 |
title_of_wrong_answer_explain | string | undefined | 问答回答错误提示文案 |
title_of_right_answer_explain | string | undefined | 问答回答正确提示文案 |
player_id | string | undefined | 播放器id,传入后会使用该id的播放器设置 |
cover_display | string | 'scaleToFill' |
封面图的显示方式,可选 scaleToFill(对应background-size: 100% 100%) / scaleAspectFit(对应background-size: contain) / scaleAspectFill (对应background-size: cover) |
full_page_screen | boolean | false |
是否显示页面全屏按钮,配置window.onFullPageScreen 事件回调做相应页面全屏处理 |
cover_opacity | number | 70 |
封面遮罩层透明度 | |
rightMenu | object[] | 后台设置 | 右键菜单设置,例: [{rightName: "polyv",rightUrl: "http://www.polyv.net/"}] ,rightUrl可为空 |
preview | boolean | false |
使用视频预览,只需传入真实的视频vid,一般为播放视频前3分钟 |
ban_preview_video | on or off |
off |
关闭视频预览图显示 |
选项-加密设置
playsafe
(string|function / 默认值:undefined
)
- 服务器计算出的 token 若要播放加密视频才需要该参数,非加密视频可忽略
- 当传入function 时,next必须调用,且传入获取的token值。当设置函数时切换视频(changeVid)可不需重传playsafe值,当播放加密视频时会自动获取,若视频有音视频切换建议使用
- 请在服务器生成 token 值
ts
(number / 默认值:undefined
)
- 移动端加密视频时间戳 移动端视频的WEB加密
sign
(string / 默认值:undefined
)
- 移动端加密视频签名 移动端视频的WEB加密
token获取方式
// php
function get_client_ip() {
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ipaddress = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ipaddress = $_SERVER['REMOTE_ADDR'];
}
return $ipaddress;
}
$userId = 'your userId'; // polyv 提供的服务器间的通讯验证
$secretkey = 'your secretkey'; // polyv 提供的接口调用签名访问的key
$videoId = '65956867df8c717eb79136e05394122c_6'; // 视频对应vid
$ts = time() * 1000; // 时间戳
$viewerIp = get_client_ip(); // 用户 ip
$viewerId = '12345'; // 自定义用户 id
$viewerName = 'testUser'; // 用户昵称, 若值为中文需要urlencode('张三')
$extraParams = 'HTML5'; // 自定义参数
/* 将参数 $userId、$secretkey、$videoId、$ts、$viewerIp、$viewerIp、$viewerId、$viewerName、$extraParams
按照ASCKII升序 key + value + key + value ... +value 拼接
*/
$concated = 'extraParams'.$extraParams.'ts'.$ts.'userId'.$userId.'videoId'.$videoId.'viewerId'.$viewerId.'viewerIp'.$viewerIp.'viewerName'.$viewerName;
// 再首尾加上 secretkey
$plain = $secretkey.$concated.$secretkey;
// 取大写MD5
$sign = strtoupper(md5($plain));
// 然后将下列参数用post请求 https://hls.videocc.net/service/v1/token 获取 token
$url = 'https://hls.videocc.net/service/v1/token';
$data = array('userId' => $userId, 'videoId' => $videoId, 'ts' => $ts, 'viewerIp' => $viewerIp, 'viewerName' => $viewerName, 'extraParams' => $extraParams, 'viewerId' => $viewerId, 'sign' => $sign);
$options = array(
'http' => array(
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data)
)
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
// 获取返回结果的 token, 再传入 playsafe 中播放加密视频
$token = json_decode($result)->data->token;
var player = polyvPlayer({
wrap: '#video',
width: 800,
height: 533,
vid: '02bfeb00e2ea42ec033fedfbd24c2879_0',
playsafe: '<?php echo $token ?>' //传入服务器生成token
});
// or
var player = polyvPlayer({
wrap: '#video',
width: 800,
height: 533,
vid: '02bfeb00e2ea42ec033fedfbd24c2879_0',
playsafe: function(vid, next) {
$.ajax({
...
url: '自定义获取token的请求地址'
data: {
vid: vid
},
...
}).done(function(res) {
next(res.playsafe);
});
}
});
选项-自定义广告
adSkip
(boolean / 默认值: false
)
- 是否可以跳过广告
- 设置后会出现跳过广告的按钮
adMatter
(array / 默认为后台设置值)
- 自定义广告列表,可设置多个,设置后会覆盖后台广告设置
- 视频广告只支持MP4格式
示例:
adMatter: [
{
addrurl: 'http://www.polyv.net/', //广告跳转链接
adtype: 2, //广告资源类型: 1 图片广告 、2 视频广告(暂停广告与弹窗不支持视频类型广告)、3 swf广告(flash播放器生效)
location: 1, //广告位置: 1 片头广告、2 暂停广告 、3 片尾广告、4 弹窗广告
timesize: 10, //广告时长(单位:秒)
matterurl: 'test.mp4', //广告地址
cataid: 1, //分类ID(可选,默认为 1)
poplocation: 1, //弹窗广告位置(1,2,3,4)
popuptime: 45 //弹窗广告出现的时间
}
]
选项-自定义片头
teaser_show
(number / 默认为后台设置值)
- 是否显示片头,0
不显示, 1
显示
teaser_url
(string / 默认为后台设置值)
- 片头地址(视频只支持mp4)
teaser_time
(number / 默认为后台设置值,图片默认3
)
- 片头显示时长
teaserSkip
(boolean / 默认值 false
)
选项-自定义片尾
tail_show
(number / 默认为后台设置值)
- 是否显示片尾,0
不显示, 1
显示
tail_url
(string / 默认为后台设置值)
- 片尾地址(视频只支持mp4)
tail_time
(number / 默认为后台设置值,图片默认3
)
- 片尾显示时长
tailSkip
(boolean / 默认值 false
)
- 是否显示跳过片尾按钮
选项-统计
statistics
(object / 默认值: undefined
)
- 用户自定义播放统计参数
viewerInfo
(object / 默认值:{}
)
- 观看者统计
statistics: {
session_id: 'class_1', // 播放场次标识
param1: '1', //自定义参数,可设置4个
param2: '2',
param3: '3',
param4: '4',
}
viewerInfo: {
viewerId: 'abc', // 用户id ,设置后会覆盖 statistics.session_id
viewerName: '张三', // 用户姓名, 设置后会覆盖 statistics.param2
viewerAvatar: 'https://www.test.com/user.png' // 用户头像
}
选项-自定义logo
logo
(object / 默认值: undefined
)
- 自定义logo设置,如果不设置则读取 polyv 后台的设置值
- 若设置了宽高的任何一个的话logo大小会根据据设置值显示,若不设置则最大显示120px,请注意图片大小不要过大以免影响显示效果
logo: {
// 宽 默认 'auto'
logo_width: 200,
// 高 默认 'auto'
logo_height: 'auto',
// logo地址
logo_url: 'test.png',
// 位置 0,1,2,3,4 (隐藏、左上、右上、左下、右下)
logo_pos: 2,
// 跳转链接 (选填)
logo_link: 'http://www.polyv.net/',
// 透明度 (0~100)
logo_alpha: 50,
//logo偏移(根据左上角为原点的坐标,单位 % ,只在位置1,2生效)
logoOffset: '40,50',
logo_resize: true // 动态更新logo大小,默认为false, 若设置了logo宽高则不生效
}
实例属性
属性 | 返回值 | 说明 |
---|---|---|
isSupportHTML5 | boolean | 浏览器是否支持 HTML5 播放器,若返回 true 则播放器默认打开 HTML5 播放器,否则将打开flash 播放器 |
HTML5 | boolean / object | 当前打开的是flash播放器则该属性为 false,反之为HTML5播放器的实例,该实例之后会说明 |
flash | boolean / object | 当前打开的是HTML5播放器则该属性为 false,反之返回多终端代码初始化的实例,该实例之后会说明 |
实例方法
player.toFlash
- 切换到 flash 播放器
player.toHTML5
- 切换到 HTML5 播放器
player.destroy
- 销毁播放器,包括HTML5和flash播放器
player.on
- 事件绑定
player.changeStatistics(session_id, param1, param2, param3, param4)
- 修改播放统计参数
player.getCurrentMode
- 返回当前播放模式('video' / 'audio')
player.setMode
- 切换播放模式,可选 'video' / 'audio',切换音频时需要有相应的音频转码
player.changeVid(object / string)
- 接口支持传入object、json格式化字符串、多个参数传入,使用如下:
const option = {
vid: '需要切换视频的vid',
autoplay: true,
ts: '移动端授权ts',
sign: '移动端授权sign',
playsafe: '若是加密视频需重新生成',
statistics: {}, // 和选项中statistics一样,会覆盖掉原本的统计参数
skipTeaser: false, // 切换视频是否跳过片头
ban_seek: 'off', // 设置为 on 播放器将会彻底禁止拖拽
ban_seek_by_limit_time: 'off', // 是否禁止视频拖拽未播放区域
};
// 方法一
player.changeVid(option);
//方法二
player.changeVid(JSON.stringify(option));
// 方法三 该写法为flash播放器的写法,请尽量使用方法一、方法二
player.changeVid(vid, watchStartTime, autoplay, ts, sign)
player.toggleFullPageScreen
- 更换页面全屏按钮状态
player.switchMain('ppt'|'player')
- 切换ppt播放器ppt与视频位置,ppt
ppt为主位置,player
视频为主位置,
另提供以下方法
j2s_getCurrentTime
、 j2s_getDuration
、 j2s_pauseVideo
、 j2s_resumeVideo
、
j2s_stopVideo
、 changeVid
、 j2s_stayInVideoTime
、 j2s_realPlayVideoTime
、
j2s_seekVideo
、 j2s_setVolume
、 changeRepeat
、 toggleFullscreen
- 具体方法与flash播放器一致,具体参考播放器函数接口汇总
-
toggleFullscreen只在HTML5播放器生效,因为浏览器安全限制,flash尚不支持
播放器切换事件
HTML5Load
- flash 播放器切换到 HTML5 播放器时触发
player.on('HTML5Load', function() {
console.log(typeof player.HTML5); // 'object';
console.log(player.flash); // false
});
flashLoad
- HTML5 播放器切换到 flash 播放器时触发
播放错误事件
serverError
- 返回一些如录屏(#016)、黑白域名(#006)、授权验证失败(#012)、视频数据读取失败(#003)等错误信息
player.on('serverError', function(event, errorCode) {
console.log(errorCode);
});
HTML5 属性
若当前播放器为 HTML5播放器,player.HTML5属性为HTML5播放器实例对象,反之为false
属性
player.HTML5.video
(HTMLElement)
- HTML5播放器所创建的原生 video 元素,可按照需要自行绑定事件与设置属性等
方法
player.HTML5.play
- 播放视频
player.HTML5.pause
- 暂停视频
player.HTML5.togglePlay
- 暂停播放交替切换
player.HTML5.toggleFullscreen
- 全屏非全屏交替切换
- 在player.HTML5.video 中可以通过绑定 fullscreen 与 exitFullscreen事件来监听全屏与退出全屏事件
player.HTML5.changeVid
(object)
参数对象设置
- vid
(必填): 需更换的vid,若与当前播放视频vid一样则无效
- playsafe(选填)
:若更换的视频为加密视频,需要传入playsafe参数,每个不同vid都需重新传入一个不同playsafe
- autoplay (boolean/ 选填): 切换视频后视频是否自动播放
player.HTML5.changeRepeat
(boolean)
- 参数
true
或false
,改变hideRepeat值
flash属性
若当前播放器为 flash 播放器,player.flash属性为polyv多终端代码初始化播放器后返回对象,反之为false,* 注意,移动端中对象会存储在flash中
- 参考 多终端代码
HTML5 播放器与 flash 播放器切换说明
- 为了兼容不兼容HTML5播放器的浏览器,若检测到不兼容的浏览器或设置flash: true会自动打开flash播放器,比如IE10、IE9。
- 播放器实例有 HTML5 与 flash 两个属性,根据当前播放器类型而切换
- 可以设置 flashLoad 事件监听flash播放器是否加载
与flash事件兼容
目前HTML5播放器兼容了部分flash播放器事件,设置后在HTML5播放器中也会触发, 参考 flash播放器事件,事件如下:
s2j_onVideoPlay
、 s2j_onVideoPause
、 s2j_onPlayerInitOver
、 s2j_onPlayOver、
s2j_onPlayStart
、 s2j_onFullScreen
、 s2j_onNormalScreen
、 s2j_onVideoSeek
、 s2j_onReadyPlay
、 s2j_onPlayerError
、 s2j_volumeChange
onChangeMode(vid, currentMode, lastMode)
- 音视频切换的时触发
- vid: 视频vid
- currentMode:切换后播放模式 ('video'/'audio')
- lastMode:切换前播放模式 ('video'/'audio')
playCompleted(vid)
- 用户首次完整观看完该视频触发
onFullPageScreen(vid, currentStatus)
- 页面全屏事件回调,需添加参数full_page_screen: true
window.onFullPageScreen = function(v, currentStatus) {
// 这里添加与移除页面全屏相关样式,需调用者添加
document.getElementById('videoLayout').classList[currentStatus ? 'remove' : 'add']('full');
// 更新播放器页面全屏按钮状态
player.toggleFullPageScreen();
}
兼容性
- pc:IE11(window 8+)或以上浏览器兼容HTML5播放器,IE10、IE9将打开flash播放器
- 移动端: 将调用多终端代码打开播放器
- 因用ES2015编写,暂不兼容IE8
在H5播放器中使用授权播放与跑马灯
具体参考授权播放和跑马灯
若需要在PC端h5播放器中显示跑马灯,则移动端的$array改为(callback不为空时):
$array = Array("status"=>$status,"username"=>$username,"sign"=>$sign,"msg"=>$msg,"fontSize"=>$fontSize,"fontColor"=>$fontColor,"speed"=>$speed,"filter"=>$filter,"setting"=>$setting,"alpha"=>$alpha,"filterAlpha"=>$filterAlpha,"filterColor"=>$filterColor,"blurX"=>$blurX,"blurY"=>$blurY,"tweenTime"=>$tweenTime,"interval"=>$interval,"lifeTime"=>$lifeTime,"strength"=>$strength,"show"=>$show,);
在多终端代码中使用 HTML5 播放器
页面中只需引入多终端代码,不需引入 HTML5 播放器代码,切换是会自动加载
默认打开flash
- 参数:在
flashvars
参数加上skin_type: 'skin_blue'
、ban_set_player: 'off'
changeH5Success
: 当点击切换 HTML5 播放器时触发且只会在默认打开 flash 播放器时触发- 说明: 该设置会默认打开 flash 播放器,但播放器中会有切换播放器的选项
- 设置如下:
var player = polyvObject('#video').videoPlayer({
width: 800,
vid: '02bfeb00e2ea42ec033fedfbd24c2879_0',
flashvars: {
skin_type: 'skin_blue',
ban_set_player: 'off'
}
});
player.on('changeH5Success', function(newPlayer) {
player = newPlayer; // newPlayer 是初始化 HTML5 播放器后返回对象
});
默认打开HTML5 播放器
- 参数:
forceH5
(boolean /false
) - 说明: 设置 forceH5 参数为 true 后播放器将默认打开 HTML5 播放器(浏览器不兼容除外),若需要播放加密视频需传入 playsafe 参数
- 设置如下
// 返回 HTML5 播放器对象
var player = polyvObject('#video').videoPlayer({
width: 800,
vid: '65956867dfc7794f00b20912e5ea5ecc_6',
forceH5: true,
// playsafe: 'token' 加密视频需传入
});
注意事项
- 请尽量不要对播放器的样式进行修改或者对video标签进行修改
- 尽量避免在有animation和transform等css3的元素或者子元素下初始化播放器,因为这些元素可能对导致播放器全屏样式错乱,这个属于浏览器的一个bug,请谅解