vue实现屏幕共享
Vue 实现屏幕共享的方法
屏幕共享可以通过浏览器的 getDisplayMedia API 实现,结合 Vue 可以封装为组件或直接在方法中调用。

安装依赖
确保项目已安装 peerjs 或 simple-peer 等 WebRTC 库(用于点对点传输):

npm install peerjs
基本实现代码
在 Vue 组件中通过按钮触发屏幕共享:
<template>
<div>
<button @click="startScreenShare">开始共享屏幕</button>
<video ref="screenVideo" autoplay playsinline></video>
</div>
</template>
<script>
export default {
methods: {
async startScreenShare() {
try {
const stream = await navigator.mediaDevices.getDisplayMedia({
video: true,
audio: true, // 可选
});
this.$refs.screenVideo.srcObject = stream;
} catch (error) {
console.error("屏幕共享失败:", error);
}
},
},
};
</script>
结合 WebRTC 传输
若需将共享的屏幕流发送给其他用户,可使用 WebRTC:
// 发送方
const peer = new Peer();
peer.on('open', (id) => {
const stream = await navigator.mediaDevices.getDisplayMedia();
const call = peer.call(receiverId, stream);
});
// 接收方
peer.on('call', (call) => {
call.answer();
call.on('stream', (stream) => {
this.$refs.screenVideo.srcObject = stream;
});
});
注意事项
- 浏览器兼容性:
getDisplayMedia在 Chrome、Edge、Firefox 中支持较好。 - 权限提示:用户需手动允许屏幕共享。
- 错误处理:捕获
getDisplayMedia的异常(如用户取消授权)。 - 移动端限制:部分移动浏览器可能不支持屏幕共享。
扩展功能
- 通过
MediaRecorder录制共享内容。 - 使用 Socket.io 或 WebSocket 协调信令(如房间管理)。
- 添加共享控制按钮(如停止共享):
stopScreenShare() { const stream = this.$refs.screenVideo.srcObject; stream.getTracks().forEach(track => track.stop()); }






