yumi-flutter/lib/services/audio/room_rtc_engine_adapter.dart
2026-05-23 15:33:14 +08:00

79 lines
1.7 KiB
Dart

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, bool? publishMuted})
: publishMuted = publishMuted ?? muted;
final bool muted;
final bool publishMuted;
}
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<void> prewarm();
Future<void> enterRoomAsAudience(RoomRtcEnterRoomConfig config);
Future<bool> switchToAnchor(RoomRtcAnchorConfig config);
Future<bool> switchToAudience();
void muteAllRemoteAudio(bool muted);
Future<void> leaveRoom();
Future<void> release();
Future<void> startAudioMixing(RoomRtcAudioMixingConfig config);
Future<void> pauseAudioMixing();
Future<void> resumeAudioMixing();
Future<void> stopAudioMixing();
Future<void> setAudioMixingPosition(int positionMs);
Future<int> getAudioMixingPosition();
Future<int> getAudioMixingDuration();
Future<void> setAudioMixingVolume(int volume);
}