html5网页播放器视频切换、倍速切换、视频预览的代码实例

 本文将对视频播放相关的功能进行说明,包括初始化播放器、播放器尺寸设置、视频切换、倍速切换、视频预览、自定义视频播放的开始/结束时间、禁止拖拽进度、播放器皮肤、控件按钮以及播放控制等。

 图 / html5视频播放器调用效果(倍速切换)

初始化播放器

Polyv Web播放器同时支持Flash和HTM5两种播放模式,并可以根据终端和浏览器环境自动选择最优播放模式。默认优先使用HTML5,在不支持HTML5播放的浏览器下(如低版本的IE浏览器)会自动切换到Flash播放。

代码示例:

<div id="player"></div>
<script src="//player.polyv.net/script/player.js"></script>
<script>
var player = polyvPlayer({
    wrap: '#player',
    width: 800,
    height: 533,
    vid: '88083abbf5bcf1356e05d39666be527a_8',   
});

player.on('s2j_onPlayStart', () => { //订阅视频开始播放事件
    console.info('视频开始播放');
    player.j2s_seekVideo(60); //视频seek到第60秒
});
</script>

更多设置功能请查阅:属性和接口说明。

可通过 player.isSupportHTML5 检测当前浏览器是否支持 H5 播放。若当前浏览器(如IE9、IE10)不支持 H5 ,会自动切换为Flash播放器。

请尽量不要对播放器的样式进行修改或者对video标签进行修改。

尽量避免在有animation和transform等css3的元素或者子元素下初始化播放器,因为这些元素可能会导致播放器全屏样式错乱,这属于浏览器的一个bug,请谅解。

播放器尺寸设置

播放器的尺寸可通过 width和height两个参数进行设置。参数支持像素和百分比类型的值。

代码示例: 

<div id="player"></div>
<script src="//player.polyv.net/script/player.js"></script>
<script>
var player = polyvPlayer({
    wrap: '#player',
    width: '80%', // 播放器宽,支持像素值和百分比两种类型,默认值为'100%'
    height: '60%', // 播放器高,支持像素值和百分比两种类型,默认值为'auto'
    vid: '88083abbf5bcf1356e05d39666be527a_8',   
});
</script>

如果不指定参数width的值,播放器宽会使用默认值:100%,即与父容器的宽一致。

如果不指定参数height的值,播放器高会使用默认值:'auto',即根据视频分辨率比例自动适配。

视频切换(连续播放)

当前播放器实例可以使用changeVid接口切换正在播放的视频。当有多个视频,在上一个视频播放完毕时,自动播放下一个视频时也可采用该处理方式。

代码示例:

const option = {
  vid: '88083abbf5bcf1356e05d39666be527a_8',
  //autoplay: true,
  //playsafe: '', //PC端播放加密视频需要传playsafe参数
  //sign: '',// 移动端H5播放加密视频需要传 sign、ts参数
  //ts: '', 
  //watchStartTime: 100, // 从第100秒开始播放
  //skipTeaser: false, //切换视频后是否跳过片头直接播放正片
  //ban_seek: 'off', // 是否禁止拖拽进度,值为'on'时将会禁止拖拽进度。
  //ban_seek_by_limit_time: 'off',  // 是否禁止拖拽进度至视频未播放的位置,为'on'时只可在已播放过的进度范围内拖拽(向前拖拽)。
  viewerInfo: { //切换视频时设置观众信息,非必填
        viewerId: '1555313336634', // 观众ID
        viewerName: 'polyv', // 观众昵称
        viewerAvatar: 'https://my.domain.com/user/avatar.png', // 观众头像URL
        viewerExtraInfo1:'', // 自定义额外信息字段1
        viewerExtraInfo2:'', // 自定义额外信息字段2
        viewerExtraInfo3:'' // 自定义额外信息字段3
     }
};
player.on('s2j_onPlayOver', () => {
    console.info('视频播放完毕');
    player.changeVid(option); // 切换下一个视频
});

清晰度切换

视频上传点播平台后会转码成多个清晰度的视频文件,详见​  视频清晰度与码率。 ​可通过参数和接口控制清晰度的选择和切换。

代码示例:

