mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-12-23 14:45:21 +00:00
Video call improvements
This commit is contained in:
@@ -72,7 +72,7 @@ private enum DebugControllerEntry: ItemListNodeEntry {
|
|||||||
case alternativeFolderTabs(Bool)
|
case alternativeFolderTabs(Bool)
|
||||||
case playerEmbedding(Bool)
|
case playerEmbedding(Bool)
|
||||||
case playlistPlayback(Bool)
|
case playlistPlayback(Bool)
|
||||||
case enableHighBitrateVideoCalls(Bool)
|
case preferredVideoCodec(Int, String, String?, Bool)
|
||||||
case hostInfo(PresentationTheme, String)
|
case hostInfo(PresentationTheme, String)
|
||||||
case versionInfo(PresentationTheme)
|
case versionInfo(PresentationTheme)
|
||||||
|
|
||||||
@@ -88,14 +88,14 @@ private enum DebugControllerEntry: ItemListNodeEntry {
|
|||||||
return DebugControllerSection.experiments.rawValue
|
return DebugControllerSection.experiments.rawValue
|
||||||
case .clearTips, .reimport, .resetData, .resetDatabase, .resetHoles, .reindexUnread, .resetBiometricsData, .optimizeDatabase, .photoPreview, .knockoutWallpaper, .alternativeFolderTabs, .playerEmbedding, .playlistPlayback:
|
case .clearTips, .reimport, .resetData, .resetDatabase, .resetHoles, .reindexUnread, .resetBiometricsData, .optimizeDatabase, .photoPreview, .knockoutWallpaper, .alternativeFolderTabs, .playerEmbedding, .playlistPlayback:
|
||||||
return DebugControllerSection.experiments.rawValue
|
return DebugControllerSection.experiments.rawValue
|
||||||
case .enableHighBitrateVideoCalls:
|
case .preferredVideoCodec:
|
||||||
return DebugControllerSection.videoExperiments.rawValue
|
return DebugControllerSection.videoExperiments.rawValue
|
||||||
case .hostInfo, .versionInfo:
|
case .hostInfo, .versionInfo:
|
||||||
return DebugControllerSection.info.rawValue
|
return DebugControllerSection.info.rawValue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var stableId: Int32 {
|
var stableId: Int {
|
||||||
switch self {
|
switch self {
|
||||||
case .sendLogs:
|
case .sendLogs:
|
||||||
return 0
|
return 0
|
||||||
@@ -147,12 +147,12 @@ private enum DebugControllerEntry: ItemListNodeEntry {
|
|||||||
return 24
|
return 24
|
||||||
case .playlistPlayback:
|
case .playlistPlayback:
|
||||||
return 25
|
return 25
|
||||||
case .enableHighBitrateVideoCalls:
|
case let .preferredVideoCodec(index, _, _, _):
|
||||||
return 26
|
return 26 + index
|
||||||
case .hostInfo:
|
case .hostInfo:
|
||||||
return 29
|
return 100
|
||||||
case .versionInfo:
|
case .versionInfo:
|
||||||
return 30
|
return 101
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -570,12 +570,12 @@ private enum DebugControllerEntry: ItemListNodeEntry {
|
|||||||
})
|
})
|
||||||
}).start()
|
}).start()
|
||||||
})
|
})
|
||||||
case let .enableHighBitrateVideoCalls(value):
|
case let .preferredVideoCodec(_, title, value, isSelected):
|
||||||
return ItemListSwitchItem(presentationData: presentationData, title: "HD Video Calls", value: value, sectionId: self.section, style: .blocks, updated: { value in
|
return ItemListCheckboxItem(presentationData: presentationData, title: title, style: .right, checked: isSelected, zeroSeparatorInsets: false, sectionId: self.section, action: {
|
||||||
let _ = arguments.sharedContext.accountManager.transaction ({ transaction in
|
let _ = arguments.sharedContext.accountManager.transaction ({ transaction in
|
||||||
transaction.updateSharedData(ApplicationSpecificSharedDataKeys.experimentalUISettings, { settings in
|
transaction.updateSharedData(ApplicationSpecificSharedDataKeys.experimentalUISettings, { settings in
|
||||||
var settings = settings as? ExperimentalUISettings ?? ExperimentalUISettings.defaultSettings
|
var settings = settings as? ExperimentalUISettings ?? ExperimentalUISettings.defaultSettings
|
||||||
settings.enableHighBitrateVideoCalls = value
|
settings.preferredVideoCodec = value
|
||||||
return settings
|
return settings
|
||||||
})
|
})
|
||||||
}).start()
|
}).start()
|
||||||
@@ -625,7 +625,18 @@ private func debugControllerEntries(presentationData: PresentationData, loggingS
|
|||||||
entries.append(.alternativeFolderTabs(experimentalSettings.foldersTabAtBottom))
|
entries.append(.alternativeFolderTabs(experimentalSettings.foldersTabAtBottom))
|
||||||
entries.append(.playerEmbedding(experimentalSettings.playerEmbedding))
|
entries.append(.playerEmbedding(experimentalSettings.playerEmbedding))
|
||||||
entries.append(.playlistPlayback(experimentalSettings.playlistPlayback))
|
entries.append(.playlistPlayback(experimentalSettings.playlistPlayback))
|
||||||
entries.append(.enableHighBitrateVideoCalls(experimentalSettings.enableHighBitrateVideoCalls))
|
|
||||||
|
let codecs: [(String, String?)] = [
|
||||||
|
("No Preference", nil),
|
||||||
|
("H265", "H265"),
|
||||||
|
("H264", "H264"),
|
||||||
|
("VP8", "VP8"),
|
||||||
|
("VP9", "VP9")
|
||||||
|
]
|
||||||
|
|
||||||
|
for i in 0 ..< codecs.count {
|
||||||
|
entries.append(.preferredVideoCodec(i, codecs[i].0, codecs[i].1, experimentalSettings.preferredVideoCodec == codecs[i].1))
|
||||||
|
}
|
||||||
|
|
||||||
if let backupHostOverride = networkSettings?.backupHostOverride {
|
if let backupHostOverride = networkSettings?.backupHostOverride {
|
||||||
entries.append(.hostInfo(presentationData.theme, "Host: \(backupHostOverride)"))
|
entries.append(.hostInfo(presentationData.theme, "Host: \(backupHostOverride)"))
|
||||||
|
|||||||
@@ -169,7 +169,7 @@ public final class PresentationCallImpl: PresentationCall {
|
|||||||
public let isOutgoing: Bool
|
public let isOutgoing: Bool
|
||||||
public var isVideo: Bool
|
public var isVideo: Bool
|
||||||
public var isVideoPossible: Bool
|
public var isVideoPossible: Bool
|
||||||
public let enableHighBitrateVideoCalls: Bool
|
public let preferredVideoCodec: String?
|
||||||
public let peer: Peer?
|
public let peer: Peer?
|
||||||
|
|
||||||
private let serializedData: String?
|
private let serializedData: String?
|
||||||
@@ -265,7 +265,7 @@ public final class PresentationCallImpl: PresentationCall {
|
|||||||
updatedNetworkType: Signal<NetworkType, NoError>,
|
updatedNetworkType: Signal<NetworkType, NoError>,
|
||||||
startWithVideo: Bool,
|
startWithVideo: Bool,
|
||||||
isVideoPossible: Bool,
|
isVideoPossible: Bool,
|
||||||
enableHighBitrateVideoCalls: Bool
|
preferredVideoCodec: String?
|
||||||
) {
|
) {
|
||||||
self.account = account
|
self.account = account
|
||||||
self.audioSession = audioSession
|
self.audioSession = audioSession
|
||||||
@@ -292,9 +292,9 @@ public final class PresentationCallImpl: PresentationCall {
|
|||||||
self.isOutgoing = isOutgoing
|
self.isOutgoing = isOutgoing
|
||||||
self.isVideo = initialState?.type == .video
|
self.isVideo = initialState?.type == .video
|
||||||
self.isVideoPossible = isVideoPossible
|
self.isVideoPossible = isVideoPossible
|
||||||
|
self.preferredVideoCodec = preferredVideoCodec
|
||||||
self.peer = peer
|
self.peer = peer
|
||||||
self.isVideo = startWithVideo
|
self.isVideo = startWithVideo
|
||||||
self.enableHighBitrateVideoCalls = enableHighBitrateVideoCalls
|
|
||||||
if self.isVideo {
|
if self.isVideo {
|
||||||
self.videoCapturer = OngoingCallVideoCapturer()
|
self.videoCapturer = OngoingCallVideoCapturer()
|
||||||
self.statePromise.set(PresentationCallState(state: isOutgoing ? .waiting : .ringing, videoState: .active, remoteVideoState: .inactive, remoteAudioState: .active, remoteBatteryLevel: .normal))
|
self.statePromise.set(PresentationCallState(state: isOutgoing ? .waiting : .ringing, videoState: .active, remoteVideoState: .inactive, remoteAudioState: .active, remoteBatteryLevel: .normal))
|
||||||
@@ -606,7 +606,7 @@ public final class PresentationCallImpl: PresentationCall {
|
|||||||
if let _ = audioSessionControl, !wasActive || previousControl == nil {
|
if let _ = audioSessionControl, !wasActive || previousControl == nil {
|
||||||
let logName = "\(id.id)_\(id.accessHash)"
|
let logName = "\(id.id)_\(id.accessHash)"
|
||||||
|
|
||||||
let ongoingContext = OngoingCallContext(account: account, callSessionManager: self.callSessionManager, internalId: self.internalId, proxyServer: proxyServer, initialNetworkType: self.currentNetworkType, updatedNetworkType: self.updatedNetworkType, serializedData: self.serializedData, dataSaving: dataSaving, derivedState: self.derivedState, key: key, isOutgoing: sessionState.isOutgoing, video: self.videoCapturer, connections: connections, maxLayer: maxLayer, version: version, allowP2P: allowsP2P, enableHighBitrateVideoCalls: self.enableHighBitrateVideoCalls, audioSessionActive: self.audioSessionActive.get(), logName: logName)
|
let ongoingContext = OngoingCallContext(account: account, callSessionManager: self.callSessionManager, internalId: self.internalId, proxyServer: proxyServer, initialNetworkType: self.currentNetworkType, updatedNetworkType: self.updatedNetworkType, serializedData: self.serializedData, dataSaving: dataSaving, derivedState: self.derivedState, key: key, isOutgoing: sessionState.isOutgoing, video: self.videoCapturer, connections: connections, maxLayer: maxLayer, version: version, allowP2P: allowsP2P, audioSessionActive: self.audioSessionActive.get(), logName: logName, preferredVideoCodec: self.preferredVideoCodec)
|
||||||
self.ongoingContext = ongoingContext
|
self.ongoingContext = ongoingContext
|
||||||
ongoingContext.setIsMuted(self.isMutedValue)
|
ongoingContext.setIsMuted(self.isMutedValue)
|
||||||
|
|
||||||
|
|||||||
@@ -314,7 +314,7 @@ public final class PresentationCallManagerImpl: PresentationCallManager {
|
|||||||
updatedNetworkType: firstState.0.networkType,
|
updatedNetworkType: firstState.0.networkType,
|
||||||
startWithVideo: firstState.2.isVideo,
|
startWithVideo: firstState.2.isVideo,
|
||||||
isVideoPossible: firstState.2.isVideoPossible,
|
isVideoPossible: firstState.2.isVideoPossible,
|
||||||
enableHighBitrateVideoCalls: experimentalSettings.enableHighBitrateVideoCalls
|
preferredVideoCodec: experimentalSettings.preferredVideoCodec
|
||||||
)
|
)
|
||||||
strongSelf.updateCurrentCall(call)
|
strongSelf.updateCurrentCall(call)
|
||||||
strongSelf.currentCallPromise.set(.single(call))
|
strongSelf.currentCallPromise.set(.single(call))
|
||||||
@@ -556,7 +556,7 @@ public final class PresentationCallManagerImpl: PresentationCallManager {
|
|||||||
updatedNetworkType: account.networkType,
|
updatedNetworkType: account.networkType,
|
||||||
startWithVideo: isVideo,
|
startWithVideo: isVideo,
|
||||||
isVideoPossible: isVideoPossible,
|
isVideoPossible: isVideoPossible,
|
||||||
enableHighBitrateVideoCalls: experimentalSettings.enableHighBitrateVideoCalls
|
preferredVideoCodec: experimentalSettings.preferredVideoCodec
|
||||||
)
|
)
|
||||||
strongSelf.updateCurrentCall(call)
|
strongSelf.updateCurrentCall(call)
|
||||||
strongSelf.currentCallPromise.set(.single(call))
|
strongSelf.currentCallPromise.set(.single(call))
|
||||||
|
|||||||
@@ -9,9 +9,9 @@ public struct ExperimentalUISettings: Equatable, PreferencesEntry {
|
|||||||
public var chatListPhotos: Bool
|
public var chatListPhotos: Bool
|
||||||
public var knockoutWallpaper: Bool
|
public var knockoutWallpaper: Bool
|
||||||
public var foldersTabAtBottom: Bool
|
public var foldersTabAtBottom: Bool
|
||||||
public var enableHighBitrateVideoCalls: Bool
|
|
||||||
public var playerEmbedding: Bool
|
public var playerEmbedding: Bool
|
||||||
public var playlistPlayback: Bool
|
public var playlistPlayback: Bool
|
||||||
|
public var preferredVideoCodec: String?
|
||||||
|
|
||||||
public static var defaultSettings: ExperimentalUISettings {
|
public static var defaultSettings: ExperimentalUISettings {
|
||||||
return ExperimentalUISettings(
|
return ExperimentalUISettings(
|
||||||
@@ -21,9 +21,9 @@ public struct ExperimentalUISettings: Equatable, PreferencesEntry {
|
|||||||
chatListPhotos: false,
|
chatListPhotos: false,
|
||||||
knockoutWallpaper: false,
|
knockoutWallpaper: false,
|
||||||
foldersTabAtBottom: false,
|
foldersTabAtBottom: false,
|
||||||
enableHighBitrateVideoCalls: false,
|
|
||||||
playerEmbedding: false,
|
playerEmbedding: false,
|
||||||
playlistPlayback: false
|
playlistPlayback: false,
|
||||||
|
preferredVideoCodec: nil
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -34,9 +34,9 @@ public struct ExperimentalUISettings: Equatable, PreferencesEntry {
|
|||||||
chatListPhotos: Bool,
|
chatListPhotos: Bool,
|
||||||
knockoutWallpaper: Bool,
|
knockoutWallpaper: Bool,
|
||||||
foldersTabAtBottom: Bool,
|
foldersTabAtBottom: Bool,
|
||||||
enableHighBitrateVideoCalls: Bool,
|
|
||||||
playerEmbedding: Bool,
|
playerEmbedding: Bool,
|
||||||
playlistPlayback: Bool
|
playlistPlayback: Bool,
|
||||||
|
preferredVideoCodec: String?
|
||||||
) {
|
) {
|
||||||
self.keepChatNavigationStack = keepChatNavigationStack
|
self.keepChatNavigationStack = keepChatNavigationStack
|
||||||
self.skipReadHistory = skipReadHistory
|
self.skipReadHistory = skipReadHistory
|
||||||
@@ -44,9 +44,9 @@ public struct ExperimentalUISettings: Equatable, PreferencesEntry {
|
|||||||
self.chatListPhotos = chatListPhotos
|
self.chatListPhotos = chatListPhotos
|
||||||
self.knockoutWallpaper = knockoutWallpaper
|
self.knockoutWallpaper = knockoutWallpaper
|
||||||
self.foldersTabAtBottom = foldersTabAtBottom
|
self.foldersTabAtBottom = foldersTabAtBottom
|
||||||
self.enableHighBitrateVideoCalls = enableHighBitrateVideoCalls
|
|
||||||
self.playerEmbedding = playerEmbedding
|
self.playerEmbedding = playerEmbedding
|
||||||
self.playlistPlayback = playlistPlayback
|
self.playlistPlayback = playlistPlayback
|
||||||
|
self.preferredVideoCodec = preferredVideoCodec
|
||||||
}
|
}
|
||||||
|
|
||||||
public init(decoder: PostboxDecoder) {
|
public init(decoder: PostboxDecoder) {
|
||||||
@@ -56,9 +56,9 @@ public struct ExperimentalUISettings: Equatable, PreferencesEntry {
|
|||||||
self.chatListPhotos = decoder.decodeInt32ForKey("chatListPhotos", orElse: 0) != 0
|
self.chatListPhotos = decoder.decodeInt32ForKey("chatListPhotos", orElse: 0) != 0
|
||||||
self.knockoutWallpaper = decoder.decodeInt32ForKey("knockoutWallpaper", orElse: 0) != 0
|
self.knockoutWallpaper = decoder.decodeInt32ForKey("knockoutWallpaper", orElse: 0) != 0
|
||||||
self.foldersTabAtBottom = decoder.decodeInt32ForKey("foldersTabAtBottom", orElse: 0) != 0
|
self.foldersTabAtBottom = decoder.decodeInt32ForKey("foldersTabAtBottom", orElse: 0) != 0
|
||||||
self.enableHighBitrateVideoCalls = decoder.decodeInt32ForKey("enableHighBitrateVideoCalls", orElse: 0) != 0
|
|
||||||
self.playerEmbedding = decoder.decodeInt32ForKey("playerEmbedding", orElse: 0) != 0
|
self.playerEmbedding = decoder.decodeInt32ForKey("playerEmbedding", orElse: 0) != 0
|
||||||
self.playlistPlayback = decoder.decodeInt32ForKey("playlistPlayback", orElse: 0) != 0
|
self.playlistPlayback = decoder.decodeInt32ForKey("playlistPlayback", orElse: 0) != 0
|
||||||
|
self.preferredVideoCodec = decoder.decodeOptionalStringForKey("preferredVideoCodec")
|
||||||
}
|
}
|
||||||
|
|
||||||
public func encode(_ encoder: PostboxEncoder) {
|
public func encode(_ encoder: PostboxEncoder) {
|
||||||
@@ -68,9 +68,11 @@ public struct ExperimentalUISettings: Equatable, PreferencesEntry {
|
|||||||
encoder.encodeInt32(self.chatListPhotos ? 1 : 0, forKey: "chatListPhotos")
|
encoder.encodeInt32(self.chatListPhotos ? 1 : 0, forKey: "chatListPhotos")
|
||||||
encoder.encodeInt32(self.knockoutWallpaper ? 1 : 0, forKey: "knockoutWallpaper")
|
encoder.encodeInt32(self.knockoutWallpaper ? 1 : 0, forKey: "knockoutWallpaper")
|
||||||
encoder.encodeInt32(self.foldersTabAtBottom ? 1 : 0, forKey: "foldersTabAtBottom")
|
encoder.encodeInt32(self.foldersTabAtBottom ? 1 : 0, forKey: "foldersTabAtBottom")
|
||||||
encoder.encodeInt32(self.enableHighBitrateVideoCalls ? 1 : 0, forKey: "enableHighBitrateVideoCalls")
|
|
||||||
encoder.encodeInt32(self.playerEmbedding ? 1 : 0, forKey: "playerEmbedding")
|
encoder.encodeInt32(self.playerEmbedding ? 1 : 0, forKey: "playerEmbedding")
|
||||||
encoder.encodeInt32(self.playlistPlayback ? 1 : 0, forKey: "playlistPlayback")
|
encoder.encodeInt32(self.playlistPlayback ? 1 : 0, forKey: "playlistPlayback")
|
||||||
|
if let preferredVideoCodec = self.preferredVideoCodec {
|
||||||
|
encoder.encodeString(preferredVideoCodec, forKey: "preferredVideoCodec")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public func isEqual(to: PreferencesEntry) -> Bool {
|
public func isEqual(to: PreferencesEntry) -> Bool {
|
||||||
|
|||||||
@@ -551,7 +551,7 @@ public final class OngoingCallContext {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
public init(account: Account, callSessionManager: CallSessionManager, internalId: CallSessionInternalId, proxyServer: ProxyServerSettings?, initialNetworkType: NetworkType, updatedNetworkType: Signal<NetworkType, NoError>, serializedData: String?, dataSaving: VoiceCallDataSaving, derivedState: VoipDerivedState, key: Data, isOutgoing: Bool, video: OngoingCallVideoCapturer?, connections: CallSessionConnectionSet, maxLayer: Int32, version: String, allowP2P: Bool, enableHighBitrateVideoCalls: Bool, audioSessionActive: Signal<Bool, NoError>, logName: String) {
|
public init(account: Account, callSessionManager: CallSessionManager, internalId: CallSessionInternalId, proxyServer: ProxyServerSettings?, initialNetworkType: NetworkType, updatedNetworkType: Signal<NetworkType, NoError>, serializedData: String?, dataSaving: VoiceCallDataSaving, derivedState: VoipDerivedState, key: Data, isOutgoing: Bool, video: OngoingCallVideoCapturer?, connections: CallSessionConnectionSet, maxLayer: Int32, version: String, allowP2P: Bool, audioSessionActive: Signal<Bool, NoError>, logName: String, preferredVideoCodec: String?) {
|
||||||
let _ = setupLogs
|
let _ = setupLogs
|
||||||
OngoingCallThreadLocalContext.applyServerConfig(serializedData)
|
OngoingCallThreadLocalContext.applyServerConfig(serializedData)
|
||||||
|
|
||||||
@@ -599,7 +599,7 @@ public final class OngoingCallContext {
|
|||||||
|
|
||||||
let context = OngoingCallThreadLocalContextWebrtc(version: version, queue: OngoingCallThreadLocalContextQueueImpl(queue: queue), proxy: voipProxyServer, networkType: ongoingNetworkTypeForTypeWebrtc(initialNetworkType), dataSaving: ongoingDataSavingForTypeWebrtc(dataSaving), derivedState: derivedState.data, key: key, isOutgoing: isOutgoing, connections: filteredConnections, maxLayer: maxLayer, allowP2P: allowP2P, logPath: logPath, sendSignalingData: { [weak callSessionManager] data in
|
let context = OngoingCallThreadLocalContextWebrtc(version: version, queue: OngoingCallThreadLocalContextQueueImpl(queue: queue), proxy: voipProxyServer, networkType: ongoingNetworkTypeForTypeWebrtc(initialNetworkType), dataSaving: ongoingDataSavingForTypeWebrtc(dataSaving), derivedState: derivedState.data, key: key, isOutgoing: isOutgoing, connections: filteredConnections, maxLayer: maxLayer, allowP2P: allowP2P, logPath: logPath, sendSignalingData: { [weak callSessionManager] data in
|
||||||
callSessionManager?.sendSignalingData(internalId: internalId, data: data)
|
callSessionManager?.sendSignalingData(internalId: internalId, data: data)
|
||||||
}, videoCapturer: video?.impl, preferredAspectRatio: Float(preferredAspectRatio), enableHighBitrateVideoCalls: enableHighBitrateVideoCalls)
|
}, videoCapturer: video?.impl, preferredAspectRatio: Float(preferredAspectRatio), preferredVideoCodec: preferredVideoCodec)
|
||||||
|
|
||||||
strongSelf.contextRef = Unmanaged.passRetained(OngoingCallThreadLocalContextHolder(context))
|
strongSelf.contextRef = Unmanaged.passRetained(OngoingCallThreadLocalContextHolder(context))
|
||||||
context.stateChanged = { [weak callSessionManager] state, videoState, remoteVideoState, remoteAudioState, remoteBatteryLevel, _ in
|
context.stateChanged = { [weak callSessionManager] state, videoState, remoteVideoState, remoteAudioState, remoteBatteryLevel, _ in
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ static_library(
|
|||||||
"tgcalls/tgcalls/legacy/**",
|
"tgcalls/tgcalls/legacy/**",
|
||||||
"tgcalls/tgcalls/platform/tdesktop/**",
|
"tgcalls/tgcalls/platform/tdesktop/**",
|
||||||
"tgcalls/tgcalls/platform/windows/**",
|
"tgcalls/tgcalls/platform/windows/**",
|
||||||
|
"tgcalls/tgcalls/platform/android/**",
|
||||||
"tgcalls/tgcalls/platform/darwin/VideoCameraCapturerMac.*",
|
"tgcalls/tgcalls/platform/darwin/VideoCameraCapturerMac.*",
|
||||||
"tgcalls/tgcalls/platform/darwin/VideoMetalViewMac.*",
|
"tgcalls/tgcalls/platform/darwin/VideoMetalViewMac.*",
|
||||||
]),
|
]),
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ objc_library(
|
|||||||
], exclude = [
|
], exclude = [
|
||||||
"tgcalls/tgcalls/legacy/**",
|
"tgcalls/tgcalls/legacy/**",
|
||||||
"tgcalls/tgcalls/platform/tdesktop/**",
|
"tgcalls/tgcalls/platform/tdesktop/**",
|
||||||
|
"tgcalls/tgcalls/platform/android/**",
|
||||||
"tgcalls/tgcalls/platform/windows/**",
|
"tgcalls/tgcalls/platform/windows/**",
|
||||||
"tgcalls/tgcalls/platform/darwin/VideoCameraCapturerMac.*",
|
"tgcalls/tgcalls/platform/darwin/VideoCameraCapturerMac.*",
|
||||||
"tgcalls/tgcalls/platform/darwin/VideoMetalViewMac.*",
|
"tgcalls/tgcalls/platform/darwin/VideoMetalViewMac.*",
|
||||||
|
|||||||
@@ -123,7 +123,7 @@ typedef NS_ENUM(int32_t, OngoingCallDataSavingWebrtc) {
|
|||||||
@property (nonatomic, copy) void (^ _Nullable stateChanged)(OngoingCallStateWebrtc, OngoingCallVideoStateWebrtc, OngoingCallRemoteVideoStateWebrtc, OngoingCallRemoteAudioStateWebrtc, OngoingCallRemoteBatteryLevelWebrtc, float);
|
@property (nonatomic, copy) void (^ _Nullable stateChanged)(OngoingCallStateWebrtc, OngoingCallVideoStateWebrtc, OngoingCallRemoteVideoStateWebrtc, OngoingCallRemoteAudioStateWebrtc, OngoingCallRemoteBatteryLevelWebrtc, float);
|
||||||
@property (nonatomic, copy) void (^ _Nullable signalBarsChanged)(int32_t);
|
@property (nonatomic, copy) void (^ _Nullable signalBarsChanged)(int32_t);
|
||||||
|
|
||||||
- (instancetype _Nonnull)initWithVersion:(NSString * _Nonnull)version queue:(id<OngoingCallThreadLocalContextQueueWebrtc> _Nonnull)queue proxy:(VoipProxyServerWebrtc * _Nullable)proxy networkType:(OngoingCallNetworkTypeWebrtc)networkType dataSaving:(OngoingCallDataSavingWebrtc)dataSaving derivedState:(NSData * _Nonnull)derivedState key:(NSData * _Nonnull)key isOutgoing:(bool)isOutgoing connections:(NSArray<OngoingCallConnectionDescriptionWebrtc *> * _Nonnull)connections maxLayer:(int32_t)maxLayer allowP2P:(BOOL)allowP2P logPath:(NSString * _Nonnull)logPath sendSignalingData:(void (^ _Nonnull)(NSData * _Nonnull))sendSignalingData videoCapturer:(OngoingCallThreadLocalContextVideoCapturer * _Nullable)videoCapturer preferredAspectRatio:(float)preferredAspectRatio enableHighBitrateVideoCalls:(bool)enableHighBitrateVideoCalls;
|
- (instancetype _Nonnull)initWithVersion:(NSString * _Nonnull)version queue:(id<OngoingCallThreadLocalContextQueueWebrtc> _Nonnull)queue proxy:(VoipProxyServerWebrtc * _Nullable)proxy networkType:(OngoingCallNetworkTypeWebrtc)networkType dataSaving:(OngoingCallDataSavingWebrtc)dataSaving derivedState:(NSData * _Nonnull)derivedState key:(NSData * _Nonnull)key isOutgoing:(bool)isOutgoing connections:(NSArray<OngoingCallConnectionDescriptionWebrtc *> * _Nonnull)connections maxLayer:(int32_t)maxLayer allowP2P:(BOOL)allowP2P logPath:(NSString * _Nonnull)logPath sendSignalingData:(void (^ _Nonnull)(NSData * _Nonnull))sendSignalingData videoCapturer:(OngoingCallThreadLocalContextVideoCapturer * _Nullable)videoCapturer preferredAspectRatio:(float)preferredAspectRatio preferredVideoCodec:(NSString * _Nullable)preferredVideoCodec;
|
||||||
|
|
||||||
- (void)beginTermination;
|
- (void)beginTermination;
|
||||||
- (void)stop:(void (^_Nullable)(NSString * _Nullable debugLog, int64_t bytesSentWifi, int64_t bytesReceivedWifi, int64_t bytesSentMobile, int64_t bytesReceivedMobile))completion;
|
- (void)stop:(void (^_Nullable)(NSString * _Nullable debugLog, int64_t bytesSentWifi, int64_t bytesReceivedWifi, int64_t bytesSentMobile, int64_t bytesReceivedMobile))completion;
|
||||||
|
|||||||
@@ -299,15 +299,21 @@ static void (*InternalVoipLoggingFunction)(NSString *) = NULL;
|
|||||||
return 92;
|
return 92;
|
||||||
}
|
}
|
||||||
|
|
||||||
+ (NSArray<NSString *> * _Nonnull)versionsWithIncludeReference:(bool)includeReference {
|
+ (NSArray<NSString *> * _Nonnull)versionsWithIncludeReference:(bool)__unused includeReference {
|
||||||
if (includeReference) {
|
return @[@"2.7.7", @"3.0.0"];
|
||||||
return @[@"2.7.7", @"2.8.8"];
|
}
|
||||||
|
|
||||||
|
+ (tgcalls::ProtocolVersion)protocolVersionFromLibraryVersion:(NSString *)version {
|
||||||
|
if ([version isEqualToString:@"2.7.7"]) {
|
||||||
|
return tgcalls::ProtocolVersion::V0;
|
||||||
|
} else if ([version isEqualToString:@"3.0.0"]) {
|
||||||
|
return tgcalls::ProtocolVersion::V1;
|
||||||
} else {
|
} else {
|
||||||
return @[@"2.7.7"];
|
return tgcalls::ProtocolVersion::V0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
- (instancetype _Nonnull)initWithVersion:(NSString * _Nonnull)version queue:(id<OngoingCallThreadLocalContextQueueWebrtc> _Nonnull)queue proxy:(VoipProxyServerWebrtc * _Nullable)proxy networkType:(OngoingCallNetworkTypeWebrtc)networkType dataSaving:(OngoingCallDataSavingWebrtc)dataSaving derivedState:(NSData * _Nonnull)derivedState key:(NSData * _Nonnull)key isOutgoing:(bool)isOutgoing connections:(NSArray<OngoingCallConnectionDescriptionWebrtc *> * _Nonnull)connections maxLayer:(int32_t)maxLayer allowP2P:(BOOL)allowP2P logPath:(NSString * _Nonnull)logPath sendSignalingData:(void (^)(NSData * _Nonnull))sendSignalingData videoCapturer:(OngoingCallThreadLocalContextVideoCapturer * _Nullable)videoCapturer preferredAspectRatio:(float)preferredAspectRatio enableHighBitrateVideoCalls:(bool)enableHighBitrateVideoCalls {
|
- (instancetype _Nonnull)initWithVersion:(NSString * _Nonnull)version queue:(id<OngoingCallThreadLocalContextQueueWebrtc> _Nonnull)queue proxy:(VoipProxyServerWebrtc * _Nullable)proxy networkType:(OngoingCallNetworkTypeWebrtc)networkType dataSaving:(OngoingCallDataSavingWebrtc)dataSaving derivedState:(NSData * _Nonnull)derivedState key:(NSData * _Nonnull)key isOutgoing:(bool)isOutgoing connections:(NSArray<OngoingCallConnectionDescriptionWebrtc *> * _Nonnull)connections maxLayer:(int32_t)maxLayer allowP2P:(BOOL)allowP2P logPath:(NSString * _Nonnull)logPath sendSignalingData:(void (^)(NSData * _Nonnull))sendSignalingData videoCapturer:(OngoingCallThreadLocalContextVideoCapturer * _Nullable)videoCapturer preferredAspectRatio:(float)preferredAspectRatio preferredVideoCodec:(NSString * _Nullable)preferredVideoCodec {
|
||||||
self = [super init];
|
self = [super init];
|
||||||
if (self != nil) {
|
if (self != nil) {
|
||||||
_version = version;
|
_version = version;
|
||||||
@@ -370,6 +376,11 @@ static void (*InternalVoipLoggingFunction)(NSString *) = NULL;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<std::string> preferredVideoCodecs;
|
||||||
|
if (preferredVideoCodec != nil) {
|
||||||
|
preferredVideoCodecs.push_back([preferredVideoCodec UTF8String]);
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<tgcalls::Endpoint> endpoints;
|
std::vector<tgcalls::Endpoint> endpoints;
|
||||||
|
|
||||||
tgcalls::Config config = {
|
tgcalls::Config config = {
|
||||||
@@ -384,7 +395,9 @@ static void (*InternalVoipLoggingFunction)(NSString *) = NULL;
|
|||||||
.logPath = "", //logPath.length == 0 ? "" : std::string(logPath.UTF8String),
|
.logPath = "", //logPath.length == 0 ? "" : std::string(logPath.UTF8String),
|
||||||
.maxApiLayer = [OngoingCallThreadLocalContextWebrtc maxLayer],
|
.maxApiLayer = [OngoingCallThreadLocalContextWebrtc maxLayer],
|
||||||
.preferredAspectRatio = preferredAspectRatio,
|
.preferredAspectRatio = preferredAspectRatio,
|
||||||
.enableHighBitrateVideo = enableHighBitrateVideoCalls
|
.enableHighBitrateVideo = true,
|
||||||
|
.preferredVideoCodecs = preferredVideoCodecs,
|
||||||
|
.protocolVersion = [OngoingCallThreadLocalContextWebrtc protocolVersionFromLibraryVersion:version]
|
||||||
};
|
};
|
||||||
|
|
||||||
auto encryptionKeyValue = std::make_shared<std::array<uint8_t, 256>>();
|
auto encryptionKeyValue = std::make_shared<std::array<uint8_t, 256>>();
|
||||||
@@ -396,7 +409,6 @@ static void (*InternalVoipLoggingFunction)(NSString *) = NULL;
|
|||||||
static dispatch_once_t onceToken;
|
static dispatch_once_t onceToken;
|
||||||
dispatch_once(&onceToken, ^{
|
dispatch_once(&onceToken, ^{
|
||||||
tgcalls::Register<tgcalls::InstanceImpl>();
|
tgcalls::Register<tgcalls::InstanceImpl>();
|
||||||
tgcalls::Register<tgcalls::InstanceImplReference>();
|
|
||||||
});
|
});
|
||||||
_tgVoip = tgcalls::Meta::Create([version UTF8String], (tgcalls::Descriptor){
|
_tgVoip = tgcalls::Meta::Create([version UTF8String], (tgcalls::Descriptor){
|
||||||
.config = config,
|
.config = config,
|
||||||
|
|||||||
Submodule submodules/TgVoipWebrtc/tgcalls updated: da1160dfbf...ef7f8b61c7
Reference in New Issue
Block a user