This commit is contained in:
Ali 2020-11-27 03:49:15 +04:00
parent 9661b1fae6
commit 0d6b37ee29
8 changed files with 19 additions and 78 deletions

View File

@ -296,19 +296,20 @@ public final class PresentationGroupCallImpl: PresentationGroupCall {
return
}
if case let .estabilished(callInfo, _, _, _) = strongSelf.internalState {
/*var addedSsrc: [UInt32] = []
var removedSsrc: [UInt32] = []*/
var removedSsrc: [UInt32] = []
for (callId, update) in updates {
if callId == callInfo.id {
for participantUpdate in update.participantUpdates {
if participantUpdate.isRemoved {
removedSsrc.append(participantUpdate.ssrc)
}
}
strongSelf.participantsContext?.addUpdates(updates: [update])
}
}
/*if !addedSsrc.isEmpty {
strongSelf.callContext?.addSsrcs(ssrcs: addedSsrc)
}
if !removedSsrc.isEmpty {
strongSelf.callContext?.removeSsrcs(ssrcs: removedSsrc)
}*/
}
}
})

View File

@ -501,7 +501,7 @@ public final class VoiceChatController: ViewController {
let wasMuted = strongSelf.callState?.muteState != nil
strongSelf.callState = state
if state.muteState != nil {
if let muteState = state.muteState, !muteState.canUnmute {
if strongSelf.pushingToTalk {
strongSelf.pushingToTalk = false
strongSelf.actionButton.pressing = false

View File

@ -32,22 +32,15 @@ public final class OngoingGroupCallContext {
case connected
}
public struct MemberState: Equatable {
public var isSpeaking: Bool
}
private final class Impl {
let queue: Queue
let context: GroupCallThreadLocalContext
let sessionId = UInt32.random(in: 0 ..< UInt32(Int32.max))
var mainStreamAudioSsrc: UInt32?
var otherSsrcs: [UInt32] = []
let joinPayload = Promise<(String, UInt32)>()
let networkState = ValuePromise<NetworkState>(.connecting, ignoreRepeated: true)
let isMuted = ValuePromise<Bool>(true, ignoreRepeated: true)
let memberStates = ValuePromise<[UInt32: MemberState]>([:], ignoreRepeated: true)
let audioLevels = ValuePipe<[(UInt32, Float)]>()
let myAudioLevel = ValuePipe<Float>()
@ -118,7 +111,6 @@ public final class OngoingGroupCallContext {
guard let strongSelf = self else {
return
}
strongSelf.mainStreamAudioSsrc = ssrc
strongSelf.joinPayload.set(.single((payload, ssrc)))
}
})
@ -130,58 +122,15 @@ public final class OngoingGroupCallContext {
}
func addSsrcs(ssrcs: [UInt32]) {
if ssrcs.isEmpty {
return
}
guard let mainStreamAudioSsrc = self.mainStreamAudioSsrc else {
return
}
let mappedSsrcs = ssrcs
var otherSsrcs = self.otherSsrcs
for ssrc in mappedSsrcs {
if ssrc == mainStreamAudioSsrc {
continue
}
if !otherSsrcs.contains(ssrc) {
otherSsrcs.append(ssrc)
}
}
if self.otherSsrcs != otherSsrcs {
self.otherSsrcs = otherSsrcs
var memberStatesValue: [UInt32: MemberState] = [:]
for ssrc in otherSsrcs {
memberStatesValue[ssrc] = MemberState(isSpeaking: false)
}
self.memberStates.set(memberStatesValue)
self.context.setSsrcs(self.otherSsrcs.map { ssrc in
return ssrc as NSNumber
})
}
}
func removeSsrcs(ssrcs: [UInt32]) {
if ssrcs.isEmpty {
return
}
guard let mainStreamAudioSsrc = self.mainStreamAudioSsrc else {
return
}
var otherSsrcs = self.otherSsrcs.filter { ssrc in
return !ssrcs.contains(ssrc)
}
if self.otherSsrcs != otherSsrcs {
self.otherSsrcs = otherSsrcs
var memberStatesValue: [UInt32: MemberState] = [:]
for ssrc in otherSsrcs {
memberStatesValue[ssrc] = MemberState(isSpeaking: false)
}
self.memberStates.set(memberStatesValue)
self.context.setSsrcs(self.otherSsrcs.map { ssrc in
return ssrc as NSNumber
})
}
self.context.removeSsrcs(ssrcs.map { ssrc in
return ssrc as NSNumber
})
}
func stop() {
@ -228,18 +177,6 @@ public final class OngoingGroupCallContext {
}
}
public var memberStates: Signal<[UInt32: MemberState], NoError> {
return Signal { subscriber in
let disposable = MetaDisposable()
self.impl.with { impl in
disposable.set(impl.memberStates.get().start(next: { value in
subscriber.putNext(value)
}))
}
return disposable
}
}
public var audioLevels: Signal<[(UInt32, Float)], NoError> {
return Signal { subscriber in
let disposable = MetaDisposable()

View File

@ -164,7 +164,7 @@ typedef NS_ENUM(int32_t, GroupCallNetworkState) {
- (void)emitJoinPayload:(void (^ _Nonnull)(NSString * _Nonnull, uint32_t))completion;
- (void)setJoinResponsePayload:(NSString * _Nonnull)payload;
- (void)setSsrcs:(NSArray<NSNumber *> * _Nonnull)ssrcs;
- (void)removeSsrcs:(NSArray<NSNumber *> * _Nonnull)ssrcs;
- (void)setIsMuted:(bool)isMuted;
- (void)switchAudioOutput:(NSString * _Nonnull)deviceId;

View File

@ -1029,13 +1029,13 @@ static void (*InternalVoipLoggingFunction)(NSString *) = NULL;
}
}
- (void)setSsrcs:(NSArray<NSNumber *> * _Nonnull)ssrcs {
- (void)removeSsrcs:(NSArray<NSNumber *> * _Nonnull)ssrcs {
if (_instance) {
std::vector<uint32_t> values;
for (NSNumber *ssrc in ssrcs) {
values.push_back([ssrc unsignedIntValue]);
}
_instance->setSsrcs(values);
_instance->removeSsrcs(values);
}
}

@ -1 +1 @@
Subproject commit 9e25105d8662f54b7151070225c5866d0f0a6231
Subproject commit 1a3df12fbe943fe66df86607a5e6347a0db4cf4f

View File

@ -700,9 +700,12 @@ webrtc_sources = [
"media/engine/simulcast.cc",
"media/engine/simulcast_encoder_adapter.cc",
"media/engine/unhandled_packets_buffer.cc",
"media/engine/webrtc_media_engine.h",
"media/engine/webrtc_media_engine.cc",
"media/engine/webrtc_media_engine_defaults.cc",
"media/engine/webrtc_video_engine.h",
"media/engine/webrtc_video_engine.cc",
"media/engine/webrtc_voice_engine.h",
"media/engine/webrtc_voice_engine.cc",
"media/sctp/noop.cc",
"media/sctp/sctp_transport.cc",

@ -1 +1 @@
Subproject commit facc5cdcc8792fd1a83f39b14ce5d719c6f44625
Subproject commit 7198385cd356994e366ea325c84b34e974c9117e