提交
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -1,667 +0,0 @@
|
||||
<template>
|
||||
<view class="content">
|
||||
<KJ-Player class="player" ref="player" :style="{width:'100%',height:palyerHeight}"
|
||||
@onTimeChanged="onTimeChanged" @onKVO="onKVO" @onNotification="onNotification" @onPip="onPip"
|
||||
@onSystem="onSystem">
|
||||
<cover-view v-if="isShowVideoview" class="video-view" :style="{width:'100%',height:palyerHeight}"
|
||||
@click="tap" @touchstart="touchStartHandle" @touchend="touchEndHandle" @touchcancel="touchCancelHandle"
|
||||
@touchmove="touchMoveHandle">
|
||||
<text class="tip" v-if="isShowTip"
|
||||
:style="{position:'absolute',left:0,right:0,top:tipTop}">{{tip}}</text>
|
||||
<view class=" top-title" :style="{width:'100%'}" v-if="isShowTitle">
|
||||
<view>
|
||||
<button type="primary" @click="pip2">画中画(全局)</button>
|
||||
</view>
|
||||
<text :style="{color:'#fff'}">标题</text>
|
||||
<view>
|
||||
<button type="primary" @click="pip">画中画</button>
|
||||
</view>
|
||||
</view>
|
||||
<view class="bottom-title" :style="{width:'100%'}" v-if="isShowTitle">
|
||||
<button type="primary" @click="playOrPause">{{playOrPauseText}}</button>
|
||||
<text class="text">{{leftTime}}</text>
|
||||
<view class="fullControls-center">
|
||||
<chunLei-slider :max="duration" :value="current" :style="{width:`${fullControlsWidth-40}px`}"
|
||||
:screenLeft="40" :width="fullControlsWidth-40" @change="changeCurrent" :ratio="1">
|
||||
</chunLei-slider>
|
||||
</view>
|
||||
<text class="text">{{rightTime}}</text>
|
||||
<button type="primary" @click="full">全屏</button>
|
||||
</view>
|
||||
</cover-view>
|
||||
</KJ-Player>
|
||||
<view class="btns">
|
||||
<button type="primary" @click="init">初始化(系统自带界面)</button>
|
||||
<button type="primary" @click="init2">初始化(自定义界面)</button>
|
||||
<button type="primary" @click="stop">销毁</button>
|
||||
<button type="primary" @click="replaceCurrentItemWithPlayerItem">切换播放源</button>
|
||||
<button type="primary" @click="getCurrentTime">获取当前时间</button>
|
||||
<button type="primary" @click="getDuration">获取时长</button>
|
||||
<button type="primary" @click="play">播放</button>
|
||||
<button type="primary" @click="pause">暂停</button>
|
||||
<button type="primary" @click="getStatus">获取状态</button>
|
||||
<button type="primary" @click="getTimeControlStatus">获取时间控制状态</button>
|
||||
<button type="primary" @click="setMuted">设置是否静音</button>
|
||||
<button type="primary" @click="getMuted">获取是否静音</button>
|
||||
<button type="primary" @click="setVolume">设置音量</button>
|
||||
<button type="primary" @click="getVolume">获取音量</button>
|
||||
<button type="primary" @click="setRate">设置速率</button>
|
||||
<button type="primary" @click="getRate">获取速率</button>
|
||||
<button type="primary" @click="seekToTime">设置进度</button>
|
||||
<button type="primary" @click="setVideoGravity">设置视频拉伸模式</button>
|
||||
<button type="primary" @click="isPictureInPictureSuspended">设备是否支持画中画</button>
|
||||
<button type="primary" @click="pip">自动切换画中画</button>
|
||||
<button type="primary" @click="isPictureInPictureActive">是否已开启画中画</button>
|
||||
<button type="primary" @click="startPictureInPicture">开启画中画</button>
|
||||
<button type="primary" @click="stopPictureInPicture">停止画中画</button>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
|
||||
|
||||
export default {
|
||||
|
||||
data() {
|
||||
return {
|
||||
url: "http://baobab.kaiyanapp.com/api/v1/playUrl?vid=164016&resourceType=video&editionType=high&source=aliyun&playUrlType=url_oss",
|
||||
isShowVideoview: false,
|
||||
duration: 60 * 60 * 1000, //精确总时长
|
||||
fullControlsWidth: '200', //全屏宽
|
||||
current: 0, //video进度
|
||||
leftTime: "00:00:00",
|
||||
rightTime: "00:00:00",
|
||||
statusBarHeight: "20px",
|
||||
getStatusBarHeight: "20px",
|
||||
headerHeight: "44px",
|
||||
palyerHeight: "500rpx",
|
||||
tipTop: "250rpx",
|
||||
tip: "加载中...",
|
||||
isShowTip: true,
|
||||
isShowTitle: true,
|
||||
hideTitleTime: 6000,
|
||||
isFull: false,
|
||||
playOrPauseText: "播放",
|
||||
touchHandleType: false, //滑动记录 progress // light // voice
|
||||
handleDynamicX: 0, // 动态记录滑动的记录X轴
|
||||
handleDynamicY: 0, // 动态记录Y轴滑动距离
|
||||
videoNowLight: 0, // 当前屏幕的亮度
|
||||
videoNowVoice: 0, // 当前的音量
|
||||
onceClickTimer: null,
|
||||
changing: false,
|
||||
isPip: true,
|
||||
pip_currentTime: null,
|
||||
|
||||
}
|
||||
},
|
||||
onLoad(options) {
|
||||
uni.$emit('to-pip-path', {
|
||||
path: null,
|
||||
});
|
||||
this.pip_currentTime = options.pip_currentTime;
|
||||
uni.$on('pip-to', (res) => {
|
||||
console.log(JSON.stringify(res));
|
||||
var dic = {
|
||||
"second": res.currentTime + ""
|
||||
}
|
||||
this.$refs.player.seekToTime(dic, (res) => {
|
||||
console.log("seekToTime:" + JSON.stringify(res))
|
||||
this.play();
|
||||
})
|
||||
})
|
||||
},
|
||||
onReady() {
|
||||
this.init2();
|
||||
setTimeout((res) => {
|
||||
this.$refs.player.sendSubviewToBack()
|
||||
if (this.pip_currentTime != undefined) {
|
||||
var dic = {
|
||||
"second": this.pip_currentTime + ""
|
||||
}
|
||||
this.$refs.player.seekToTime(dic, (res) => {
|
||||
console.log("seekToTime:" + JSON.stringify(res))
|
||||
this.play();
|
||||
})
|
||||
}
|
||||
}, 100)
|
||||
},
|
||||
onUnload() {
|
||||
if (this.isPip) {
|
||||
uni.$emit('to-pip-path', {
|
||||
path: "/pages/index/index",
|
||||
});
|
||||
}
|
||||
},
|
||||
onBackPress() {
|
||||
|
||||
},
|
||||
|
||||
methods: {
|
||||
pip2() {
|
||||
this.isPip = true;
|
||||
this.pause();
|
||||
this.$refs.player.getCurrentTime((res) => {
|
||||
console.log("getCurrentTime:" + JSON.stringify(res))
|
||||
uni.$emit('to-pip', {
|
||||
currentTime: res.result + "",
|
||||
url: this.url,
|
||||
path: null
|
||||
});
|
||||
})
|
||||
},
|
||||
onTimeChanged(res) {
|
||||
this.duration = parseInt(res.detail.total);
|
||||
this.current = parseInt(res.detail.current);
|
||||
this.leftTime = this.formatDuring(this.current)
|
||||
this.rightTime = this.formatDuring(this.duration)
|
||||
},
|
||||
onKVO(res) {
|
||||
console.log("onKVO:" + JSON.stringify(res.detail))
|
||||
var attribute = res.detail.attribute
|
||||
var value = res.detail.value
|
||||
if (attribute == "timeControlStatus") {
|
||||
if (value == 0) { //暂停
|
||||
this.playOrPauseText = "播放";
|
||||
} else if (value == 1) { //由于媒体缓冲数据不足而导致播放停止
|
||||
this.playOrPauseText = "暂停";
|
||||
} else if (value == 2) { //播放
|
||||
this.tip = "加载中...";
|
||||
this.isShowTip = false;
|
||||
this.playOrPauseText = "暂停";
|
||||
}
|
||||
} else if (attribute == "playerItemStatus") {
|
||||
if (value == 0) { //未知
|
||||
this.playOrPauseText = "播放";
|
||||
} else if (value == 1) { //已准备好播放
|
||||
this.playOrPauseText = "暂停";
|
||||
} else if (value == 2) { //失败
|
||||
this.tip = "播放失败";
|
||||
this.isShowTip = true;
|
||||
this.playOrPauseText = "播放";
|
||||
}
|
||||
} else if (attribute == "status") {
|
||||
if (value == 0) { //未知
|
||||
} else if (value == 1) { //已准备好播放
|
||||
} else if (value == 2) { //失败
|
||||
this.tip = "播放失败";
|
||||
this.isShowTip = true;
|
||||
this.playOrPauseText = "播放";
|
||||
}
|
||||
}
|
||||
},
|
||||
onNotification(res) {
|
||||
console.log("onNotification:" + JSON.stringify(res.detail))
|
||||
if (res.detail.method == "AVPlayerItemTimeJumpedNotification") {
|
||||
console.log("发生变化");
|
||||
} else if (res.detail.method == "AVPlayerItemDidPlayToEndTimeNotification") {
|
||||
console.log("播放完成");
|
||||
} else if (res.detail.method == "AVPlayerItemFailedToPlayToEndTimeNotification") {
|
||||
console.log("未能播放到其结束时间就中断");
|
||||
} else if (res.detail.method == "AVPlayerItemPlaybackStalledNotification") {
|
||||
console.log("播放暂停");
|
||||
}
|
||||
},
|
||||
onPip(res) {
|
||||
console.log("onPip:" + JSON.stringify(res.detail))
|
||||
if (res.detail.method == "WillStartPictureInPicture") {
|
||||
console.log("即将开启画中画");
|
||||
} else if (res.detail.method == "DidStartPictureInPicture") {
|
||||
console.log("已开启画中画");
|
||||
} else if (res.detail.method == "failedToStartPictureInPicture") {
|
||||
console.log("开启画中画失败");
|
||||
} else if (res.detail.method == "WillStopPictureInPicture") {
|
||||
console.log("即将停止画中画");
|
||||
} else if (res.detail.method == "DidStopPictureInPicture") {
|
||||
console.log("已停止画中画");
|
||||
} else if (res.detail.method == "restoreUserInterfaceForPictureInPictureStop") {
|
||||
console.log("画中画恢复");
|
||||
}
|
||||
},
|
||||
onSystem(res) { //系统界面,才支持
|
||||
console.log("onSystem:" + JSON.stringify(res.detail))
|
||||
if (res.detail.method == "willBeginFullScreen") {
|
||||
console.log("即将开始全屏");
|
||||
} else if (res.detail.method == "willEndFullScreen") {
|
||||
console.log("即将退出全屏");
|
||||
}
|
||||
},
|
||||
comminit(playerType) {
|
||||
var dic = {
|
||||
"playerType": playerType, //custom system
|
||||
"urlType": "network", //local(本地路径-传绝对路径plus.io.convertLocalFileSystemURL) network(网络地址)
|
||||
"url": this.url,
|
||||
"autoPlay": true,
|
||||
"allowsPictureInPicturePlayback": true, //是否开启画中画
|
||||
"canStartPictureInPictureAutomaticallyFromInline": true, //ios14.2 是否 进入后台,自动启动画中画
|
||||
"videoGravity": "ResizeAspect", //设置视频拉伸模式
|
||||
"systemPlayer": { //playerType为system有效
|
||||
// "showsPlaybackControls": true, //是否显示媒体播放组件
|
||||
// "showsTimecodes": true, //ios13
|
||||
// "allowsVideoFrameAnalysis": true,
|
||||
// "updatesNowPlayingInfoCenter": true,
|
||||
// "entersFullScreenWhenPlaybackBegins": true,
|
||||
// "exitsFullScreenWhenPlaybackEnds": true,
|
||||
// "requiresLinearPlayback": true,
|
||||
},
|
||||
};
|
||||
this.$refs.player.init(dic, (res) => {
|
||||
console.log("init:" + JSON.stringify(res))
|
||||
})
|
||||
},
|
||||
init() {
|
||||
this.isShowVideoview = false;
|
||||
this.$nextTick((res) => {
|
||||
this.comminit("system")
|
||||
})
|
||||
},
|
||||
init2() {
|
||||
this.isShowVideoview = true;
|
||||
this.$nextTick((res) => {
|
||||
this.comminit("custom")
|
||||
this.duration = 60 * 60 * 1000;
|
||||
this.current = 0;
|
||||
this.leftTime = this.formatDuring(this.current)
|
||||
this.rightTime = this.formatDuring(this.duration)
|
||||
})
|
||||
},
|
||||
stop() {
|
||||
this.$refs.player.stop()
|
||||
},
|
||||
replaceCurrentItemWithPlayerItem() {
|
||||
var dic = {
|
||||
"urlType": "network", //local(本地路径-传绝对路径plus.io.convertLocalFileSystemURL) network(网络地址)
|
||||
"url": this.url
|
||||
}
|
||||
this.$refs.player.replaceCurrentItemWithPlayerItem(dic, (res) => {
|
||||
console.log("replaceCurrentItemWithPlayerItem:" + JSON.stringify(res))
|
||||
})
|
||||
},
|
||||
getCurrentTime() {
|
||||
this.$refs.player.getCurrentTime((res) => {
|
||||
console.log("getCurrentTime:" + JSON.stringify(res))
|
||||
})
|
||||
},
|
||||
getDuration() {
|
||||
this.$refs.player.getDuration((res) => {
|
||||
console.log("getDuration:" + JSON.stringify(res))
|
||||
})
|
||||
},
|
||||
play() {
|
||||
this.$refs.player.play((res) => {
|
||||
console.log("play:" + JSON.stringify(res))
|
||||
})
|
||||
},
|
||||
pause() {
|
||||
this.$refs.player.pause((res) => {
|
||||
console.log("pause:" + JSON.stringify(res))
|
||||
})
|
||||
},
|
||||
getStatus() {
|
||||
this.$refs.player.getStatus((res) => {
|
||||
console.log("getStatus:" + JSON.stringify(res))
|
||||
})
|
||||
},
|
||||
getTimeControlStatus() {
|
||||
this.$refs.player.getTimeControlStatus((res) => {
|
||||
console.log("getTimeControlStatus:" + JSON.stringify(res))
|
||||
})
|
||||
},
|
||||
setMuted() {
|
||||
var dic = {
|
||||
"is": true
|
||||
}
|
||||
this.$refs.player.setMuted(dic, (res) => {
|
||||
console.log("setMuted:" + JSON.stringify(res))
|
||||
})
|
||||
},
|
||||
getMuted() {
|
||||
this.$refs.player.getMuted((res) => {
|
||||
console.log("getMuted:" + JSON.stringify(res))
|
||||
})
|
||||
},
|
||||
setVolume() {
|
||||
var dic = {
|
||||
"volume": "1.0"
|
||||
}
|
||||
this.$refs.player.setVolume(dic, (res) => {
|
||||
console.log("setVolume:" + JSON.stringify(res))
|
||||
})
|
||||
},
|
||||
getVolume() {
|
||||
this.$refs.player.getVolume((res) => {
|
||||
console.log("getVolume:" + JSON.stringify(res))
|
||||
})
|
||||
},
|
||||
setRate() {
|
||||
var dic = {
|
||||
"rate": "2.0"
|
||||
}
|
||||
this.$refs.player.setRate(dic, (res) => {
|
||||
console.log("setRate:" + JSON.stringify(res))
|
||||
})
|
||||
},
|
||||
getRate() {
|
||||
this.$refs.player.getRate((res) => {
|
||||
console.log("getRate:" + JSON.stringify(res))
|
||||
})
|
||||
},
|
||||
seekToTime() {
|
||||
var dic = {
|
||||
"second": "3000.0"
|
||||
}
|
||||
this.$refs.player.seekToTime(dic, (res) => {
|
||||
console.log("seekToTime:" + JSON.stringify(res))
|
||||
})
|
||||
},
|
||||
isPictureInPictureSuspended() {
|
||||
this.$refs.player.isPictureInPictureSuspended((res) => {
|
||||
console.log("isPictureInPictureSuspended:" + JSON.stringify(res))
|
||||
})
|
||||
},
|
||||
pip() {
|
||||
this.$refs.player.pip()
|
||||
},
|
||||
|
||||
isPictureInPictureActive() {
|
||||
this.$refs.player.isPictureInPictureActive((res) => {
|
||||
console.log("isPictureInPictureActive:" + JSON.stringify(res))
|
||||
})
|
||||
},
|
||||
startPictureInPicture() {
|
||||
this.$refs.player.startPictureInPicture()
|
||||
},
|
||||
stopPictureInPicture() {
|
||||
this.$refs.player.stopPictureInPicture()
|
||||
},
|
||||
setVideoGravity() {
|
||||
var dic = {
|
||||
"videoGravity": "ResizeAspectFill"
|
||||
}
|
||||
this.$refs.player.setVideoGravity(dic, (res) => {
|
||||
console.log("setVideoGravity:" + JSON.stringify(res))
|
||||
})
|
||||
},
|
||||
requestFullScreen() {
|
||||
this.$refs.player.requestFullScreen((res) => {
|
||||
console.log("requestFullScreen:" + JSON.stringify(res))
|
||||
})
|
||||
},
|
||||
exitFullScreen() {
|
||||
this.$refs.player.exitFullScreen((res) => {
|
||||
console.log("exitFullScreen:" + JSON.stringify(res))
|
||||
})
|
||||
},
|
||||
playOrPause() {
|
||||
this.$refs.player.getTimeControlStatus((res) => {
|
||||
console.log(JSON.stringify(res))
|
||||
if (res.result == 0) { //暂停
|
||||
this.play();
|
||||
} else if (res.result == 1) { //由于媒体缓冲数据不足而导致播放停止
|
||||
this.pause();
|
||||
} else if (res.result == 2) { //播放
|
||||
this.pause();
|
||||
}
|
||||
})
|
||||
},
|
||||
full() {
|
||||
if (!this.isFull) {
|
||||
plus.screen.lockOrientation("landscape-primary");
|
||||
//this.$refs.vlc.requestFullScreen()
|
||||
} else {
|
||||
plus.screen.lockOrientation("portrait-primary");
|
||||
//this.$refs.vlc.exitFullScreen()
|
||||
}
|
||||
this.isFull = !this.isFull;
|
||||
},
|
||||
formatDuring(s) {
|
||||
//console.log(mss)
|
||||
var hours = parseInt(s / 60 / 60);
|
||||
if (hours < 10) {
|
||||
hours = "0" + hours
|
||||
}
|
||||
var minutes = parseInt(s / 60 % 60);
|
||||
if (minutes < 10) {
|
||||
minutes = "0" + minutes
|
||||
}
|
||||
var seconds = parseInt(s % 60);
|
||||
if (seconds < 10) {
|
||||
seconds = "0" + seconds
|
||||
}
|
||||
return hours + ":" + minutes + ":" + seconds;
|
||||
},
|
||||
//拖动滑块
|
||||
changeCurrent(e) {
|
||||
this.current = e.detail.value
|
||||
console.log(JSON.stringify(e));
|
||||
this.changing = true;
|
||||
var dic = {
|
||||
"second": "" + parseInt(this.current)
|
||||
}
|
||||
this.$refs.player.seekToTime(dic, (res) => {
|
||||
console.log("seekToTime:" + JSON.stringify(res))
|
||||
})
|
||||
},
|
||||
changing(e) {
|
||||
this.changing = false;
|
||||
},
|
||||
full() {
|
||||
if (!this.isFull) {
|
||||
plus.screen.lockOrientation("landscape-primary");
|
||||
//this.$refs.vlc.requestFullScreen()
|
||||
} else {
|
||||
plus.screen.lockOrientation("portrait-primary");
|
||||
//this.$refs.vlc.exitFullScreen()
|
||||
}
|
||||
this.isFull = !this.isFull;
|
||||
},
|
||||
tap() {
|
||||
console.log("tap")
|
||||
if (this.onceClickTimer != null) {
|
||||
clearTimeout(this.onceClickTimer);
|
||||
this.onceClickTimer = null;
|
||||
}
|
||||
this.isShowTitle = !this.isShowTitle;
|
||||
this.$forceUpdate()
|
||||
if (this.isShowTitle) {
|
||||
this.onceClickTimer = setTimeout(() => {
|
||||
clearTimeout(this.onceClickTimer);
|
||||
this.onceClickTimer = null;
|
||||
this.isShowTitle = false;
|
||||
}, this.hideTitleTime)
|
||||
}
|
||||
},
|
||||
//监听当前操作
|
||||
touchStartHandle(e) {
|
||||
console.log(e);
|
||||
this.touchStartTimeStamp = new Date().getTime();
|
||||
this.handleDynamicY = e.changedTouches[0].screenY;
|
||||
this.handleDynamicX = e.changedTouches[0].screenX;
|
||||
},
|
||||
//监听抬起操作
|
||||
touchEndHandle(e) {
|
||||
//this.tap();
|
||||
if (this.touchHandleType) {
|
||||
this.touchStartTimeStamp = 0;
|
||||
this.handleDynamicY = 0;
|
||||
this.handleDynamicX = 0;
|
||||
this.touchHandleType = false;
|
||||
if (this.progressBtnStatus) {
|
||||
this.progressBtnStatus = false;
|
||||
this.progressPercent = this.progressBtnPercent;
|
||||
}
|
||||
}
|
||||
|
||||
},
|
||||
// 监听是否触发滑动事件
|
||||
touchMoveHandle(e) {
|
||||
// 判断左右上下滑动是否超过10px
|
||||
let X = e.changedTouches[0].screenX;
|
||||
let Y = e.changedTouches[0].screenY;
|
||||
if (this.touchHandleType) {
|
||||
this.handleFun(X, Y);
|
||||
return;
|
||||
}
|
||||
let chaX = Math.abs(X - this.handleDynamicX);
|
||||
let chaY = Math.abs(Y - this.handleDynamicY);
|
||||
if (chaX > 10 || chaY > 10) {
|
||||
if (chaX > 10) {
|
||||
this.touchHandleType = 'progress';
|
||||
this.handleDynamicX = X;
|
||||
} else {
|
||||
let left = uni.getSystemInfoSync().screenWidth / 2;
|
||||
if (this.handleDynamicX > left) {
|
||||
this.touchHandleType = 'voice'
|
||||
} else {
|
||||
this.touchHandleType = 'light'
|
||||
}
|
||||
this.handleDynamicY = Y;
|
||||
}
|
||||
}
|
||||
},
|
||||
// 操作当前的方法
|
||||
handleFun(X, Y) {
|
||||
let chaX = X - this.handleDynamicX;
|
||||
let chaY = Y - this.handleDynamicY;
|
||||
switch (this.touchHandleType) {
|
||||
case 'progress':
|
||||
console.log("progress")
|
||||
this.progressBtnStatus = true;
|
||||
if (chaX > 0) {
|
||||
if (this.current >= this.duration) {
|
||||
this.current = this.duration;
|
||||
} else {
|
||||
this.current += 1000;
|
||||
}
|
||||
} else {
|
||||
if (this.current <= 0) {
|
||||
this.current = 0;
|
||||
} else {
|
||||
this.current -= 1000;
|
||||
}
|
||||
}
|
||||
var dic = {
|
||||
"second": "" + parseInt(this.current)
|
||||
}
|
||||
this.$refs.player.seekToTime(dic, (res) => {
|
||||
console.log("seekToTime:" + JSON.stringify(res))
|
||||
})
|
||||
break;
|
||||
case 'light':
|
||||
console.log("light")
|
||||
if (chaY < 0) {
|
||||
if (this.videoNowLight + 0.02 >= 1) {
|
||||
this.videoNowLight = 1;
|
||||
} else {
|
||||
this.videoNowLight += 0.02
|
||||
}
|
||||
} else {
|
||||
if (this.videoNowLight - 0.02 <= 0) {
|
||||
this.videoNowLight = 0;
|
||||
} else {
|
||||
this.videoNowLight -= 0.02
|
||||
}
|
||||
}
|
||||
plus.screen.setBrightness(this.videoNowLight)
|
||||
break;
|
||||
case 'voice':
|
||||
console.log("voice")
|
||||
|
||||
if (chaY < 0) {
|
||||
if (this.videoNowVoice + 0.02 >= 1) {
|
||||
this.videoNowVoice = 1;
|
||||
} else {
|
||||
this.videoNowVoice += 0.02
|
||||
}
|
||||
} else {
|
||||
if (this.videoNowVoice - 0.02 <= 0) {
|
||||
this.videoNowVoice = 0;
|
||||
} else {
|
||||
this.videoNowVoice -= 0.02
|
||||
}
|
||||
}
|
||||
plus.device.setVolume(this.videoNowVoice);
|
||||
|
||||
break;
|
||||
default:
|
||||
this.touchHandleType = false;
|
||||
break;
|
||||
}
|
||||
this.handleDynamicX = X;
|
||||
this.handleDynamicY = Y;
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.text {
|
||||
color: #fff;
|
||||
font-size: 10px;
|
||||
}
|
||||
|
||||
.play {
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
.video-view {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
z-index: 999;
|
||||
}
|
||||
|
||||
.tip {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
top: 250rpx;
|
||||
text-align: center;
|
||||
color: #fff
|
||||
}
|
||||
|
||||
.top-title,
|
||||
.bottom-title {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 70px;
|
||||
background-color: rgba(0, 0, 0, 0.1);
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
color: #fff;
|
||||
padding: 16px;
|
||||
}
|
||||
|
||||
.top-title {
|
||||
top: 0;
|
||||
width: 750rpx;
|
||||
}
|
||||
|
||||
.bottom-title {
|
||||
bottom: 0;
|
||||
width: 750rpx;
|
||||
}
|
||||
|
||||
.fullControls-center {
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 40px;
|
||||
}
|
||||
|
||||
.btns {
|
||||
margin-top: 40px;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
flex-direction: row;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
</style>
|
||||
@@ -1,468 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<oxeVideo ref='video'
|
||||
:isLive='boxIsLive'
|
||||
:coreType='boxCoreType'
|
||||
:callback='boxCallback'
|
||||
:style='boxStyle'></oxeVideo>
|
||||
<button @click="replay"> 重播 </button>
|
||||
<button @click="prev"> 上一集 </button>
|
||||
<button @click="next"> 下一集 </button>
|
||||
<button @click="enterTinyWindow"> 小屏播放 </button>
|
||||
<button @click="remove"> 移除播放器 </button>
|
||||
<button @click="addDanmaku"> 发送弹幕 </button>
|
||||
<button @click="pause"> 暂停 </button>
|
||||
<button @click="start"> 播放 </button>
|
||||
<button @click="showVipView"> 显示vip</button>
|
||||
<button @click="hideVipView"> 隐藏vip</button>
|
||||
<button @click="hidePlay"> 隐藏播放器</button>
|
||||
<button @click="showPlay"> 显示播放器</button>
|
||||
<button @click="isFull"> 是否全屏</button>
|
||||
<button @click="getDuration"> 获取时长</button>
|
||||
<button @click="updateAll"> 更新视频数据</button>
|
||||
<button @click="openDanmaku"> 开启弹幕</button>
|
||||
<button @click="closeDanmaku"> 关闭弹幕</button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
//所有图片支持http开头网络图片
|
||||
let w = uni.getSystemInfoSync().windowWidth;
|
||||
let h = 400;
|
||||
//component 自定义控件 radius 圆角值 backgroundColor 背景色 border 边框 borderColor边框颜色
|
||||
//alignment 文字对齐0:居中 1上左对齐 2上中对齐 3上右对齐 4上两端对齐 5下左对齐 6下中对齐 7下右对齐 8下两端对齐 9居中两端对齐
|
||||
//textSize:14 文字大小 textColor:'#C0FF3E' 文字颜色 alpha 背景透明度
|
||||
//hidden 是否隐藏
|
||||
//code:16//控件标识 同时作为点击事件返回码 0,1,2,3,4,5占用 不能使用 组件 code值不能重复 rect 图片位置(相对父组件component位置)
|
||||
//type为full显示在全屏 small 显示在小屏
|
||||
let component = {
|
||||
x: w - 20,
|
||||
y: 60,
|
||||
w: 50,
|
||||
h: 50,
|
||||
type: 'full',
|
||||
radius: 0,
|
||||
backgroundColor: '#FFFFFF',
|
||||
alpha: 0.2,
|
||||
border: 0,
|
||||
borderColor: '#E066FF',
|
||||
code: 66,
|
||||
hidden: false,
|
||||
autoHidden: true,
|
||||
animation: 0, //隐藏 动画 显示隐藏时起作用 0正常 1左 2右 3上 4下
|
||||
pics: [{
|
||||
path: '/static/btn_number.png',
|
||||
x: 0,
|
||||
y: 0,
|
||||
w: 50,
|
||||
h: 50,
|
||||
code: 661
|
||||
}]
|
||||
}; //自定义组件
|
||||
//let styles = [component];
|
||||
let styles = [];
|
||||
let vdata = [{
|
||||
uid: '', //扩展字段 用户id(可选,会随事件返回)
|
||||
vid: '', //扩展字段 视频id(可选,会随事件返回)
|
||||
title: '第一集',
|
||||
index: '01',
|
||||
thumb: '/static/cover.jpg',
|
||||
url: 'https://1318977462.vod-qcloud.com/c41d38favodtranscq1318977462/fb2a2e113270835010023253556/v.f1443687.mp4'
|
||||
},
|
||||
{
|
||||
uid: '', //扩展字段 用户id(可选,会随事件返回)
|
||||
vid: '', //扩展字段 视频id(可选,会随事件返回)
|
||||
title: '第二集',
|
||||
index: '02',
|
||||
thumb: '/static/cover.jpg',
|
||||
url: 'https://1318977462.vod-qcloud.com/c41d38favodtranscq1318977462/fb2a2e113270835010023253556/v.f1443687.mp4',
|
||||
}
|
||||
];
|
||||
let data = {
|
||||
selectAutoPlay: true, //选集点击是否自动播放 默认自动播放
|
||||
forceDeviceOrientation: false, //旋转方向 true 全屏视频不旋转
|
||||
radius: 0, //圆角大小 默认 0 没有圆角
|
||||
showBack: true, //返回按钮是否显示小屏幕
|
||||
showSelect: true, //选集按钮是否显示
|
||||
showSpeed: true, //倍速按钮是否显示
|
||||
showShot: true, //截图按钮是否显示
|
||||
showDlna: {
|
||||
small: true,
|
||||
full: true
|
||||
}, //投屏按钮是否显示
|
||||
showDunmaku: {
|
||||
small: true,
|
||||
full: true
|
||||
}, //弹幕按钮是否显示
|
||||
showMore: {
|
||||
small: true,
|
||||
full: true
|
||||
}, //跟多按钮是否显示
|
||||
showBottomProcess: true,
|
||||
autoPlay: false, //默认false
|
||||
openCache: true, //是否开启缓存
|
||||
fullGestureSlide: true,
|
||||
smallGestureSlide: true,
|
||||
isDrag: true,//进度条条是否拖动
|
||||
styles: styles,//自定义控件
|
||||
hideControl: false, //是否隐藏所有控件
|
||||
backgroundHolder: '', //视频背景图片
|
||||
backgroundAlpha: 0.3, //0 背景透明度
|
||||
loop: false, //是否单急循环
|
||||
ad: {
|
||||
isShow: false,
|
||||
url: 'http://t8.baidu.com/it/u=2247852322,986532796&fm=79&app=86&f=JPEG?w=1280&h=853',
|
||||
skipUrl: 'http://wap.hao123.com'
|
||||
}, //中间暂停广告,为空则不播放广告
|
||||
vad: {
|
||||
isShow: false,
|
||||
isShowSkip: true,
|
||||
type: 'image',
|
||||
duration: 10,
|
||||
url: 'https://cms-bucket.nosdn.127.net/eb411c2810f04ffa8aaafc42052b233820180418095416.jpeg',
|
||||
skipUrl: 'http://wap.hao123.com'
|
||||
}, //播放前视频广告
|
||||
index: 0,
|
||||
data: vdata
|
||||
};
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
boxStyle: {
|
||||
'height': 400,
|
||||
'width': '750upx',
|
||||
},
|
||||
boxIsLive: false,
|
||||
boxCoreType: 0,
|
||||
boxCallback: 'callback'
|
||||
}
|
||||
},
|
||||
onLoad() {
|
||||
this.wWidth = uni.getSystemInfoSync().windowWidth;
|
||||
this.boxStyle.width = this.wWidth;
|
||||
},
|
||||
onReady() {
|
||||
//事件监听
|
||||
//0 小屏状态下返回按钮点击
|
||||
//1 播放进度实时返回position
|
||||
//2 视频广告点击事件
|
||||
//3 暂停广告点击事件
|
||||
//4 vip点击返回
|
||||
//5 弹幕开启状态
|
||||
//6 播放
|
||||
//7 暂停
|
||||
//8 缓冲返回
|
||||
//9 网络错误
|
||||
//10 钢笔图标点击
|
||||
//11 选集点击事件
|
||||
//12 广告详情按钮点击
|
||||
//13 大小屏切换事件
|
||||
//14 广告划过事件
|
||||
//15 广告倒计时点击事件
|
||||
//16 广告播放完成事件
|
||||
//17 播放完成事件
|
||||
//18 下一集事件
|
||||
//20 准备播放
|
||||
var globalEvent = weex.requireModule('globalEvent');
|
||||
var ox = this.$refs.video;
|
||||
///注意 initVideoData初始化可在 组件中添加 或在 onReady里添加 只能选择一种 数据格式一样
|
||||
ox.initVideoData(data);
|
||||
globalEvent.addEventListener(this.boxCallback, function(e) {
|
||||
let code = e.code;
|
||||
if (code == 0) {
|
||||
uni.navigateBack({
|
||||
delta: 1,
|
||||
animationType: 'pop-out',
|
||||
animationDuration: 200
|
||||
});
|
||||
} else if (code == 1) {
|
||||
console.log(e);
|
||||
} else if (code == 20) {
|
||||
|
||||
} else if (code == 10) {
|
||||
|
||||
} else if (code == 661) {
|
||||
|
||||
} else if (code == 14) {
|
||||
// ox.openDanmaku();
|
||||
// ox.clearDanmaku();
|
||||
// ox.addDanmakus([{
|
||||
// text: '32323',
|
||||
// isSelf: false,
|
||||
// color: '#FFFFFF'
|
||||
// }
|
||||
// ]);
|
||||
} else if (code == 3) {
|
||||
// ox.exitFullScreen();
|
||||
// setTimeout(function() {
|
||||
// uni.navigateTo({
|
||||
// url: 'zb'
|
||||
// });
|
||||
// }, 3000)
|
||||
|
||||
}
|
||||
})
|
||||
|
||||
},
|
||||
methods: {
|
||||
showVipView: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.showVipView();
|
||||
//vip显示
|
||||
},
|
||||
hideVipView: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.hideVipView();
|
||||
//vip隐藏
|
||||
},
|
||||
addComponent: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.addComponent(component);
|
||||
//动态添加控件 code不能重复
|
||||
},
|
||||
updateComponent: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.updateComponent(component);
|
||||
//动态更新控件 更新的控件 code一定要对应
|
||||
},
|
||||
updateDataAtIndex: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.updateDataAtIndex({
|
||||
index: 1,
|
||||
data: {
|
||||
uid: '', //扩展字段 用户id(可选,会随事件返回)
|
||||
vid: '', //扩展字段 视频id(可选,会随事件返回)
|
||||
title: '第二集',
|
||||
index: '02',
|
||||
thumb: 'https://cms-bucket.nosdn.127.net/cb37178af1584c1588f4a01e5ecf323120180418133127.jpeg',
|
||||
url: 'https://v3.szjal.cn/20191120/IYfYSiin/index.m3u8',
|
||||
}
|
||||
});
|
||||
//更新索引位置视频数据
|
||||
ox.playIndex(1);
|
||||
},
|
||||
updateAll: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.updateAll({data:[{
|
||||
uid: '', //扩展字段 用户id(可选,会随事件返回)
|
||||
vid: '', //扩展字段 视频id(可选,会随事件返回)
|
||||
title: '第一集',
|
||||
index: '01',
|
||||
thumb: 'https://cms-bucket.nosdn.127.net/eb411c2810f04ffa8aaafc42052b233820180418095416.jpeg',
|
||||
url: 'http://www.easydarwin.org/public/video/3/video.m3u8'
|
||||
},
|
||||
{
|
||||
uid: '', //扩展字段 用户id(可选,会随事件返回)
|
||||
vid: '', //扩展字段 视频id(可选,会随事件返回)
|
||||
title: '第二集',
|
||||
index: '02',
|
||||
thumb: 'https://cms-bucket.nosdn.127.net/cb37178af1584c1588f4a01e5ecf323120180418133127.jpeg',
|
||||
url: 'http://vfx.mtime.cn/Video/2019/03/21/mp4/190321153853126488.mp4',
|
||||
}
|
||||
]});
|
||||
setTimeout(function() {
|
||||
ox.playIndex(0);
|
||||
}, 500)
|
||||
//更新所有视频数据
|
||||
|
||||
},
|
||||
seekTo: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.seekTo(1200);
|
||||
//滑动到指定时间播放毫秒
|
||||
},
|
||||
setSpeed: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.setSpeed(1.5);
|
||||
//设置倍数
|
||||
},
|
||||
setVolume: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.setVolume(1.5);
|
||||
//设置声音
|
||||
},
|
||||
setMuted: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.setMuted(true);
|
||||
//是否静音
|
||||
},
|
||||
clearCache: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.clearCache();
|
||||
//清理缓存
|
||||
},
|
||||
next: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.next();
|
||||
//播放下一条记录
|
||||
},
|
||||
prev: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.prev();
|
||||
//播放上一条记录
|
||||
},
|
||||
playIndex: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.playIndex(2);
|
||||
//播放索引记录
|
||||
},
|
||||
start: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.start();
|
||||
//开始播放
|
||||
},
|
||||
pause: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.pause();
|
||||
//暂停播放
|
||||
},
|
||||
replay: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.replay();
|
||||
//循环播放
|
||||
},
|
||||
remove: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.remove();
|
||||
//去除播放器
|
||||
},
|
||||
hidePlay: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.hidePlay();
|
||||
//隐藏播放器
|
||||
},
|
||||
showPlay: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.showPlay();
|
||||
//显示播放器
|
||||
},
|
||||
enterFullScreen: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.enterFullScreen();
|
||||
//进入全屏
|
||||
},
|
||||
exitFullScreen: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.exitFullScreen();
|
||||
//退出全屏
|
||||
},
|
||||
isFull: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.isFull(result => {
|
||||
let isFull = result.isFull;
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '是否全屏:' + isFull,
|
||||
success: function(res) {
|
||||
|
||||
}
|
||||
});
|
||||
});
|
||||
//是否全屏
|
||||
},
|
||||
|
||||
getSpeed: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.getSpeed(result => {
|
||||
let speed = result.speed;
|
||||
uni.showModal({
|
||||
title: '提示',
|
||||
content: '倍速:' + speed,
|
||||
success: function(res) {
|
||||
|
||||
}
|
||||
});
|
||||
});
|
||||
//获取倍速
|
||||
},
|
||||
addDanmaku: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.addDanmaku({
|
||||
text: '测试',
|
||||
isSelf: true
|
||||
});
|
||||
//单条弹幕发送
|
||||
},
|
||||
addDanmakus: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.addDanmakus([{
|
||||
text: '测试',
|
||||
isSelf: true,
|
||||
color: '#FFFFFF'
|
||||
}]);
|
||||
//多条弹幕发送
|
||||
},
|
||||
closeDanmaku: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.closeDanmaku();
|
||||
//关闭弹幕
|
||||
},
|
||||
openDanmaku: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.openDanmaku();
|
||||
//开启弹幕
|
||||
},
|
||||
getDuration: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.duration(result => {
|
||||
let duration = result.duration;
|
||||
uni.showModal({
|
||||
title: '时长',
|
||||
content: JSON.stringify(result),
|
||||
success: function(res) {
|
||||
if (res.confirm) {
|
||||
console.log('用户点击确定');
|
||||
} else if (res.cancel) {
|
||||
console.log('用户点击取消');
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
//获取视频时长 毫秒
|
||||
|
||||
},
|
||||
getScreenShot: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.screenShot(result => {
|
||||
let base64 = result.base64;
|
||||
});
|
||||
//截图 返回base64
|
||||
},
|
||||
adSkip: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.adSkip();
|
||||
//划过广告
|
||||
},
|
||||
setOptionValue: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.setOptionValue({
|
||||
value: '',
|
||||
key: '',
|
||||
category: 1
|
||||
});
|
||||
//ijk设置 option category 1 FormatOption 2 CodecOption 3 SwsOption 4 PlayerOption
|
||||
},
|
||||
setOptionIntValue: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.setOptionIntValue({
|
||||
value: 0,
|
||||
key: '',
|
||||
category: 1
|
||||
});
|
||||
//ijk设置 option category 1 FormatOption 2 CodecOption 3 SwsOption 4 PlayerOption
|
||||
},
|
||||
setScreenScaleType: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.setScreenScaleType(1);
|
||||
//设置视频画面 适应 1 2 3
|
||||
},
|
||||
enterTinyWindow: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.enterTinyWindow({x:80,y:400});
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style>
|
||||
|
||||
</style>
|
||||
@@ -1,129 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<view>
|
||||
<view class="title">播放进度</view>
|
||||
<text style="color: #576B95;">{{text}}</text>
|
||||
</view>
|
||||
<button @click="startSearch"> 搜索投屏设备 </button>
|
||||
<button @click="startPush"> 开始投屏 </button>
|
||||
<button @click="startPushed"> 开始投屏2 </button>
|
||||
<button @click="stopPush"> 停止投屏 </button>
|
||||
<button @click="pausePush"> 暂停 </button>
|
||||
<button @click="resumePush"> 播放 </button>
|
||||
<button @click="seekTo"> 快进10秒 </button>
|
||||
<button @click="getVolume"> 获取电视声音 </button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
const ox = uni.requireNativePlugin('Jiang-OxePlayer');
|
||||
var device;
|
||||
var p = 0;
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
text: '0'
|
||||
}
|
||||
},
|
||||
onReady() {
|
||||
console.log('44444444');
|
||||
ox.initDlna();
|
||||
const that = this;
|
||||
var globalEvent = weex.requireModule('globalEvent');
|
||||
globalEvent.addEventListener('dlnaCallback', function(e) {
|
||||
console.log(e);
|
||||
let code = e.code;
|
||||
if (code == 10) {
|
||||
let v = e.volume;
|
||||
ox.setVolume({
|
||||
volume: v
|
||||
});
|
||||
}else if(code == 0){
|
||||
let t = e.position
|
||||
that.text = t;
|
||||
p = t;
|
||||
}
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
|
||||
startSearch: function() {
|
||||
ox.startSearch(result => {
|
||||
console.log(result);
|
||||
if (result.code == 0) {
|
||||
var ds = result.devices;
|
||||
device = ds[0];
|
||||
}
|
||||
|
||||
});
|
||||
},
|
||||
startPush: function() {
|
||||
ox.stopPush();
|
||||
setTimeout(function() {
|
||||
ox.startPush({
|
||||
url: 'https://yixuancdn.bangju.com/%E6%8E%8C%E6%8F%A1%E5%81%A5%E5%BA%B7%E7%9A%84%E9%87%91%E9%92%A5%E5%8C%99%20%5BAVC%20720p%5D_batch_batch.mp4',
|
||||
device: device
|
||||
});
|
||||
}, 1000);
|
||||
|
||||
},
|
||||
startPushed: function() {
|
||||
ox.stopPush();
|
||||
setTimeout(function() {
|
||||
ox.startPush({
|
||||
url: 'https://yixuancdn.bangju.com/%E8%B6%B3%E9%83%A8%E5%8F%8D%E5%B0%84%E7%96%97%E6%B3%95%E7%AC%AC%E4%B8%80%E7%BB%84%E3%80%8B%20%5BAVC%20720p%5D~1.mp4',
|
||||
device: device
|
||||
});
|
||||
}, 1000);
|
||||
|
||||
},
|
||||
stopPush: function() {
|
||||
ox.stopPush();
|
||||
},
|
||||
pausePush: function() {
|
||||
ox.pause();
|
||||
},
|
||||
resumePush: function() {
|
||||
ox.resume();
|
||||
},
|
||||
seekTo: function() {
|
||||
ox.seek({position:p+10});
|
||||
},
|
||||
getVolume: function() {
|
||||
ox.getVolume(result => {
|
||||
console.log(result);
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
.card {
|
||||
width: 750rpx;
|
||||
margin-top: 60rpx;
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
background-color: #C0C0C0;
|
||||
}
|
||||
|
||||
.box {
|
||||
width: 185rpx;
|
||||
height: 185rpx;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
|
||||
.row-box {
|
||||
width: 120rpx;
|
||||
height: 120rpx;
|
||||
margin: 10rpx;
|
||||
background-color: #00000000;
|
||||
}
|
||||
|
||||
.uni-form-item .title {
|
||||
padding: 20rpx 20;
|
||||
}
|
||||
</style>
|
||||
@@ -1,57 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<button @click="startSearch"> 搜索投屏设备 </button>
|
||||
<button @click="startPush"> 开始投屏 </button>
|
||||
<button @click="stopPush"> 停止投屏 </button>
|
||||
<button @click="pausePush"> 暂停 </button>
|
||||
<button @click="resumePush"> 播放 </button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
const ox = uni.requireNativePlugin('Jiang-OxePlayer');
|
||||
var device;
|
||||
export default {
|
||||
onReady() {
|
||||
console.log('44444444');
|
||||
ox.initDlna();
|
||||
var globalEvent = weex.requireModule('globalEvent');
|
||||
globalEvent.addEventListener('dlnaCallback', function(e) {
|
||||
console.log(e);
|
||||
});
|
||||
},
|
||||
methods: {
|
||||
|
||||
startSearch: function() {
|
||||
ox.startSearch(result => {
|
||||
console.log(result);
|
||||
if(result.code==0){
|
||||
var ds =result.devices;
|
||||
device = ds[0];
|
||||
}
|
||||
|
||||
});
|
||||
},
|
||||
startPush: function() {
|
||||
ox.startPush({
|
||||
url: 'http://www.easydarwin.org/public/video/3/video.m3u8',
|
||||
device: device
|
||||
});
|
||||
},
|
||||
stopPush: function() {
|
||||
ox.stopPush();
|
||||
},
|
||||
pausePush: function() {
|
||||
ox.pause();
|
||||
},
|
||||
resumePush: function() {
|
||||
ox.resume();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
||||
@@ -1,78 +0,0 @@
|
||||
<template>
|
||||
<view>
|
||||
<zhimi_aliplayer_view ref="playerView" style="width:100%;height:300px;"></zhimi_aliplayer_view>
|
||||
<button type="primary" @click="start()">开始</button>
|
||||
<button type="primary" @click="pause()">暂停</button>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
|
||||
}
|
||||
},
|
||||
onLoad() {
|
||||
},
|
||||
onShow () {
|
||||
|
||||
},
|
||||
onHide () {
|
||||
this.pause()
|
||||
},
|
||||
mounted() {
|
||||
var playerView = this.$refs.playerView;
|
||||
|
||||
|
||||
playerView.setVidSts({
|
||||
"vid": "d0c8e6d23e5f71ef81714531858c0102",
|
||||
"accessKeyId": "STS.NTGWXhnCVxeiE3jv2FPkaconD",
|
||||
"securityToken": "CAISwgJ1q6Ft5B2yfSjIr5fyHOLcg5x3z6eCRxXbkjITXORNjKrFpjz2IHhMdHFuB+4YsP41lWtS7f8alqJvRoRZXkHfdsp36MzvQMIQgNCT1fau5Jko1beDewHKeT+ZsebWZ+LmNqS/Ht6md1HDkAJq3LL+bk/Mdle5MJqP+/EFA8oQUlv6F00kYu1bPQx/ssQXGGLMPPK2SH7Qj3HXEVBjt3gX6wo9y9zmnJXAtUaG1Qalmr5M9tyuGPX+MZkwZqUYesyuwel7epDG1CNt8BVQ/M909vccoWef4I/DXQcLuUTdabGNqscAMgh1fK8+Fr7vNBB7d2X80Aa6tfMUq34lVYk9O0xUlBgvRFbCU6ovuoKM/1JX7+gpfvTOV/+7+kpvCikgLwgpMPFKCRxrQicnUVK3ROLZvj6DDGitI72BtpVoufIdGoABffDnFykDKsxFFQZwKGrrVUFPL1V48K4ovYkHx15iw2mW6RqNrJDDSl56UfTxDcaRSk0HqA8+e+1pO3LW2vMRHrIhIqhu3gCbbCBATVb8v96Y5HIXIIw29gX9o0xfMgFIdHTZ+YsMSjacnXpvmslLzRD7vNiVgC2E6ySVcvzQOG0gAA==",
|
||||
"accessKeySecret": "GcyVng2e6UBbmbKiEN1ArqFqy3uGSAg8dsc8N1Pajm2V",
|
||||
"expireTime": "2024-07-16T10:50:38Z",
|
||||
"Region": "cn-shanghai",
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
let isFullScreen = true;
|
||||
// fixed fullscreen play on android
|
||||
if (plus.os.name.toLowerCase() === 'android') {
|
||||
plus.key.addEventListener('backbutton', e => {
|
||||
if (isFullScreen) {
|
||||
playerView.changeScreenMode(0, false)
|
||||
isFullScreen = false
|
||||
} else {
|
||||
// 这里由于安卓无法监听返回按键,这里只能通过plus监听,然后自己模拟退回
|
||||
uni.navigateBack()
|
||||
}
|
||||
});
|
||||
}
|
||||
playerView.setPlayerCallBack(({ type, data }) => {
|
||||
switch (type) {
|
||||
case 'isFullScreen':
|
||||
isFullScreen = Boolean(data)
|
||||
break
|
||||
default:
|
||||
console.log({ type, data })
|
||||
}
|
||||
})
|
||||
},
|
||||
methods: {
|
||||
start() {
|
||||
var playerView = this.$refs.playerView;
|
||||
playerView.start();
|
||||
},
|
||||
pause() {
|
||||
var playerView = this.$refs.playerView;
|
||||
playerView.pause();
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<style>
|
||||
|
||||
</style>
|
||||
@@ -1,257 +0,0 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport"
|
||||
content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0" />
|
||||
<meta name="format-detection" content="telephone=no,email=no,date=no,address=no">
|
||||
<title>顾问主页设置</title>
|
||||
<link rel="stylesheet" type="text/css" href="css/aui.css" />
|
||||
</head>
|
||||
<body>
|
||||
<div class="outerScroller" id="outerScroller">
|
||||
<div class="aui-content aui-margin-b-15">
|
||||
<ul id="datalist" class="aui-list">
|
||||
</ul>
|
||||
</div>
|
||||
<footer class="aui-bar aui-bar-tab">
|
||||
<div class="aui-content-padded">
|
||||
<div id="btn_add" class="aui-btn aui-btn-info" tapmode onclick="add()">发布</div>
|
||||
<div id="btn_edit" class="aui-btn" tapmode onclick="edit()">编辑</div>
|
||||
<div id="btn_del" class="aui-btn" tapmode onclick="del()">删除</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
<script type="text/javascript" src="js/api.js"></script>
|
||||
<script type="text/javascript" src="js/aui-dialog.js"></script>
|
||||
<script type="text/javascript" src="js/mui.min.js"></script>
|
||||
<script type="text/javascript" src="js/jquery-3.2.1.min.js"></script>
|
||||
<script type="text/javascript" src="js/pull-load.min.js"></script>
|
||||
<script type="text/javascript">
|
||||
var dialog = new auiDialog();
|
||||
var page = 1;
|
||||
var isAdd = true;
|
||||
var oid = '';
|
||||
var username = '';
|
||||
var title = '';
|
||||
$(document).ready(function() {
|
||||
var id = getParameter("id");
|
||||
var glsort = getParameter("glsort");
|
||||
var glsort2 = getParameter("glsort2");
|
||||
var x_Sn = getParameter("x_Sn");
|
||||
var templateId = getParameter("templateId");
|
||||
var token = getParameter("token");
|
||||
var baseSort = getParameter("baseSort");
|
||||
var param = 'cisId=' + id + '&glsort=' + glsort + '&basesort=' + 1 + '&codesort=json&page=' + page +
|
||||
'&pagesize=' + 20;
|
||||
var url = 'https://www.01as.com/manage/function/qy/gwzy.aspx?' + param;
|
||||
loadDataList(url, token, false);
|
||||
});
|
||||
new PullLoad({
|
||||
container: document.getElementById("outerScroller"),
|
||||
down: {
|
||||
distance: 50, //默认距离
|
||||
enable: true,
|
||||
callback: function(end) {
|
||||
//这个当作测试用。
|
||||
setTimeout(function() {
|
||||
var id = getParameter("id");
|
||||
var glsort = getParameter("glsort");
|
||||
var glsort2 = getParameter("glsort2");
|
||||
var token = getParameter("token");
|
||||
var baseSort = getParameter("baseSort");
|
||||
page = 1;
|
||||
var param = 'cisId=' + id + '&glsort=' + glsort + '&basesort=' + 1 +
|
||||
'&codesort=json&page=' + page + '&pagesize=' + 20;
|
||||
var url = 'https://www.01as.com/manage/function/qy/gwzy.aspx?' + param;
|
||||
loadDataList(url, token, false);
|
||||
isAdd = true;
|
||||
var btn_add = $api.byId('btn_add');
|
||||
var btn_edit = $api.byId('btn_edit');
|
||||
var btn_del = $api.byId('btn_del');
|
||||
btn_add.setAttribute("class", "aui-btn aui-btn-info")
|
||||
btn_edit.setAttribute("class", "aui-btn")
|
||||
btn_del.setAttribute("class", "aui-btn")
|
||||
end(false);
|
||||
}, 1500);
|
||||
}
|
||||
},
|
||||
up: {
|
||||
distance: 50, //默认距离,也是创建的div的默认g高度
|
||||
isScrollLoad: false,
|
||||
isInitLoad: false,
|
||||
enable: true,
|
||||
callback: function(end) {
|
||||
//这个当作测试用。
|
||||
setTimeout(function() {
|
||||
var id = getParameter("id");
|
||||
var glsort = getParameter("glsort");
|
||||
var glsort2 = getParameter("glsort2");
|
||||
var token = getParameter("token");
|
||||
var baseSort = getParameter("baseSort");
|
||||
page++;
|
||||
var param = 'cisId=' + id + '&glsort=' + glsort + '&basesort=' + 1 +
|
||||
'&codesort=json&page=' + page + '&pagesize=' + 20;
|
||||
var url = 'https://www.01as.com/manage/function/qy/gwzy.aspx?' + param;
|
||||
loadDataList(url, token, true);
|
||||
end(false);
|
||||
}, 1500);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
function loadDataList(url, token, isUp) {
|
||||
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: url,
|
||||
headers: {
|
||||
'token': token
|
||||
},
|
||||
data: {
|
||||
type: 'Get'
|
||||
},
|
||||
cache: false,
|
||||
dataType: "text",
|
||||
success: function(data, textStatus, jqXHR) {
|
||||
var dd = JSON.parse(data);
|
||||
if (dd.status == 'success') {
|
||||
var arr = dd.data;
|
||||
var listDom = $api.byId('datalist');
|
||||
if (!isUp) {
|
||||
listDom.innerHTML = '';
|
||||
}
|
||||
if (arr != null && arr.length > 0) {
|
||||
$.each(arr, function(n, value) {
|
||||
var str = '<div class="aui-list-item-inner">' +
|
||||
'<div class="aui-list-item-title">' +
|
||||
'<label><input class="aui-radio" type="radio" name="gw" value="' +
|
||||
value.oid + '" data="' + value.username + '" title="' + value.title +
|
||||
'">用户名:' + value.username + '(' + value.title + ')</label>' +
|
||||
'</div>' +
|
||||
'<div class="aui-list-item-right">查看</div>' +
|
||||
'</div>';
|
||||
var liDom = document.createElement("li");
|
||||
liDom.setAttribute("class", "aui-list-item")
|
||||
liDom.innerHTML = str;
|
||||
listDom.appendChild(liDom); // 加在列表的后面,上拉加载
|
||||
});
|
||||
|
||||
}
|
||||
$('input[type=radio]').click(function() {
|
||||
|
||||
if (oid == this.value) {
|
||||
$('input[type="radio"]').prop('checked', false);
|
||||
oid = '';
|
||||
isAdd = true;
|
||||
var btn_add = $api.byId('btn_add');
|
||||
var btn_edit = $api.byId('btn_edit');
|
||||
var btn_del = $api.byId('btn_del');
|
||||
btn_add.setAttribute("class", "aui-btn aui-btn-info")
|
||||
btn_edit.setAttribute("class", "aui-btn")
|
||||
btn_del.setAttribute("class", "aui-btn")
|
||||
} else {
|
||||
oid = this.value;
|
||||
username = this.getAttribute("data");
|
||||
title = this.getAttribute("title");
|
||||
isAdd = false;
|
||||
var btn_add = $api.byId('btn_add');
|
||||
var btn_edit = $api.byId('btn_edit');
|
||||
var btn_del = $api.byId('btn_del');
|
||||
btn_add.setAttribute("class", "aui-btn")
|
||||
btn_edit.setAttribute("class", "aui-btn aui-btn-info")
|
||||
btn_del.setAttribute("class", "aui-btn aui-btn-info")
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function add() {
|
||||
if (isAdd) {
|
||||
mui.openWindow({
|
||||
id: 'gw_add',
|
||||
url: 'gw_add.html',
|
||||
show: {
|
||||
aniShow: 'fade-in',
|
||||
duration: 300
|
||||
},
|
||||
waiting: {
|
||||
autoShow: false
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
function edit() {
|
||||
if (!isAdd) {
|
||||
var param = 'cisId=' + id + '&glsort=' + glsort + '&basesort=' + 1 +
|
||||
'&codesort=json&page=' + page + '&pagesize=' + 20;
|
||||
mui.openWindow({
|
||||
id: 'gw_edit',
|
||||
url: 'gw_edit.html',
|
||||
show: {
|
||||
aniShow: 'fade-in',
|
||||
duration: 300
|
||||
},
|
||||
waiting: {
|
||||
autoShow: false
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function del() {
|
||||
if (!isAdd) {
|
||||
dialog.alert({
|
||||
title: "提示",
|
||||
msg: '确定删除记录吗?',
|
||||
buttons: ['取消', '确定']
|
||||
}, function(ret) {
|
||||
if (ret.buttonIndex == 1) {
|
||||
var param = 'cisId=' + oid;
|
||||
var url = 'https://www.01as.com/manage/function/qy/gwzy.aspx?' + param;
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: url,
|
||||
headers: {
|
||||
'deloid': oid,
|
||||
'token': token
|
||||
},
|
||||
data: {
|
||||
type: 'Get'
|
||||
},
|
||||
cache: false,
|
||||
dataType: "text",
|
||||
success: function(data, textStatus, jqXHR) {
|
||||
var dd = JSON.parse(data);
|
||||
alert(data);
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
function getParameter(sProp) {
|
||||
var re = new RegExp(sProp + "=([^\&]*)", "i");
|
||||
var a = re.exec(document.location.search);
|
||||
if (a == null) return null;
|
||||
return a[1];
|
||||
}
|
||||
|
||||
</script>
|
||||
</html>
|
||||
|
||||
@@ -1,228 +0,0 @@
|
||||
<template>
|
||||
<div>
|
||||
<oxeVideo ref='video'
|
||||
:isLive='boxIsLive'
|
||||
:coreType='boxCoreType'
|
||||
:callback='boxCallback'
|
||||
:data='boxData'
|
||||
:style='boxStyle'></oxeVideo>
|
||||
<button @click="addDanmaku"> 发送弹幕 </button>
|
||||
<button @click="pause"> 暂停 </button>
|
||||
<button @click="start"> 播放 </button>
|
||||
<button @click="showVipView"> 显示vip</button>
|
||||
<button @click="hideVipView"> 隐藏vip</button>
|
||||
<button @click="hidePlay"> 隐藏播放器</button>
|
||||
<button @click="showPlay"> 显示播放器</button>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
//所有图片支持http开头网络图片
|
||||
let w = uni.getSystemInfoSync().windowWidth;
|
||||
let h = 250;
|
||||
//component 自定义控件 radius 圆角值 backgroundColor 背景色 border 边框 borderColor边框颜色
|
||||
//alignment 文字对齐0:居中 1上左对齐 2上中对齐 3上右对齐 4上两端对齐 5下左对齐 6下中对齐 7下右对齐 8下两端对齐 9居中两端对齐
|
||||
//textSize:14 文字大小 textColor:'#C0FF3E' 文字颜色 alpha 背景透明度
|
||||
//hidden 是否隐藏
|
||||
//code:16//控件标识 同时作为点击事件返回码 0,1,2,3,4,5占用 不能使用 组件 code值不能重复 rect 图片位置(相对父组件component位置)
|
||||
//type为full显示在全屏 small 显示在小屏
|
||||
let component = {
|
||||
x: w - 120,
|
||||
y: 60,
|
||||
w: 60,
|
||||
h: 80,
|
||||
type: 'small',
|
||||
radius: 0,
|
||||
backgroundColor: '#000000',
|
||||
alpha: 0.5,
|
||||
border: 0,
|
||||
borderColor: '#E066FF',
|
||||
code: 66,
|
||||
hidden: false,
|
||||
autoHidden: false,
|
||||
pics: [{
|
||||
path: '/static/shop.jpg',
|
||||
x: 0,
|
||||
y: 0,
|
||||
w: 60,
|
||||
h: 80,
|
||||
code: 661
|
||||
}],
|
||||
texts: []
|
||||
}; //自定义组件
|
||||
let styles = [component];
|
||||
let data = {
|
||||
forceDeviceOrientation: false, //旋转方向 true 全屏视频不旋转
|
||||
radius: 5, //圆角大小 默认 0 没有圆角
|
||||
showBack: true, //返回按钮是否显示小屏幕
|
||||
showShot: true, //截图按钮是否显示
|
||||
showDlna: {
|
||||
small: true,
|
||||
full: true
|
||||
}, //投屏按钮是否显示
|
||||
showDunmaku: {
|
||||
small: true,
|
||||
full: true
|
||||
}, //弹幕按钮是否显示
|
||||
showMore: {
|
||||
small: true,
|
||||
full: true
|
||||
}, //跟多按钮是否显示
|
||||
autoPlay: true, //默认false
|
||||
styles: styles,
|
||||
hideControl: false, //是否隐藏所有控件
|
||||
backgroundHolder: '', //视频背景图片
|
||||
backgroundAlpha: 0.3, //0 背景透明度
|
||||
loop: false, //是否单急循环
|
||||
ad: {
|
||||
isShow: true,
|
||||
url: 'http://t8.baidu.com/it/u=2247852322,986532796&fm=79&app=86&f=JPEG?w=1280&h=853',
|
||||
skipUrl: 'http://wap.hao123.com'
|
||||
}, //中间暂停广告,为空则不播放广告
|
||||
index: 0,
|
||||
data: [{
|
||||
uid: '', //扩展字段 用户id(可选,会随事件返回)
|
||||
vid: '', //扩展字段 视频id(可选,会随事件返回)
|
||||
title: 'cctv1',
|
||||
index: '01',
|
||||
thumb: 'https://cms-bucket.nosdn.127.net/eb411c2810f04ffa8aaafc42052b233820180418095416.jpeg',
|
||||
url: 'http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8'
|
||||
}]
|
||||
|
||||
};
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
boxStyle: {
|
||||
'height': 250,
|
||||
'width': '750upx',
|
||||
},
|
||||
boxIsLive: true,
|
||||
boxCoreType: 1,
|
||||
boxCallback: 'callback',
|
||||
boxData: data
|
||||
}
|
||||
},
|
||||
onLoad() {
|
||||
this.wWidth = uni.getSystemInfoSync().windowWidth;
|
||||
this.boxStyle.width = this.wWidth;
|
||||
},
|
||||
onReady() {
|
||||
//事件监听
|
||||
//0 小屏状态下返回按钮点击
|
||||
//1 播放进度实时返回position
|
||||
//3 暂停广告点击
|
||||
//4 vip点击返回
|
||||
//5 弹幕开启状态
|
||||
//6 播放
|
||||
//7 暂停
|
||||
//8 缓冲返回
|
||||
//9 网络错误
|
||||
//10 钢笔图标点击
|
||||
//11 选集点击事件
|
||||
var globalEvent = weex.requireModule('globalEvent');
|
||||
var ox = this.$refs.video;
|
||||
///注意 initVideoData初始化可在 组件中添加 或在 onReady里添加 只能选择一种 数据格式一样
|
||||
//ox.initVideoData(data);
|
||||
globalEvent.addEventListener(this.boxCallback, function(e) {
|
||||
let code = e.code;
|
||||
if (code == 0) {
|
||||
uni.navigateBack({
|
||||
delta: 1,
|
||||
animationType: 'pop-out',
|
||||
animationDuration: 200
|
||||
});
|
||||
}else if(code == 1){
|
||||
|
||||
}
|
||||
})
|
||||
|
||||
},
|
||||
methods: {
|
||||
showVipView: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.showVipView();
|
||||
//vip显示
|
||||
},
|
||||
hideVipView: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.hideVipView();
|
||||
//vip隐藏
|
||||
},
|
||||
addComponent: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.addComponent(component);
|
||||
//动态添加控件 code不能重复
|
||||
},
|
||||
updateComponent: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.updateComponent(component);
|
||||
//动态更新控件 更新的控件 code一定要对应
|
||||
},
|
||||
|
||||
setVolume: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.setVolume(1.5);
|
||||
//设置声音
|
||||
},
|
||||
setMuted: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.setMuted(true);
|
||||
//设置静音
|
||||
},
|
||||
|
||||
start: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.start();
|
||||
//开始播放
|
||||
},
|
||||
pause: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.pause();
|
||||
//暂停播放
|
||||
},
|
||||
replay: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.replay();
|
||||
//循环播放
|
||||
},
|
||||
remove: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.remove();
|
||||
//去除播放器
|
||||
},
|
||||
hidePlay: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.hidePlay();
|
||||
//隐藏播放器
|
||||
},
|
||||
showPlay: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.showPlay();
|
||||
//显示播放器
|
||||
},
|
||||
enterFullScreen: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.enterFullScreen();
|
||||
//进入全屏
|
||||
},
|
||||
exitFullScreen: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.exitFullScreen();
|
||||
//退出全屏
|
||||
},
|
||||
addDanmaku: function() {
|
||||
var ox = this.$refs.video;
|
||||
ox.addDanmaku({
|
||||
text: '测试',
|
||||
isSelf: true
|
||||
});
|
||||
//弹幕
|
||||
}
|
||||
}
|
||||
};
|
||||
</script>
|
||||
<style>
|
||||
|
||||
</style>
|
||||
Reference in New Issue
Block a user