1
0
mirror of https://gitee.com/koogua/course-tencent-cloud.git synced 2025-07-01 14:44:56 +08:00
2020-04-08 16:42:36 +08:00

339 lines
15 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div id="video" style="width: 600px; height: 400px;">
</div>
{{ js_include('library/chplayer/chplayer.min.js') }}
<script>
var videoObject = {
container: '#video', //容器的ID
variable: 'player',
autoplay: true, //是否自动播放
loaded: 'loadedHandler', //当播放器加载后执行的函数
video: 'http://vod-cdn.koogua.com/20171012_fixed.m3u8'
//video: 'http://www.flashls.org/playlists/test_001/stream_1000k_48k_640x360.m3u8'
};
var player = new chplayer(videoObject);
function loadedHandler() {
changeText('.playerstate', '状态:播放器已加载,建立监听:监听元数据,监听其它状态');
player.addListener('error', errorHandler); //监听视频加载出错
player.addListener('loadedmetadata', loadedMetaDataHandler); //监听元数据
player.addListener('play', playHandler); //监听暂停播放
player.addListener('pause', pauseHandler); //监听暂停播放
player.addListener('timeupdate', timeUpdateHandler); //监听播放时间
player.addListener('seeking', seekingHandler); //监听跳转播放
player.addListener('seeked', seekedHandler); //监听跳转播放完成
player.addListener('volumechange', volumeChangeHandler); //监听音量改变
player.addListener('full', fullHandler); //监听全屏/非全屏切换
player.addListener('ended', endedHandler); //监听全屏/非全屏切换
player.addListener('videochange', videoChangeHandler); //监听视频地址改变
}
function errorHandler() {
changeText('.playerstate', '状态:视频加载错误,停止执行其它动作,等待其它操作');
}
function loadedMetaDataHandler() {
var metaData = player.getMetaDate();
var html = '';
if(parseInt(metaData['videoWidth']) > 0) {
changeText('.playerstate', '状态:获取到元数据信息,如果数据错误,可以使用延迟获取');
html += '总时间:' + metaData['duration'] + '秒,';
html += '音量:' + metaData['volume'] + '范围0-1';
html += '播放器的宽度:' + metaData['width'] + 'px';
html += '播放器的高度:' + metaData['height'] + 'px';
html += '视频的实际宽度:' + metaData['videoWidth'] + 'px';
html += '视频的实际高度:' + metaData['videoHeight'] + 'px';
html += '是否暂停状态:' + metaData['paused'];
} else {
changeText('.playerstate', '状态:未正确获取到元数据信息');
html = '您正在使用移动端或iPad观看本页面该平台限制了视频加载只有在点击了播放器后才能加载视频及获取元数据信息';
}
changeText('.metadata', html);
}
function playHandler() {
//player.animateResume();//继续播放所有弹幕
changeText('.playstate', '播放状态:播放');
window.setTimeout(function() {
loadedMetaDataHandler();
}, 1000);
loadedMetaDataHandler();
}
function pauseHandler() {
//player.animatePause();//暂停所有弹幕
changeText('.playstate', '播放状态:暂停');
loadedMetaDataHandler();
}
function timeUpdateHandler() {
changeText('.currenttimestate', '当前播放时间(秒):' + player.time);
}
function seekingHandler() {
changeText('.seekstate', '跳转动作:正在进行跳转');
}
function seekedHandler() {
changeText('.seekstate', '跳转动作:跳转完成');
}
function volumeChangeHandler() {
changeText('.volumechangestate', '当前音量:' + player.volume);
}
function fullHandler() {
var html = player.getByElement('.fullstate').innerHTML;
if(player.full) {
html += ',全屏';
} else {
html += ',否';
}
changeText('.fullstate', html);
}
function endedHandler() {
changeText('.endedstate', '播放结束');
}
var videoChangeNum = 0;
function videoChangeHandler() {
videoChangeNum++;
changeText('.videochangestate', '视频地址改变了' + videoChangeNum + '次');
}
function seekTime() {
var time = parseInt(player.getByElement('.seektime').value);
var metaData = player.getMetaDate();
var duration = metaData['duration'];
if(time < 0) {
alert('请填写大于0的数字');
return;
}
if(time > duration) {
alert('请填写小于' + duration + '的数字');
return;
}
player.seek(time);
}
function changeVolume() {
var volume = player.getByElement('.changevolume').value;
volume = Math.floor(volume * 100) / 100;
if(volume < 0) {
alert('请填写大于0的数字');
return;
}
if(volume > 1) {
alert('请填写小于1的数字');
return;
}
player.changeVolume(volume);
}
function changeSize() {
player.changeSize(w, h)
}
function frontFun() {
alert('点击了前一集');
}
function nextFun() {
alert('点击了下一集');
}
function newVideo() {
var videoUrl = player.getByElement('.videourl').value;
changeVideo(videoUrl);
}
function newVideo2() {
var videoUrl = player.getByElement('.videourl2').value;
changeVideo(videoUrl);
}
function changeVideo(videoUrl) {
if(player == null) {
return;
}
var newVideoObject = {
container: '#video', //容器的ID
variable: 'player',
autoplay: true, //是否自动播放
loaded: 'loadedHandler', //当播放器加载后执行的函数
video: videoUrl
};
//判断是需要重新加载播放器还是直接换新地址
if(player.playerType == 'html5video') {
if(player.getFileExt(videoUrl) == '.flv' || player.getFileExt(videoUrl) == '.m3u8' || player.getFileExt(videoUrl) == '.f4v' || videoUrl.substr(0, 4) == 'rtmp') {
player.removeChild();
player = null;
player = new chplayer();
player.embed(newVideoObject);
} else {
player.newVideo(newVideoObject);
}
} else {
if(player.getFileExt(videoUrl) == '.mp4' || player.getFileExt(videoUrl) == '.webm' || player.getFileExt(videoUrl) == '.ogg') {
player = null;
player = new chplayer();
player.embed(newVideoObject);
} else {
player.newVideo(newVideoObject);
}
}
}
function newElement() {
var attribute = {
list: [{
type: 'image',
url: 'screenshot/logo.png',
radius: 30, //圆角弧度
width: 30, //定义宽,必需要定义
height: 30, //定义高,必需要定义
alpha: 0.9, //透明度
marginLeft: 10,
marginRight: 10,
marginTop: 10,
marginBottom: 10
},
{
type: 'text', //说明是文本
text: '这里是一个普通的元件不支持HTML', //文本内容
fontColor: '#FFFFFF',
fontSize: 14,
fontFamily: '"Microsoft YaHei", YaHei, "微软雅黑", SimHei,"\5FAE\8F6F\96C5\9ED1", "黑体",Arial',
lineHeight: 30,
alpha: 1, //透明度
//paddingLeft:10,//左边距离
paddingRight: 10, //右边距离
paddingTop: 0,
paddingBottom: 0,
marginLeft: 0,
marginRight: 0,
marginTop: 10,
marginBottom: 0,
//backgroundColor:'#000000',
backAlpha: 0.5,
backRadius: 30 //背景圆角弧度
}
],
x: 10, //x轴坐标
y: 10, //y轴坐标
//position:[1,1],//位置[x轴对齐方式0=左1=中2=右y轴对齐方式0=上1=中2=下x轴偏移量不填写或null则自动判断第一个值为0=紧贴左边1=中间对齐2=贴合右边y轴偏移量不填写或null则自动判断0=紧贴上方1=中间对齐2=紧贴下方)]
alpha: 1,
backgroundColor: '#000000',
backAlpha: 0.5,
backRadius: 60 //背景圆角弧度
};
var el = player.addElement(attribute);
}
function newDanmu() {
//弹幕说明
var danmuObj = {
list: [{
type: 'image',
url: 'screenshot/logo.png',
radius: 30, //圆角弧度
width: 30, //定义宽,必需要定义
height: 30, //定义高,必需要定义
alpha: 0.9, //透明度
marginLeft: 10,
marginRight: 10,
marginTop: 0,
marginBottom: 0
},
{
type: 'text', //说明是文本
text: '演示弹幕内容弹幕只支持普通文本不支持HTML', //文本内容
fontColor: '#FFFFFF',
fontSize: 14,
fontFamily: '"Microsoft YaHei", YaHei, "微软雅黑", SimHei,"\5FAE\8F6F\96C5\9ED1", "黑体",Arial',
lineHeight: 30,
alpha: 1, //透明度
paddingLeft: 10, //左边距离
paddingRight: 10, //右边距离
paddingTop: 0,
paddingBottom: 0,
marginLeft: 0,
marginRight: 0,
marginTop: 0,
marginBottom: 0,
backgroundColor: '#000000',
backAlpha: 0.5,
backRadius: 30 //背景圆角弧度
}
],
x: '100%', //x轴坐标
y: "50%", //y轴坐标
//position:[2,1,0],//位置[x轴对齐方式0=左1=中2=右y轴对齐方式0=上1=中2=下x轴偏移量不填写或null则自动判断第一个值为0=紧贴左边1=中间对齐2=贴合右边y轴偏移量不填写或null则自动判断0=紧贴上方1=中间对齐2=紧贴下方)]
alpha: 1,
//backgroundColor:'#FFFFFF',
backAlpha: 0.8,
backRadius: 30 //背景圆角弧度
};
var danmu = player.addElement(danmuObj);
var danmuS = player.getElement(danmu);
var obj = {
element: danmu,
parameter: 'x',
static: true, //是否禁止其它属性true=是即当x(y)(alpha)变化时y(x)(x,y)在播放器尺寸变化时不允许变化
effect: 'None.easeOut',
start: null,
end: -danmuS['width'],
speed: 10,
overStop: true,
pauseStop: true,
callBack: 'deleteChild'
};
var danmuAnimate = player.animate(obj);
}
function deleteChild(ele) {
if(player) {
player.deleteElement(ele);
}
}
function changeText(div, text) {
player.getByElement(div).innerHTML = text;
}
</script>
<p>
<a href="http://www.chplayer.com/" target="_blank">官网chplayer.com</a>,版本号1.0</p>
<p>以下仅列出部分功能,全部功能请至官网<a href="http://www.chplayer.com/manual/" target="_blank">《手册》</a>查看</p>
<p>
<button type="button" onclick="player.play()">播放</button>
<button type="button" onclick="player.pause()">暂停</button>
<button type="button" onclick="player.playOrPause()">播放/暂停</button>
<button type="button" onclick="loadedMetaDataHandler()">获取元数据</button>
<button type="button" onclick="newElement()">添加元件</button>
<button type="button" onclick="newDanmu()">添加弹幕</button>
<a href="http://www.chplayer.com/manual/animate.html" target="_blank">更多弹幕动作</a>
</p>
<p class="metadata"></p>
<p>单独监听功能:</p>
<p class="handler">
<span class="playstate">播放状态:暂停</span><br />
<span class="seekstate">无跳转时间</span><br />
<span class="volumechangestate">当前音量0.8</span><br />
<span class="fullstate">是否全屏:否</span><br />
<span class="endedstate">还未结束</span><br />
<span class="videochangestate">视频地址正常</span><br />
<span class="currenttimestate">当前播放时间0</span>
</p>