Merge branch 'td/initWithStreamForGroupCall' into 'main'
fix: allow passing a WrappedMediaStream to GroupCall.enter() to use as the local user media stream See merge request famedly/company/frontend/famedlysdk!1275
This commit is contained in:
commit
970551d8cb
|
|
@ -348,13 +348,21 @@ class GroupCall {
|
|||
|
||||
/// Initializes the local user media stream.
|
||||
/// The media stream must be prepared before the group call enters.
|
||||
Future<WrappedMediaStream> initLocalStream() async {
|
||||
/// if you allow the user to configure their camera and such ahead of time,
|
||||
/// you can pass that `stream` on to this function.
|
||||
/// This allows you to configure the camera before joining the call without
|
||||
/// having to reopen the stream and possibly losing settings.
|
||||
Future<WrappedMediaStream> initLocalStream(
|
||||
{WrappedMediaStream? stream}) async {
|
||||
if (state != GroupCallState.LocalCallFeedUninitialized) {
|
||||
throw Exception('Cannot initialize local call feed in the $state state.');
|
||||
}
|
||||
|
||||
setState(GroupCallState.InitializingLocalCallFeed);
|
||||
|
||||
WrappedMediaStream localWrappedMediaStream;
|
||||
|
||||
if (stream == null) {
|
||||
MediaStream stream;
|
||||
|
||||
try {
|
||||
|
|
@ -366,7 +374,7 @@ class GroupCall {
|
|||
}
|
||||
|
||||
final userId = client.userID;
|
||||
final newStream = WrappedMediaStream(
|
||||
localWrappedMediaStream = WrappedMediaStream(
|
||||
renderer: voip.delegate.createRenderer(),
|
||||
stream: stream,
|
||||
userId: userId!,
|
||||
|
|
@ -378,14 +386,17 @@ class GroupCall {
|
|||
isWeb: voip.delegate.isWeb,
|
||||
isGroupCall: true,
|
||||
);
|
||||
} else {
|
||||
localWrappedMediaStream = stream;
|
||||
}
|
||||
|
||||
localUserMediaStream = newStream;
|
||||
localUserMediaStream = localWrappedMediaStream;
|
||||
await localUserMediaStream!.initialize();
|
||||
await addUserMediaStream(newStream);
|
||||
await addUserMediaStream(localWrappedMediaStream);
|
||||
|
||||
setState(GroupCallState.LocalCallFeedInitialized);
|
||||
|
||||
return newStream;
|
||||
return localWrappedMediaStream;
|
||||
}
|
||||
|
||||
Future<void> updateAudioDevice() async {
|
||||
|
|
@ -406,16 +417,15 @@ class GroupCall {
|
|||
}
|
||||
|
||||
/// enter the group call.
|
||||
Future<void> enter() async {
|
||||
Future<void> enter({WrappedMediaStream? stream}) async {
|
||||
if (!(state == GroupCallState.LocalCallFeedUninitialized ||
|
||||
state == GroupCallState.LocalCallFeedInitialized)) {
|
||||
throw Exception('Cannot enter call in the $state state');
|
||||
}
|
||||
|
||||
if (state == GroupCallState.LocalCallFeedUninitialized) {
|
||||
await initLocalStream();
|
||||
await initLocalStream(stream: stream);
|
||||
}
|
||||
|
||||
await _addParticipant(
|
||||
(await room.requestUser(client.userID!, ignoreErrors: true))!);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue