|
@@ -22,6 +22,8 @@ type DeviceStatus = {
|
|
}
|
|
}
|
|
|
|
|
|
const runtime = reactive({
|
|
const runtime = reactive({
|
|
|
|
+ /** 房间id */
|
|
|
|
+ roomUid: 'LIVE-2112263-12345',
|
|
/** IM连接状态 */
|
|
/** IM连接状态 */
|
|
imConnectStatus: 'connecting' as imConnectStatus,
|
|
imConnectStatus: 'connecting' as imConnectStatus,
|
|
// 屏幕分享状态
|
|
// 屏幕分享状态
|
|
@@ -181,12 +183,20 @@ export const shareScreenVideo = async () => {
|
|
if (runtime.rtcClient) {
|
|
if (runtime.rtcClient) {
|
|
const screenTrack = await getTrack('screen')
|
|
const screenTrack = await getTrack('screen')
|
|
const oldTrack = runtime.activeTracks.camera as RTC.RCLocalTrack
|
|
const oldTrack = runtime.activeTracks.camera as RTC.RCLocalTrack
|
|
- removeTrack([oldTrack], 'camera')
|
|
|
|
|
|
+ // removeTrack([oldTrack], 'camera')
|
|
|
|
+ runtime.joinedRoom?.unpublish([oldTrack])
|
|
setTrack([screenTrack as RTC.RCLocalTrack], 'screen')
|
|
setTrack([screenTrack as RTC.RCLocalTrack], 'screen')
|
|
|
|
+ if (runtime.videoRef) {
|
|
|
|
+ screenTrack.play(runtime.videoRef)
|
|
|
|
+ }
|
|
screenTrack?.on(RTC.RCLocalTrack.EVENT_LOCAL_TRACK_END, (track: RTC.RCLocalTrack) => {
|
|
screenTrack?.on(RTC.RCLocalTrack.EVENT_LOCAL_TRACK_END, (track: RTC.RCLocalTrack) => {
|
|
runtime.screenShareStatus = false
|
|
runtime.screenShareStatus = false
|
|
- removeTrack([track], 'screen')
|
|
|
|
|
|
+ track.destroy()
|
|
|
|
+ // removeTrack([track], 'screen')
|
|
setTrack([oldTrack as RTC.RCLocalTrack], 'camera')
|
|
setTrack([oldTrack as RTC.RCLocalTrack], 'camera')
|
|
|
|
+ if (runtime.videoRef) {
|
|
|
|
+ oldTrack.play(runtime.videoRef)
|
|
|
|
+ }
|
|
// setVideoSrcObject(runtime.videoRef, this.mediaStreams)
|
|
// setVideoSrcObject(runtime.videoRef, this.mediaStreams)
|
|
})
|
|
})
|
|
|
|
|
|
@@ -292,7 +302,7 @@ export const removeTrack = async (tracks: RTC.RCLocalTrack[], trackType: TrackTy
|
|
// await runtime.mediaStreams?.removeTrack(track._msTrack)
|
|
// await runtime.mediaStreams?.removeTrack(track._msTrack)
|
|
// runtime.activeTracks[trackType].destroy()
|
|
// runtime.activeTracks[trackType].destroy()
|
|
// console.log(runtime.activeTracks[trackType])
|
|
// console.log(runtime.activeTracks[trackType])
|
|
- // track.destroy()
|
|
|
|
|
|
+ track.destroy()
|
|
runtime.activeTracks[trackType] = null
|
|
runtime.activeTracks[trackType] = null
|
|
}
|
|
}
|
|
if (needPublish) {
|
|
if (needPublish) {
|
|
@@ -335,7 +345,13 @@ export const startLive = async () => {
|
|
*/
|
|
*/
|
|
export const closeLive = async () => {
|
|
export const closeLive = async () => {
|
|
// removeMedia(runtime.mediaStreams, runtime.mediaStreamTrack)
|
|
// removeMedia(runtime.mediaStreams, runtime.mediaStreamTrack)
|
|
- // request.post('')
|
|
|
|
|
|
+ await request.post('/api-im/user/statusImUser', {
|
|
|
|
+ data: {
|
|
|
|
+ os: 'PC',
|
|
|
|
+ status: 2,
|
|
|
|
+ userId: state.user?.id,
|
|
|
|
+ }
|
|
|
|
+ })
|
|
runtime.videoStatus = 'stopped'
|
|
runtime.videoStatus = 'stopped'
|
|
for (const key in runtime.activeTracks) {
|
|
for (const key in runtime.activeTracks) {
|
|
if (Object.prototype.hasOwnProperty.call(runtime.activeTracks, key)) {
|
|
if (Object.prototype.hasOwnProperty.call(runtime.activeTracks, key)) {
|
|
@@ -351,9 +367,14 @@ export const closeLive = async () => {
|
|
* 同步点赞数量
|
|
* 同步点赞数量
|
|
*/
|
|
*/
|
|
export const loopSyncLike = async () => {
|
|
export const loopSyncLike = async () => {
|
|
- if (runtime.likeCount !== runtime.lastLikeCount) {
|
|
|
|
|
|
+ if (runtime.likeCount !== runtime.lastLikeCount || runtime.likeCount === 0) {
|
|
try {
|
|
try {
|
|
- await request.post('/api-web/imLiveBroadcastRoom/syncLike', {})
|
|
|
|
|
|
+ await request.get('/api-web/imLiveBroadcastRoom/syncLike', {
|
|
|
|
+ params: {
|
|
|
|
+ likeNum: runtime.likeCount,
|
|
|
|
+ roomUid: runtime.roomUid,
|
|
|
|
+ }
|
|
|
|
+ })
|
|
runtime.lastLikeCount = runtime.likeCount
|
|
runtime.lastLikeCount = runtime.likeCount
|
|
} catch (error) {}
|
|
} catch (error) {}
|
|
}
|
|
}
|
|
@@ -401,22 +422,30 @@ export const sendMessage = async (msg: any, type: SendMessageType = 'text') => {
|
|
message = new MessageSeatResponse(msg)
|
|
message = new MessageSeatResponse(msg)
|
|
}
|
|
}
|
|
if (!message) return
|
|
if (!message) return
|
|
- console.log(msg)
|
|
|
|
|
|
+ console.log(message)
|
|
await RongIMLib.sendMessage(conversation, message)
|
|
await RongIMLib.sendMessage(conversation, message)
|
|
}
|
|
}
|
|
|
|
|
|
export const openDevice = async (trackType: TrackType, needPublish = true) => {
|
|
export const openDevice = async (trackType: TrackType, needPublish = true) => {
|
|
- const track = await getTrack(trackType)
|
|
|
|
- await setTrack([track], trackType, needPublish)
|
|
|
|
- if (runtime.videoRef) {
|
|
|
|
- track.play(runtime.videoRef)
|
|
|
|
|
|
+ if (trackType === 'microphone' && runtime.activeTracks[trackType]) {
|
|
|
|
+ runtime.activeTracks[trackType]?.unmute()
|
|
|
|
+ } else {
|
|
|
|
+ const track = await getTrack(trackType)
|
|
|
|
+ await setTrack([track], trackType, needPublish)
|
|
|
|
+ if (runtime.videoRef) {
|
|
|
|
+ track.play(runtime.videoRef)
|
|
|
|
+ }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
export const closeDevice = async (trackType: TrackType, needPublish = true) => {
|
|
export const closeDevice = async (trackType: TrackType, needPublish = true) => {
|
|
const track = runtime.activeTracks[trackType]
|
|
const track = runtime.activeTracks[trackType]
|
|
- await removeTrack([track] as RTC.RCLocalTrack[], trackType, needPublish)
|
|
|
|
- track?.destroy()
|
|
|
|
|
|
+ if (trackType !== 'microphone') {
|
|
|
|
+ await removeTrack([track] as RTC.RCLocalTrack[], trackType, needPublish)
|
|
|
|
+ track?.destroy()
|
|
|
|
+ } else {
|
|
|
|
+ track?.mute()
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
export const toggleDevice = async (trackType: TrackType) => {
|
|
export const toggleDevice = async (trackType: TrackType) => {
|