Files
tl-rtc-file/svr/res/js/screenShare.js
https://blog.iamtsm.cn 85d0013ea6 feat: 优化音视频/屏幕共享/直播功能
feat: 支持直播模式切换
feat: 支持开关摄像头麦克风
feat: 优化媒体流设备兼容性问题
feat: 优化加入不同类型房间的提示
feat: 调整加入流媒体房间弹窗input类型
feat: 补充页面功能区滚动条
feat: 优化图标和一些样式
feat: 调整部分功能的目录结构
feat: 调整部分存储表结构
feat: 更新adapter.js依赖版本
feat: 优化流媒体连接逻辑
fix. : 修复远程画笔绘制图片报错
2023-07-29 23:45:50 +08:00

130 lines
4.4 KiB
JavaScript

// --------------------------- //
// -- screenShare.js -- //
// -- version : 1.0.0 -- //
// -- date : 2023-06-22 -- //
// --------------------------- //
var screenShare = new Vue({
el: '#screenShareApp',
data: function () {
return {
stream: null,
times: 0,
interverlId: 0,
track: null,
}
},
methods: {
getMediaPlay: function () {
let media = null;
if (window.navigator.getDisplayMedia) {
media = window.navigator.getDisplayMedia({
video: true,
audio:true
});
} else if (window.navigator.mediaDevices && window.navigator.mediaDevices.getDisplayMedia) {
media = window.navigator.mediaDevices.getDisplayMedia({
video: true,
audio:true
});
} else if(window.navigator.mediaDevices && window.navigator.mediaDevices.getUserMedia){
media = window.navigator.mediaDevices.getUserMedia({
video: {
mediaSource: 'screen'
},
audio:true
});
}
return media
},
startScreenShare: async function (callback) {
let that = this;
if(this.stream == null){
try {
this.stream = await this.getMediaPlay();
} catch (error) {
console.log(error)
}
}
if (this.stream == null) {
if (window.layer) {
layer.msg("获取设备屏幕录制权限失败")
}
window.Bus.$emit("changeScreenShareState", false)
callback && callback()
return;
}
const video = document.querySelector("#selfMediaShareScreen");
video.addEventListener('loadedmetadata', function() {
// ios 微信浏览器兼容问题
window.Bus.$emit("addSysLogs", "loadedmetadata")
video.play();
document.addEventListener('WeixinJSBridgeReady', function () {
window.Bus.$emit("addSysLogs", "loadedmetadata WeixinJSBridgeReady")
video.play();
}, false);
});
document.addEventListener('WeixinJSBridgeReady', function () {
window.Bus.$emit("addSysLogs", "WeixinJSBridgeReady")
video.play();
}, false);
video.srcObject = this.stream;
video.play();
//计算时间
this.interverlId = setInterval(() => {
that.times += 1;
window.Bus.$emit("changeScreenShareTimes", that.times)
$("#screenShareIcon").css("color","#fb0404")
$("#screenShareTimes").css("color","#fb0404")
setTimeout(() => {
$("#screenShareIcon").css("color","#000000")
$("#screenShareTimes").css("color","#000000")
}, 500)
}, 1000);
if (window.layer) {
layer.msg("开始屏幕共享,再次点击按钮即可停止共享")
}
this.stream.getTracks().forEach(function (track) {
that.track = track;
callback && callback(track, that.stream)
});
},
stopScreenShare: function () {
if(this.stream){
this.stream.getTracks().forEach(track => track.stop());
}
clearInterval(this.interverlId);
window.Bus.$emit("changeScreenShareTimes", 0)
if (window.layer) {
layer.msg("屏幕共享结束,本次共享时长 "+this.times+"秒")
}
setTimeout(() => {
$("#screenShareIcon").css("color", "#000000")
}, 1000);
this.stream = null;
this.times = 0;
return;
},
getScreenShareTrackAndStream: function(callback){
callback(this.track, this.stream)
},
},
mounted: async function () {
window.Bus.$on("startScreenShare", this.startScreenShare);
window.Bus.$on("stopScreenShare", this.stopScreenShare);
window.Bus.$on("getScreenShareTrackAndStream", this.getScreenShareTrackAndStream);
}
})