|
@@ -184,7 +184,7 @@ export const setVideoSrcObject = (video: HTMLVideoElement | null, mediaStreams:
|
|
|
* 发起屏幕共享
|
|
|
*/
|
|
|
export const shareScreenVideo = async () => {
|
|
|
- if (runtime.rtcClient) {
|
|
|
+ if (runtime.rtcClient && !runtime.screenShareStatus) {
|
|
|
const screenTrack = await getTrack('screen')
|
|
|
const oldTrack = runtime.activeTracks.camera as RTC.RCLocalTrack
|
|
|
// removeTrack([oldTrack], 'camera')
|
|
@@ -312,9 +312,14 @@ export const setTrack = async (tracks: RTC.RCLocalTrack[], trackType: TrackType,
|
|
|
for (const track of tracks) {
|
|
|
// @ts-ignore
|
|
|
// await runtime.mediaStreams?.addTrack(track._msTrack)
|
|
|
+ if (trackType === 'microphone') {
|
|
|
+ console.log('添加麦克风')
|
|
|
+ track.play()
|
|
|
+ }
|
|
|
runtime.activeTracks[trackType] = track
|
|
|
}
|
|
|
if (needPublish) {
|
|
|
+ // console.log('publish', runtime.joinedRoom)
|
|
|
await runtime.joinedRoom?.publish(tracks)
|
|
|
}
|
|
|
}
|
|
@@ -323,17 +328,17 @@ export const setTrack = async (tracks: RTC.RCLocalTrack[], trackType: TrackType,
|
|
|
* @param track
|
|
|
*/
|
|
|
export const removeTrack = async (tracks: RTC.RCLocalTrack[], trackType: TrackType, needPublish = true) => {
|
|
|
+ if (needPublish) {
|
|
|
+ await runtime.joinedRoom?.unpublish(tracks)
|
|
|
+ }
|
|
|
for (const track of tracks) {
|
|
|
// @ts-ignore
|
|
|
// await runtime.mediaStreams?.removeTrack(track._msTrack)
|
|
|
// runtime.activeTracks[trackType].destroy()
|
|
|
// console.log(runtime.activeTracks[trackType])
|
|
|
- track.destroy()
|
|
|
+ track?.destroy()
|
|
|
runtime.activeTracks[trackType] = null
|
|
|
}
|
|
|
- if (needPublish) {
|
|
|
- await runtime.joinedRoom?.unpublish(tracks)
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
export const joinIMRoom = async (roomId: string, type: RTC.RCLivingType, listenEvents: RTC.IRoomEventListener | null) => {
|
|
@@ -360,22 +365,24 @@ export const joinRoom = async (roomId: string, type: RTC.RCLivingType, listenEve
|
|
|
* 开始直播
|
|
|
*/
|
|
|
|
|
|
-export const startLive = async () => {
|
|
|
+export const startLive = async (resetTime = true) => {
|
|
|
if (runtime.videoStatus !== 'stream') throw Error('当前无视频流')
|
|
|
const room = runtime.joinedRoom
|
|
|
if (room) {
|
|
|
- const microphoneAudioTrack = await getTrack('microphone')
|
|
|
- const cameraVideoTrack = await getTrack('camera')
|
|
|
- await setTrack([cameraVideoTrack], 'camera')
|
|
|
- await setTrack([microphoneAudioTrack], 'microphone')
|
|
|
- const builder = await runtime.joinedRoom?.getMCUConfigBuilder()
|
|
|
- // @ts-ignore
|
|
|
- await builder.setOutputVideoRenderMode?.(RTC.MixVideoRenderMode.WHOLE)
|
|
|
- // @ts-ignore
|
|
|
- await builder.flush()
|
|
|
+ // const microphoneAudioTrack = await getTrack('microphone')
|
|
|
+ // const cameraVideoTrack = await getTrack('camera')
|
|
|
+ // await setTrack([cameraVideoTrack], 'camera')
|
|
|
+ // await setTrack([microphoneAudioTrack], 'microphone')
|
|
|
+ // const builder = await runtime.joinedRoom?.getMCUConfigBuilder()
|
|
|
+ // // @ts-ignore
|
|
|
+ // await builder.setOutputVideoRenderMode?.(RTC.MixVideoRenderMode.WHOLE)
|
|
|
+ // // @ts-ignore
|
|
|
+ // await builder.flush()
|
|
|
runtime.videoStatus = 'liveing'
|
|
|
}
|
|
|
- sessionStorage.setItem(START_LIVE_TIME, dayjs().valueOf().toString())
|
|
|
+ if (resetTime) {
|
|
|
+ sessionStorage.setItem(START_LIVE_TIME, dayjs().valueOf().toString())
|
|
|
+ }
|
|
|
sessionStorage.setItem(START_LIVE_STATUS, 'liveing')
|
|
|
}
|
|
|
|
|
@@ -484,8 +491,9 @@ export const openDevice = async (trackType: TrackType, needPublish = true) => {
|
|
|
export const closeDevice = async (trackType: TrackType, needPublish = true) => {
|
|
|
const track = runtime.activeTracks[trackType]
|
|
|
if (trackType !== 'microphone') {
|
|
|
+ // console.log('closeDevice', track)
|
|
|
+ // track?.destroy()
|
|
|
await removeTrack([track] as RTC.RCLocalTrack[], trackType, needPublish)
|
|
|
- track?.destroy()
|
|
|
} else {
|
|
|
track?.mute()
|
|
|
}
|
|
@@ -507,3 +515,10 @@ export const toggleDevice = async (trackType: TrackType) => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+export const leaveIMRoom = async () => {
|
|
|
+ if (runtime.joinedRoom) {
|
|
|
+ // @ts-ignore
|
|
|
+ await runtime.rtcClient?.leaveRoom(runtime.joinedRoom)
|
|
|
+ runtime.joinedRoom = null
|
|
|
+ }
|
|
|
+}
|