|
@@ -9,6 +9,12 @@ type imConnectStatus = 'connecting' | 'connected' | 'disconnect'
|
|
|
|
|
|
type VideoStatus = 'init' | 'stream' | 'liveing' | 'stopped' | 'error' | 'loading'
|
|
|
|
|
|
+type TrackType = 'microphone' | 'camera' | 'screen'
|
|
|
+
|
|
|
+type ActiveTracks = {
|
|
|
+ [key in TrackType]: RTC.RCLocalTrack | null
|
|
|
+}
|
|
|
+
|
|
|
const runtime = reactive({
|
|
|
/** IM连接状态 */
|
|
|
imConnectStatus: 'connecting' as imConnectStatus,
|
|
@@ -39,7 +45,7 @@ const runtime = reactive({
|
|
|
// 上一次点赞数量
|
|
|
lastLikeCount: 0,
|
|
|
/** 当前活跃的数据流 */
|
|
|
- // activeTracks null as RTC.RCLiveStream | null,
|
|
|
+ activeTracks: {} as ActiveTracks,
|
|
|
})
|
|
|
|
|
|
export default runtime
|
|
@@ -75,7 +81,9 @@ const Events = RongIMLib.Events
|
|
|
})
|
|
|
|
|
|
for (const Message of Object.values(RestMessage)) {
|
|
|
- RongIMLib.addEventListener(Message, () => {
|
|
|
+ RongIMLib.addEventListener(Message, (evt: any) => {
|
|
|
+ console.log(Message, evt)
|
|
|
+ // chatroomDestroyed
|
|
|
event.emit(Message, {$EventMessage: null})
|
|
|
})
|
|
|
}
|
|
@@ -128,11 +136,13 @@ export const setVideoSrcObject = (video: HTMLVideoElement | null, mediaStreams:
|
|
|
export const shareScreenVideo = async () => {
|
|
|
if (runtime.rtcClient) {
|
|
|
const screenTrack = await getTrack('screen')
|
|
|
- console.log(screenTrack)
|
|
|
- setTrack([screenTrack as RTC.RCLocalTrack])
|
|
|
+ const oldTrack = runtime.activeTracks.camera as RTC.RCLocalTrack
|
|
|
+ removeTrack([oldTrack], 'camera')
|
|
|
+ setTrack([screenTrack as RTC.RCLocalTrack], 'screen')
|
|
|
screenTrack?.on(RTC.RCLocalTrack.EVENT_LOCAL_TRACK_END, (track: RTC.RCLocalTrack) => {
|
|
|
runtime.screenShareStatus = false
|
|
|
- console.log('end')
|
|
|
+ removeTrack([track], 'screen')
|
|
|
+ setTrack([oldTrack as RTC.RCLocalTrack], 'camera')
|
|
|
// setVideoSrcObject(runtime.videoRef, this.mediaStreams)
|
|
|
})
|
|
|
|
|
@@ -184,7 +194,7 @@ type TrackResult = {
|
|
|
track: RTC.RCMicphoneAudioTrack | RTC.RCCameraVideoTrack | RTC.RCScreenVideoTrack | undefined
|
|
|
}
|
|
|
|
|
|
-export const getTrack = async (trackType: 'microphone' | 'camera' | 'screen'): Promise<RTC.RCLocalTrack> => {
|
|
|
+export const getTrack = async (trackType: TrackType): Promise<RTC.RCLocalTrack> => {
|
|
|
let res: TrackResult | undefined
|
|
|
let Track: RTC.RCLocalTrack | null = null
|
|
|
if (trackType === 'microphone') {
|
|
@@ -213,23 +223,25 @@ export const getTrack = async (trackType: 'microphone' | 'camera' | 'screen'): P
|
|
|
* 添加视频流,会同步修改当先视频与推送的流
|
|
|
* @param track
|
|
|
*/
|
|
|
-export const setTrack = (tracks: [RTC.RCLocalTrack]) => {
|
|
|
+export const setTrack = async (tracks: RTC.RCLocalTrack[], trackType: TrackType) => {
|
|
|
for (const track of tracks) {
|
|
|
// @ts-ignore
|
|
|
- runtime.mediaStreams?.addTrack(track._msTrack)
|
|
|
+ await runtime.mediaStreams?.addTrack(track._msTrack)
|
|
|
+ runtime.activeTracks[trackType] = track
|
|
|
}
|
|
|
- runtime.joinedRoom?.publish(tracks)
|
|
|
+ await runtime.joinedRoom?.publish(tracks)
|
|
|
}
|
|
|
/**
|
|
|
* 删除视频流,会同步修改当先视频与推送的流
|
|
|
* @param track
|
|
|
*/
|
|
|
-export const removeTrack = (tracks: [RTC.RCLocalTrack]) => {
|
|
|
+export const removeTrack = async (tracks: RTC.RCLocalTrack[], trackType: TrackType) => {
|
|
|
for (const track of tracks) {
|
|
|
// @ts-ignore
|
|
|
- runtime.mediaStreams?.removeTrack(track._msTrack)
|
|
|
+ await runtime.mediaStreams?.removeTrack(track._msTrack)
|
|
|
+ runtime.activeTracks[trackType] = null
|
|
|
}
|
|
|
- runtime.joinedRoom?.unpublish(tracks)
|
|
|
+ await runtime.joinedRoom?.unpublish(tracks)
|
|
|
}
|
|
|
|
|
|
export const joinRoom = async (roomId: string, type: RTC.RCLivingType, listenEvents: RTC.IRoomEventListener | null) => {
|