<div id="player"></div>
<script src="//player.polyv.net/script/player.js"></script>
<script>
var player = polyvPlayer({
  wrap: '#player',
  width: 800,
  height: 533,
  vid: '88083abbf5bcf1356e05d39666be527a_8',
  showHd: true, // 播放器控制栏是否显示清晰度切换的按钮,默认为 true
  show_rate:2, // 允许选择的最高清晰度,取值:{1,2}。值为1时,只显示流畅,值为2时,可选流畅和高清。不设置时会显示全部清晰度。
  df:1  //视频播放默认采用的清晰度,取值:{0,1,2,3},分别对应自动、流畅、高清、超清。
});
const hd = 3;
player.switchBitrate(hd);// 切换到超清。
</script>

倍速切换

H5播放器默认开启倍速播放功能。可通过参数进行自定义控制。

代码示例:

<div id="player"></div>
<script src="//player.polyv.net/script/player.js"></script>
<script>
var player = polyvPlayer({
  wrap: '#player',
  width: 800,
  height: 533,
  vid: '88083abbf5bcf1356e05d39666be527a_8',
  //speed:false, //当参数值为boolean类型时,表示是否显示倍速切换的按钮。
  speed: [0.5, 1, 1.25, 1.5, 2] //当参数值为数组时,表示倍速切换的可选速率。最多可设置6个速率,取值范围:(0,3]。PC端默认值为:[2, 1.5, 1.2, 0.5],移动端默认值为:[1, 1.5, 2]。
});
</script>

线路切换

保利威视频云拥有多条CDN加速线路,当某一条线路出现问题时,可切换至另一线路。

代码示例:

<div id="player"></div>
<script src="//player.polyv.net/script/player.js"></script>
<script>
var player = polyvPlayer({
    wrap: '#player',
    width: 800,
    height: 533,
    vid: '88083abbf5bcf1356e05d39666be527a_8',
    showLine: 'on' // 是否显示线路切换按钮
});
</script>

注:线路切换暂时只支持在移动端H5播放器上使用。

视频预览

在一些场景下,希望只允许观众观看视频的一部分,付费或者注册后才允许观看完整视频。该场景可通过传入预览vid或者设置参数使用预览模式来实现。预览vid可通过管理后台的预览代码来获取,预览时长可在点播管理后台进行设置。

 代码示例:

<div id="player"></div>
<script src="//player.polyv.net/script/player.js"></script>
<script>
var player = polyvPlayer({
    wrap: '#player',
    width: 800,
    height: 533,
    vid: '88083abbf5bcf1356e05d39666be527a_8',  
    preview:true // 是否使用预览模式,到达预览时长后会停止播放
});
</script>

当传入预览vid时,不需要设置preview参数。当preview = true时,传入真实vid即可。

自定义视频播放的开始/结束时间

播放器支持通过参数来指定视频开始/结束播放的时间点。

 代码示例:

<div id="player"></div>
<script src="//player.polyv.net/script/player.js"></script>
<script>
var player = polyvPlayer({
    wrap: '#player',
    width: 800,
    height: 533,
    vid: '88083abbf5bcf1356e05d39666be527a_8',
    //watchStartTime:10, //播放开始时间,表示视频从第几秒开始播放,参数值需小于视频时长。
    //watchEndTime:60 //播放结束时间,表示视频播放到第几秒结束,设置该值后,只能在开始时间至结束时间范围内进行进度条的拖拽。
    start:10, //截取视频的一部分作为一个独立的视频,如原视频时长60秒,设定start=20后,则视频显示为40秒,并且从原视频的第20秒开始播放。
    end:50,//截取视频的一部分作为一个独立的视频,如原视频时长60秒,设定start=20,end=50后,则视频显示为30秒,并且从原视频的第20秒开始播放,到原视频的50秒结束播放。
});
</script>

续播

播放器默认会记录视频上次观看到的时间点,在同一浏览器中再次打开播放页面,可从上次观看的时间点继续播放。

 代码示例:

<div id="player"></div>
<script src="//player.polyv.net/script/player.js"></script>
<script>
var player = polyvPlayer({
  wrap: '#player',
  width: 800,
  height: 533,
  vid: '88083abbf5bcf1356e05d39666be527a_8',
  history_video_duration: 3, //默认时长超过5分钟的视频才会开启续播功能,可通过此参数修改,单位:分钟。
  ban_history_time: 'off' //当值为’on‘时会禁用续播功能。
});
</script>

