返回 slidev
ScreenCaptureMirror.vue
根目录 / packages / client / internals / ScreenCaptureMirror.vue
1 <script setup lang="ts">
2 import { shallowRef, useTemplateRef } from 'vue'
3
4 const video = useTemplateRef('video')
5 const stream = shallowRef<MediaStream | null>(null)
6 const started = shallowRef(false)
7
8 async function startCapture() {
9 stream.value = await navigator.mediaDevices.getDisplayMedia({
10 video: {
11 // @ts-expect-error missing types
12 cursor: 'always',
13 },
14 audio: false,
15 selfBrowserSurface: 'include',
16 preferCurrentTab: false,
17 })
18 video.value!.srcObject = stream.value
19 video.value!.play()
20 started.value = true
21 stream.value.addEventListener('inactive', () => {
22 video.value!.srcObject = null
23 started.value = false
24 })
25 stream.value.addEventListener('ended', () => {
26 video.value!.srcObject = null
27 started.value = false
28 })
29 }
30 </script>
31
32 <template>
33 <div h-full w-full>
34 <video v-show="started" ref="video" class="w-full h-full object-contain" />
35 <div v-if="!started" w-full h-full flex="~ col gap-4 items-center justify-center">
36 <div op50>
37 Use screen capturing to mirror your main screen back to presenter view.<br>
38 Click the button below and <b>select your other monitor or window</b>.
39 </div>
40 <button class="slidev-form-button" @click="startCapture">
41 Start Screen Mirroring
42 </button>
43 </div>
44 </div>
45 </template>
46
46 lines Plain Text