|  | @@ -1,4 +1,4 @@
 | 
	
		
			
				|  |  | -import { ElMessage } from 'element-plus';
 | 
	
		
			
				|  |  | +import { ElMessage, ElMessageBox } from 'element-plus';
 | 
	
		
			
				|  |  |  import { reactive, ref, Ref } from 'vue'
 | 
	
		
			
				|  |  |  import * as RongIMLib from '@rongcloud/imlib-next'
 | 
	
		
			
				|  |  |  import * as RTC from '@rongcloud/plugin-rtc'
 | 
	
	
		
			
				|  | @@ -225,7 +225,9 @@ export const shareScreenVideo = async () => {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |      const oldTrack = runtime.activeTracks.camera as RTC.RCLocalTrack
 | 
	
		
			
				|  |  |      // removeTrack([oldTrack], 'camera')
 | 
	
		
			
				|  |  | -    await runtime.joinedRoom?.unpublish([oldTrack])
 | 
	
		
			
				|  |  | +    if (oldTrack) {
 | 
	
		
			
				|  |  | +      await runtime.joinedRoom?.unpublish([oldTrack])
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  |      setTrack([screenTrack as RTC.RCLocalTrack], 'screen')
 | 
	
		
			
				|  |  |      if (runtime.videoRef) {
 | 
	
		
			
				|  |  |        screenTrack?.play(runtime.videoRef)
 | 
	
	
		
			
				|  | @@ -248,6 +250,36 @@ export const shareScreenVideo = async () => {
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  /**
 | 
	
		
			
				|  |  | + * 取消屏幕共享流的访问,会导致取消屏幕共享
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +export const closeShareScreenVideo = () => {
 | 
	
		
			
				|  |  | +  const screenTrack = runtime.activeTracks.screen as RTC.RCLocalTrack
 | 
	
		
			
				|  |  | +  if (screenTrack) {
 | 
	
		
			
				|  |  | +    screenTrack.destroy()
 | 
	
		
			
				|  |  | +    runtime.screenShareStatus = false
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +  const oldTrack = runtime.activeTracks.camera as RTC.RCLocalTrack
 | 
	
		
			
				|  |  | +  if (oldTrack) {
 | 
	
		
			
				|  |  | +    setTrack([oldTrack as RTC.RCLocalTrack], 'camera')
 | 
	
		
			
				|  |  | +    if (runtime.videoRef) {
 | 
	
		
			
				|  |  | +      oldTrack.play(runtime.videoRef)
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +export const toggleShareScreenVideo = async () => {
 | 
	
		
			
				|  |  | +  if (runtime.screenShareStatus) {
 | 
	
		
			
				|  |  | +    try {
 | 
	
		
			
				|  |  | +      await ElMessageBox.confirm('是否确认取消屏幕共享?')
 | 
	
		
			
				|  |  | +      closeShareScreenVideo()
 | 
	
		
			
				|  |  | +    } catch (error) {}
 | 
	
		
			
				|  |  | +  } else {
 | 
	
		
			
				|  |  | +    shareScreenVideo()
 | 
	
		
			
				|  |  | +  }
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  |   *
 | 
	
		
			
				|  |  |   * 获取所有音频输入设备
 | 
	
		
			
				|  |  |   * @returns {Promise<void>}
 | 
	
	
		
			
				|  | @@ -567,7 +599,7 @@ export const closeDevice = async (trackType: TrackType, needPublish = true) => {
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  export const toggleDevice = async (trackType: TrackType) => {
 | 
	
		
			
				|  |  |    if (runtime.screenShareStatus) {
 | 
	
		
			
				|  |  | -    ElMessage.error('正在屏幕共享中,请先关闭屏幕共享')
 | 
	
		
			
				|  |  | +    await toggleShareScreenVideo()
 | 
	
		
			
				|  |  |      return
 | 
	
		
			
				|  |  |    }
 | 
	
		
			
				|  |  |    const track = runtime.activeTracks[trackType]
 |