mediasfu-reactjs
Version:
mediasfu-reactjs – React 18/19 WebRTC SDK for video conferencing, webinars, broadcasts, live streaming, chat, recording, whiteboard, and AI agents. Plug-in prebuilt rooms or build fully custom UIs.
144 lines • 6.3 kB
TypeScript
/**
* Translation Consumer Switch Utilities
*
* Provides functions to switch between original audio and translated audio
* by pausing/resuming the appropriate consumers.
*
* Key concepts:
* - When a user subscribes to a translation, the original audio consumer should be paused
* - When translation stops or user unsubscribes, resume the original audio consumer
* - Translation producers are consumed via the regular pipe producer flow (newPipeProducer)
* - We just need to pause/resume the original audio consumers
* - IMPORTANT: Must respect breakout room state - don't resume audio for speakers not in our room
*
* The consumer transports array contains objects with:
* - consumerTransport: The mediasoup Transport object
* - serverConsumerTransportId: ID on the server
* - producerId: The producer being consumed
* - consumer: The mediasoup Consumer object
* - socket_: The socket used for this transport
*/
import { Transport, BreakoutParticipant, Participant, EventType } from "../@types/types";
export interface TranslationConsumerSwitchParameters {
consumerTransports: Transport[];
roomName: string;
member: string;
updateConsumerTransports: (transports: Transport[]) => void;
breakOutRoomStarted?: boolean;
breakOutRoomEnded?: boolean;
breakoutRooms?: BreakoutParticipant[][];
limitedBreakRoom?: BreakoutParticipant[];
participants?: Participant[];
ref_participants?: Participant[];
islevel?: string;
eventType?: EventType;
hostNewRoom?: number;
[key: string]: any;
}
export interface PauseOriginalProducerOptions {
originalProducerId: string;
speakerId?: string;
parameters: TranslationConsumerSwitchParameters;
}
export interface ResumeOriginalProducerOptions {
originalProducerId: string;
speakerId?: string;
parameters: TranslationConsumerSwitchParameters;
}
export type PauseOriginalProducerType = (options: PauseOriginalProducerOptions) => Promise<void>;
export type ResumeOriginalProducerType = (options: ResumeOriginalProducerOptions) => Promise<void>;
/**
* Check if a speaker is in the current user's breakout room (or main room).
* Returns true if the speaker's audio should be active (they are in our room).
*
* This mirrors the logic in resumePauseAudioStreams.ts to ensure parity:
* - In webinars: host audio is always active for non-hosts
* - In conferences: host audio depends on hostNewRoom vs current user's room
* - Regular participants: must be in the same limitedBreakRoom
*/
export declare const isSpeakerInMyBreakoutRoom: (speakerName: string, parameters: TranslationConsumerSwitchParameters) => boolean;
/**
* Pause the original audio producer consumer when switching to translation.
* This saves bandwidth by not receiving audio we won't use.
*
* NOTE: Only pauses if the speaker is in our breakout room. If they're not,
* their audio is already paused by the breakout room logic.
*/
export declare const pauseOriginalProducer: PauseOriginalProducerType;
/**
* Resume the original audio producer consumer when translation stops.
*
* NOTE: Only resumes if the speaker is in our breakout room. If they're not,
* their audio should stay paused (controlled by breakout room logic).
*/
export declare const resumeOriginalProducer: ResumeOriginalProducerType;
/**
* Check if we're currently consuming a translation for a given speaker.
* Looks for consumers that have translation metadata attached.
*/
export declare const isConsumingTranslationForSpeaker: (speakerId: string, consumerTransports: Transport[], translationProducerMap: Map<string, {
translationProducerId: string;
originalProducerId: string;
language: string;
}>) => {
consuming: boolean;
language?: string;
translationProducerId?: string;
originalProducerId?: string;
};
/**
* Get all active translation consumers from the map.
*/
export declare const getActiveTranslationConsumers: (translationProducerMap: Map<string, {
translationProducerId: string;
originalProducerId: string;
language: string;
}>, consumerTransports: Transport[]) => Array<{
speakerId: string;
translationProducerId: string;
originalProducerId: string;
language: string;
}>;
/**
* Find the original producer ID for a speaker from all audio streams.
* This is needed when we receive a translation producer and need to pause the original.
*/
export declare const findOriginalProducerForSpeaker: (speakerId: string, allAudioStreams: Array<{
producerId: string;
name?: string;
[key: string]: any;
}>) => string | null;
/**
* Handle breakout room changes for translation audio.
*
* When a user moves between breakout rooms, we need to re-evaluate
* which translation streams should be active:
* - Resume original audio for speakers now in our room (if no translation active)
* - The breakout room audio logic (resumePauseAudioStreams) will handle pausing
* speakers not in our room
*
* This function is called after breakout room updates to sync translation state.
*
* @param translationProducerMap - Map of originalProducerId → { language → translationProducerId }
* @param parameters - Consumer switch parameters including breakout room state
*/
export interface StopConsumingTranslationOptions {
speakerId: string;
language: string;
translationProducerMap: Record<string, Record<string, string>>;
parameters: TranslationConsumerSwitchParameters;
}
export type StopConsumingTranslationType = (options: StopConsumingTranslationOptions) => Promise<string | null>;
/**
* Stop consuming a translation producer and close its consumer.
* Returns the original producer ID if found, so caller can resume it.
*
* Flow:
* 1. Find the translation producer ID from the translation map
* 2. Find the consumer transport for that producer
* 3. Close the consumer (both locally and on server)
* 4. Return the original producer ID for resuming
*/
export declare const stopConsumingTranslation: StopConsumingTranslationType;
export declare const syncTranslationStateAfterBreakoutChange: (translationProducerMap: Record<string, Record<string, string>>, speakerIdByProducerId: Record<string, string>, parameters: TranslationConsumerSwitchParameters) => Promise<void>;
//# sourceMappingURL=translationConsumerSwitch.d.ts.map