播放器只会在视频播放10秒后至视频结束10秒前的时间段内正常记录续播点。播放不足10秒不续播,播放到了最后10秒但未播完,续播点在结束前10秒,播完后不续播。

自定义播放器外观和控件

播放器的皮肤外观以及控件按钮可通过管理后台的播放器设置或者参数进行自定义设置。

<div id="player"></div>
<script src="//player.polyv.net/script/player.js"></script>
<script>
var player = polyvPlayer({
  wrap: '#video',
  width: 800,
  height: 533,
  vid: '88083abbf5bcf1356e05d39666be527a_8',
  skinLocation:1, // 播放器控制栏显示位置:0 不显示,1 视频区域内,2 视频区域外。仅在PC端生效。
  hideSwitchPlayer:true, // 是否隐藏H5和Flash播放器的切换按钮。
  lang:en, // 播放器语言,可选 zh_CN (中文)、 en (英文)
  ban_skin_progress:true, // 是否隐藏视频播放进度条
  showHd: false, // 是否显示清晰度切换的按钮,默认为 true
  speed: false, // 是否显示倍速切换的按钮
  allowFullscreen: false, // 是否允许全屏播放。为false时会隐藏全屏按钮(全屏的API依然可用)。
  screenshot:true, // 是否显示视频截图按钮。仅在PC端生效。
  hideRepeat: true, // 是否隐藏播放结束后的重播按钮。
  fullscreenProxy:true, // 全屏代理,设置后点击全屏按钮或者双击播放器不会调用全屏api,会触发 window.onFullscreenProxy(vid, toFullscreen) 事件,调用者自行做全屏处理,适合在全屏状态下叠加用户自定义的元素。
  full_page_screen:true, // 是否显示网页全屏按钮。需绑定onFullPageScreen事件做对应的处理。
  pictureInPicture:true, // 是否在控制栏显示画中画按钮。仅在PC H5播放器生效,仅在播放非加密视频时生效。
});

player.toggleFullscreen(); // 全屏/退出全屏 切换
player.on('s2j_onFullScreen', () => {
    console.info('播放器进入全屏');
});
player.on('s2j_onNormalScreen', () => {
    console.info('播放器退出全屏');
});
window.onFullscreenProxy = function (vid, toFullscreen) {
  console.log('全屏事件触发:',toFullscreen);
  // 这里添加自定义全屏处理逻辑
}
window.onFullPageScreen = function(v, currentStatus) {
    console.log('页面全屏事件触发:',currentStatus);
    // 这里添加与移除页面全屏相关样式,需调用者添加
    player.toggleFullPageScreen();// 更新播放器页面全屏按钮状态
}
</script>

禁止拖拽进度

在部分教育和培训场景下,希望能够强制学员看完视频,不允许拖拽进度。可通过播放器参数进行控制:

<div id="player"></div>
<script src="//player.polyv.net/script/player.js"></script>
<script>
var player = polyvPlayer({
    wrap: '#player',
    width: 800,
    height: 533,
    vid: '88083abbf5bcf1356e05d39666be527a_8',
    ban_skin_progress: true, // 是否隐藏播放器控制栏的进度条
    ban_seek:'on',//是否禁止拖拽进度条
    ban_seek_by_limit_time:'on', //是否禁止拖拽进度至视频未播放到的位置,为on时只可在已播放过的进度范围内拖拽(向前拖拽)
});
</script>

Android系统下各厂商浏览器表现不一致,ban_seek参数可能不生效。

自定义视频封面图

上传至云点播平台的视频会在编码时进行截图,默认会采用第一张截图作为视频封面图。用户可以在点播管理后台重新选择或上传封面图,也可以通过播放器参数进行自定义设置。 

<div id="player"></div>
<script src="//player.polyv.net/script/player.js"></script>
<script>
var player = polyvPlayer({
    wrap: '#player',
    width: 800,
    height: 533,
    vid: '88083abbf5bcf1356e05d39666be527a_8',
    loading_bg_img: 'https://img.videocc.net/uimage/8/88083abbf5/first_image/2bb92156-e3ac-4781-bdba-483c3213ccd2_b.png', // 封面图URL
    cover_display:'scaleAspectFit', //封面图显示方式
    cover_opacity:70 //封面图蒙层不透明度,取值范围:[0,100]。
});
</script>

