import 'room_rtc_types.dart'; enum RoomRtcEngineKind { trtc } class RoomRtcEnterRoomConfig { const RoomRtcEnterRoomConfig({ required this.identity, required this.trtcSdkAppId, required this.trtcUserSig, this.throwOnError = false, }); final RoomRtcSessionIdentity identity; final int trtcSdkAppId; final String trtcUserSig; final bool throwOnError; bool get hasTrtcCredential => trtcSdkAppId > 0 && trtcUserSig.trim().isNotEmpty && identity.isValid; } class RoomRtcAnchorConfig { const RoomRtcAnchorConfig({required this.muted}); final bool muted; } class RoomRtcAudioMixingConfig { const RoomRtcAudioMixingConfig({ required this.filePath, required this.loopback, this.cycle = 1, this.startPos = 0, }); final String filePath; final bool loopback; final int cycle; final int startPos; } abstract class RoomRtcEngineAdapter { RoomRtcEngineKind get kind; bool get isInRoom; Future prewarm(); Future enterRoomAsAudience(RoomRtcEnterRoomConfig config); Future switchToAnchor(RoomRtcAnchorConfig config); Future switchToAudience(); void muteAllRemoteAudio(bool muted); Future leaveRoom(); Future release(); Future startAudioMixing(RoomRtcAudioMixingConfig config); Future pauseAudioMixing(); Future resumeAudioMixing(); Future stopAudioMixing(); Future setAudioMixingPosition(int positionMs); Future getAudioMixingPosition(); Future getAudioMixingDuration(); Future setAudioMixingVolume(int volume); }