Check for existing track before creating one.

Signed-off-by: Timo K <toger5@hotmail.de>
This commit is contained in:
Timo K
2023-09-18 10:07:51 +02:00
parent b78b45f9e7
commit 75b9f3fbf6

View File

@@ -17,8 +17,10 @@ limitations under the License.
import { import {
AudioCaptureOptions, AudioCaptureOptions,
ConnectionState, ConnectionState,
LocalTrackPublication,
Room, Room,
RoomEvent, RoomEvent,
Track,
} from "livekit-client"; } from "livekit-client";
import { useCallback, useEffect, useRef, useState } from "react"; import { useCallback, useEffect, useRef, useState } from "react";
import { logger } from "matrix-js-sdk/src/logger"; import { logger } from "matrix-js-sdk/src/logger";
@@ -54,16 +56,24 @@ async function doConnect(
audioOptions: AudioCaptureOptions audioOptions: AudioCaptureOptions
): Promise<void> { ): Promise<void> {
await livekitRoom!.connect(sfuConfig!.url, sfuConfig!.jwt); await livekitRoom!.connect(sfuConfig!.url, sfuConfig!.jwt);
const audioTracks = await livekitRoom!.localParticipant.createTracks({ const hasMicrofonTrack = Array.from(
audio: audioOptions, livekitRoom?.localParticipant.audioTracks.values()
).some((track: LocalTrackPublication) => {
return track.options?.source == Track.Source.Microphone;
}); });
if (audioTracks.length < 1) { // We create a track in case there isn't any.
logger.info("Tried to pre-create local audio track but got no tracks"); if (!hasMicrofonTrack) {
return; const audioTracks = await livekitRoom!.localParticipant.createTracks({
} audio: audioOptions,
if (!audioEnabled) await audioTracks[0].mute(); });
if (audioTracks.length < 1) {
logger.info("Tried to pre-create local audio track but got no tracks");
return;
}
if (!audioEnabled) await audioTracks[0].mute();
await livekitRoom?.localParticipant.publishTrack(audioTracks[0]); await livekitRoom?.localParticipant.publishTrack(audioTracks[0]);
}
} }
export function useECConnectionState( export function useECConnectionState(