整理结束~~~~~~

 

 MR虚拟直播

无延迟直播

视频加密与安全

在线导播台

javascript 播放器 控制 发表:不详 阅读: 37 次 关键字:不详 字体:[大 中 小] 详细参数可查询MSDN http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wmplay/mmp_sdk/settingsobject.asp <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <link href="style/style.css" rel="stylesheet" type="text/css"> <script language="JavaScript"> var state; //初始化 function playerinit() { player.url="mp3.m3u"; player.settings.autoStart = false ; } //播放 function play() { if (player.controls.isavailable('play')) { player.controls.play(); state=setInterval("updatetime()",1000); playerinfo.innerHTML = "播放"; } } //暂停 function pause() { if (player.controls.isavailable('pause')) { player.controls.pause(); clearInterval(state); playerinfo.innerHTML = "暂停"; } } //停止 function stop() { if (player.controls.isavailable('stop')) { player.controls.stop(); clearInterval(state); playerinfo.innerHTML = "停止"; } } //前首 function previous() { if (player.controls.isavailable( 'previous' )) { player.controls.previous(); playerinfo.innerHTML = "前一首"; } } //后首 function next() { if (player.controls.isavailable( 'next' )) { player.controls.next(); playerinfo.innerHTML = "下一首"; } } //? function step() { if (player.controls.isavailable( 'step' )) player.controls.step( 1 ); } //音量- function voldown() { if ( player.settings.volume < 5 ) { player.settings.volume = 0; playerinfo.innerHTML = "0"; } else { player.settings.volume -= 5; playerinfo.innerHTML = player.settings.volume; } } //音量+ function volup() { if ( player.settings.volume > 95 ) { player.settings.volume = 100; playerinfo.innerHTML = "100"; } else { player.settings.volume += 5; playerinfo.innerHTML = player.settings.volume; } } //静音 function mute() { player.settings.mute = !player.settings.mute; } //声道 function balance() { switch (player.settings.balance) { case 0: player.settings.balance = 100; playerinfo.innerHTML = '左声道'; break; case 100: player.settings.balance = -100; playerinfo.innerHTML = '右声道'; break; case -100: player.settings.balance = 0; playerinfo.innerHTML = '全声道'; break; default : player.settings.balance = 0; playerinfo.innerHTML = '全声道'; break; } } //更新时间 function updatetime() { playerinfo.innerHTML = player.controls.currentPositionString + " | " + player.currentMedia.durationString; } </script> </head> <body onload="playerinit();"> <table width="300"> <tr> <td><object id="player" classid="CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6" type="application/x-oleobject" width="300" height="60"> <param name="autoStart" value="false"> <param name="balance" value="0"> <param name="currentPosition" value="0"> <param name="currentMarker" value="0"> <param name="enableContextMenu" value="true"> <param name="enableErrorDialogs" value="false"> <param name="enabled" value="true"> <param name="fullScreen" value="false"> <param name="invokeURLs" value="false"> <param name="mute" value="true"> <param name="playCount" value="1"> <param name="rate" value="1"> <param name="uiMode" value="none"> <param name="volume" value="100"> </object></td> </tr> <tr> <td><span id="playerinfo"></span></td> </tr> <tr> <td> <div align="center"> <input type="button" onmouseover=this.className="but12"; onmouseout=this.className="but11"; name="previous" title="上一首" onclick="previous();"> <input type="button" onmouseover=this.className="but22"; onmouseout=this.className="but21"; name="play" title="播放" onclick="play();"> <input type="button" onmouseover=this.className="but32"; onmouseout=this.className="but31"; name="pause" title="暂停" onclick="pause();"> <input type="button" onmouseover=this.className="but42"; onmouseout=this.className="but41"; name="stop" title="停止" onclick="stop();"> <input type="button" onmouseover=this.className="but52"; onmouseout=this.className="but51"; name="next" title="下一首" onclick="next();"> <input type="button" onmouseover=this.className="but62"; onmouseout=this.className="but61"; name="voldown" title="音量-" onclick="voldown();"> <input type="button" onmouseover=this.className="but62"; onmouseout=this.className="but61"; name="volup" title="音量+" onclick="volup();"> <input type="button" onmouseover=this.className="but62"; onmouseout=this.className="but61"; name="mute" title="静音" onclick="mute();"> <input type="button" onmouseover=this.className="but62"; onmouseout=this.className="but61"; name="balance" title="声道" onclick="balance();"> </div> </td> </tr> </table> <script language = "JavaScript" for = player event = playstatechange(newstate)> switch (newstate){ case 1: playerinfo.innerHTML = "停止"; break; case 2: playerinfo.innerHTML = "暂停"; break; case 3: playerinfo.innerHTML = "正在播放"; break; case 4: playerinfo.innerHTML = "4"; break; case 5: playerinfo.innerHTML = "5"; break; case 6: playerinfo.innerHTML = "正在缓冲..."; break; case 7: playerinfo.innerHTML = "7"; break; case 8: playerinfo.innerHTML = "8"; break; case 9: playerinfo.innerHTML = "正在连接..."; break; case 10: playerinfo.innerHTML = "准备就绪。欢迎光临<a href='http://mp3.asp2004.net'>http://mp3.asp2004.net</a>"; break; case 11: playerinfo.innerHTML = "11"; break; default: playerinfo.innerHTML = ""; } </script> </body> </html>
### 实现短视频播放功能 要在 Vue.js 中实现短视频播放功能,可以利用 HTML5 `<video>` 标签以及 Video.js 这样的第三方库来增强用户体验。以下是具体方法: #### 使用原生 `<video>` 标签 如果需求简单,可以直接使用 HTML5 提供的 `<video>` 标签配合 Vue.js 数据绑定完成基本的视频播放功能。 ```html <template> <div> <!-- 文件上传 --> <input type="file" @change="handleFileChange" accept="video/*"> <!-- 视频播放器 --> <video ref="videoPlayer" controls width="600" height="400"></video> </div> </template> <script> export default { methods: { handleFileChange(event) { const file = event.target.files[0]; if (file) { this.$refs.videoPlayer.src = URL.createObjectURL(file); } }, }, }; </script> ``` 上述代码实现了文件选择后的即时预览功能[^3]。 #### 集成 Video.js 对于更复杂的需求(如自定义控件、多分辨率支持),推荐使用 Video.js。以下是一个简单的集成示例: 1. **安装依赖** ```bash npm install video.js --save ``` 2. **引入样式和脚本** 在 `main.js` 或组件中加载 Video.js 资源: ```javascript import 'video.js/dist/video-js.css'; import videojs from 'video.js'; ``` 3. **创建组件** 下面展示了一个基于 Video.js 的 Vue 组件实例: ```html <template> <div> <video ref="videoPlayer" class="video-js vjs-default-skin" controls preload="auto" width="640" height="360"></video> </div> </template> <script> export default { data() { return { player: null, }; }, mounted() { this.player = videojs(this.$refs.videoPlayer, {}, () => { console.log('player is ready'); }); this.player.src({ src: 'https://example.com/path-to-your-video.mp4', type: 'video/mp4', }); }, beforeDestroy() { if (this.player) { this.player.dispose(); } }, }; </script> ``` 此代码展示了如何初始化 Video.js 并加载远程 MP4 文件[^1]。 #### 自定义按钮 为了进一步提升交互体验,可以通过扩展 Video.js 来添加自定义按钮至控制栏。例如,增加一个倍速切换按钮: ```javascript class PlaybackRateButton extends videojs.getComponent('Button') { constructor(player, options) { super(player, options); this.on('click', () => { let currentRate = player.playbackRate(); player.playbackRate(currentRate === 1 ? 2 : 1); // 切换速度 }); } buildCSSClass() { return 'vjs-icon-playback-rate'; // 添加图标类名 } } // 注册新按钮 videojs.registerComponent('PlaybackRateButton', PlaybackRateButton); // 将按钮加入控制栏 const controlBar = this.player.controlBar; controlBar.addChild('PlaybackRateButton'); ``` 这段代码演示了如何向 Video.js 控制栏添加一个新的倍速切换按钮。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值