let layer; let loadingMsg; let qxToken; let qxUrl; let item; function setForm(data) { item = JSON.parse(data); layui.use('layer', function () { layer = layui.layer; //加载层-风格3 loadingMsg = layer.msg('视频加载中,请稍候...', {icon: 16, scrollbar: false, time: 0, shade: [0.01, '#393D49']}); }); initVideo() } function initVideo() { getQXConnect(); } /** * 创建清新平台连接 */ function getQXConnect() { let passWay = localStorage.getItem("passWay"); if (passWay == null || passWay === '') { passWay = 'to-2'; } let params = { "address": _cf.connParams.address, "port": _cf.connParams.port, "user": _cf.connParams.user, "password": _cf.connParams.password, "epid": _cf.connParams.epid, "fixaddr": _cf.connParams.bfix } if (passWay === 'to-2' || passWay === 'to-4') { posts(_cf.q2http_urlN, 'login', params, function (rv) { let result = { errcode: -1, token: '' } let respJSON = JSON.parse(rv.responseText); if (respJSON.hasOwnProperty('errcode')) { result.errcode = respJSON.errcode; } if (respJSON.hasOwnProperty('token')) { result.token = respJSON.token; result.errcode = 0; if (!isEmpty(result.token)) { qxUrl = _cf.q2http_urlN; qxToken = result.token; play(item); } } }); } if (passWay === 'to-2' || passWay === 'to-3') { posts(_cf.q2http_url, 'login', params, function (rv) { let result = { errcode: -1, token: '' } let respJSON = JSON.parse(rv.responseText); if (respJSON.hasOwnProperty('errcode')) { result.errcode = respJSON.errcode; } if (respJSON.hasOwnProperty('token')) { result.token = respJSON.token; result.errcode = 0; if (!isEmpty(result.token)) { qxUrl = _cf.q2http_url; qxToken = result.token; play(item); } } }); } } function play(item) { QXPlayVideo(item); } /** * 时间字符串转时间戳 * @param str */ function timeStrToTimestamp(str) { let date = new Date(str); return date.getTime(); } /** * 清新播放视频 * @param item */ function QXPlayVideo(item) { //播视频接口 let url; let durationSecond = timeStrToTimestamp(parseInt(item.end)) - timeStrToTimestamp(parseInt(item.begin)) if (item.type === 'platform') { //平台 url = qxUrl + "CSS/VODFile.flv?id=" + item.id + "&path=" + "" + item.path + item.name + "" + "&idx=0&puid=" + item.puid + "&durationSecond=" + durationSecond + "&resType=IV&start=0&stream=0&token=" + qxToken; } else { //前端 url = qxUrl + "SG/VODFile.flv?path=" + "" + item.path + item.name + "" + "&idx=0&puid=" + item.puid + "&durationSecond=" + durationSecond + "&startTime=0&stream=0&token=" + qxToken; } console.log(url) if (flvjs.isSupported()) { let videoElement = document.getElementById('videoDemo'); if (videoElement) { let flvPlayer = flvjs.createPlayer({ type: 'flv', // => 媒体类型 flv 或 mp4,m3u8 isLive: true, // => 是否为直播流 hasAudio: false, // => 是否开启声音 url: url, // => 视频流地址 stashInitialSize: 128 // 减少首桢显示等待时长 }, { enableWorker: false, //不启用分离线程 enableStashBuffer: false, //关闭IO隐藏缓冲区 reuseRedirectedURL: true, //重用301/302重定向url,用于随后的请求,如查找、重新连接等。 autoCleanupSourceBuffer: true, //自动清除缓存 fixAudioTimestampGap: false//false才会音视频同步 }); flvPlayer.attachMediaElement(videoElement); flvPlayer.load(); flvPlayer.play(); flvPlayer.on(flvjs.Events.ERROR, (errorType, errorDetail, errorInfo) => { if (flvPlayer) { layer.msg("视频播放失败", {icon: 2, time: 2000}); } }); flvPlayer.on(flvjs.Events.SCRIPTDATA_ARRIVED, (errorType, errorDetail, errorInfo) => { if (flvPlayer) { layer.close(loadingMsg); } }); } } } /** * post 请求 * @param url * @param router * @param params * @param callback */ function posts(url, router, params, callback) { $.ajax({ type: 'post', url: url + router, data: params, traditional: true, dataType: 'json', complete: function (rv) { if (typeof callback == 'function') callback(rv) } }) }