mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
WIP
This commit is contained in:
parent
9661b1fae6
commit
0d6b37ee29
@ -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)
|
||||
}*/
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
|
@ -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
|
||||
|
@ -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,59 +122,16 @@ 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
|
||||
self.context.removeSsrcs(ssrcs.map { ssrc in
|
||||
return ssrc as NSNumber
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func stop() {
|
||||
self.context.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()
|
||||
|
@ -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;
|
||||
|
@ -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
|
3
third-party/webrtc/BUILD
vendored
3
third-party/webrtc/BUILD
vendored
@ -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",
|
||||
|
2
third-party/webrtc/webrtc-ios
vendored
2
third-party/webrtc/webrtc-ios
vendored
@ -1 +1 @@
|
||||
Subproject commit facc5cdcc8792fd1a83f39b14ce5d719c6f44625
|
||||
Subproject commit 7198385cd356994e366ea325c84b34e974c9117e
|
Loading…
x
Reference in New Issue
Block a user