Minor refactoring & clean up WebRTC constraints

pull/560/head
Niels Andriesse 3 years ago
parent b54cd3b026
commit 0749510f4e

@ -157,7 +157,7 @@
B6FE7EB71ADD62FA00A6D22F /* PushKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6FE7EB61ADD62FA00A6D22F /* PushKit.framework */; };
B8041A9525C8FA1D003C2166 /* MediaLoaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8041A9425C8FA1D003C2166 /* MediaLoaderView.swift */; };
B8041AA725C90927003C2166 /* TypingIndicatorCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8041AA625C90927003C2166 /* TypingIndicatorCell.swift */; };
B806ECA126C4A7E4008BDA44 /* CallManager+UI.swift in Sources */ = {isa = PBXBuildFile; fileRef = B806ECA026C4A7E4008BDA44 /* CallManager+UI.swift */; };
B806ECA126C4A7E4008BDA44 /* WebRTCWrapper+UI.swift in Sources */ = {isa = PBXBuildFile; fileRef = B806ECA026C4A7E4008BDA44 /* WebRTCWrapper+UI.swift */; };
B80A579F23DFF1F300876683 /* NewClosedGroupVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B80A579E23DFF1F300876683 /* NewClosedGroupVC.swift */; };
B80F469A26C63DD000DCE243 /* RoomInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = B80F469926C63DD000DCE243 /* RoomInfo.swift */; };
B817AD9A26436593009DF825 /* SimplifiedConversationCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B817AD9926436593009DF825 /* SimplifiedConversationCell.swift */; };
@ -255,7 +255,7 @@
B8B558F326C4CA4600693325 /* TestCallConfig.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8B558F226C4CA4600693325 /* TestCallConfig.swift */; };
B8B558FB26C4D25C00693325 /* WebSocket.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8B558FA26C4D25C00693325 /* WebSocket.swift */; };
B8B558FD26C4D35400693325 /* TestCallServer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8B558FC26C4D35400693325 /* TestCallServer.swift */; };
B8B558FF26C4E05E00693325 /* CallManager+MessageHandling.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8B558FE26C4E05E00693325 /* CallManager+MessageHandling.swift */; };
B8B558FF26C4E05E00693325 /* WebRTCWrapper+MessageHandling.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8B558FE26C4E05E00693325 /* WebRTCWrapper+MessageHandling.swift */; };
B8B5590126C4E2A400693325 /* SignalingMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8B5590026C4E2A400693325 /* SignalingMessage.swift */; };
B8BB82A5238F627000BA5194 /* HomeVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8BB82A4238F627000BA5194 /* HomeVC.swift */; };
B8BC00C0257D90E30032E807 /* General.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8BC00BF257D90E30032E807 /* General.swift */; };
@ -278,7 +278,7 @@
B8D64FCB25BA78A90029CFC0 /* SignalUtilitiesKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C33FD9AB255A548A00E217F9 /* SignalUtilitiesKit.framework */; };
B8D84EA325DF745A005A043E /* LinkPreviewState.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8D84EA225DF745A005A043E /* LinkPreviewState.swift */; };
B8D84ECF25E3108A005A043E /* ExpandingAttachmentsButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8D84ECE25E3108A005A043E /* ExpandingAttachmentsButton.swift */; };
B8DE1FB426C22F2F0079C9CE /* CallManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8DE1FB326C22F2F0079C9CE /* CallManager.swift */; };
B8DE1FB426C22F2F0079C9CE /* WebRTCWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8DE1FB326C22F2F0079C9CE /* WebRTCWrapper.swift */; };
B8DE1FB626C22FCB0079C9CE /* CallMessage.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8DE1FB526C22FCB0079C9CE /* CallMessage.swift */; };
B8EB20EE2640F28000773E52 /* VisibleMessage+OpenGroupInvitation.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8EB20ED2640F28000773E52 /* VisibleMessage+OpenGroupInvitation.swift */; };
B8EB20F02640F7F000773E52 /* OpenGroupInvitationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8EB20EF2640F7F000773E52 /* OpenGroupInvitationView.swift */; };
@ -1154,7 +1154,7 @@
B6FE7EB61ADD62FA00A6D22F /* PushKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PushKit.framework; path = System/Library/Frameworks/PushKit.framework; sourceTree = SDKROOT; };
B8041A9425C8FA1D003C2166 /* MediaLoaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaLoaderView.swift; sourceTree = "<group>"; };
B8041AA625C90927003C2166 /* TypingIndicatorCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TypingIndicatorCell.swift; sourceTree = "<group>"; };
B806ECA026C4A7E4008BDA44 /* CallManager+UI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CallManager+UI.swift"; sourceTree = "<group>"; };
B806ECA026C4A7E4008BDA44 /* WebRTCWrapper+UI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WebRTCWrapper+UI.swift"; sourceTree = "<group>"; };
B80A579E23DFF1F300876683 /* NewClosedGroupVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewClosedGroupVC.swift; sourceTree = "<group>"; };
B80F469926C63DD000DCE243 /* RoomInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RoomInfo.swift; sourceTree = "<group>"; };
B817AD9926436593009DF825 /* SimplifiedConversationCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimplifiedConversationCell.swift; sourceTree = "<group>"; };
@ -1233,7 +1233,7 @@
B8B558F226C4CA4600693325 /* TestCallConfig.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestCallConfig.swift; sourceTree = "<group>"; };
B8B558FA26C4D25C00693325 /* WebSocket.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebSocket.swift; sourceTree = "<group>"; };
B8B558FC26C4D35400693325 /* TestCallServer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestCallServer.swift; sourceTree = "<group>"; };
B8B558FE26C4E05E00693325 /* CallManager+MessageHandling.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CallManager+MessageHandling.swift"; sourceTree = "<group>"; };
B8B558FE26C4E05E00693325 /* WebRTCWrapper+MessageHandling.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "WebRTCWrapper+MessageHandling.swift"; sourceTree = "<group>"; };
B8B5590026C4E2A400693325 /* SignalingMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignalingMessage.swift; sourceTree = "<group>"; };
B8B5BCEB2394D869003823C9 /* Button.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Button.swift; sourceTree = "<group>"; };
B8BAC75B2695645400EA1759 /* hr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hr; path = hr.lproj/Localizable.strings; sourceTree = "<group>"; };
@ -1272,7 +1272,7 @@
B8D8F1BC25661C6F0092EF10 /* Storage+OnionRequests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Storage+OnionRequests.swift"; sourceTree = "<group>"; };
B8D8F1EF256621180092EF10 /* MessageSender+Convenience.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = "MessageSender+Convenience.swift"; path = "../../SignalUtilitiesKit/Messaging/Sending & Receiving/MessageSender+Convenience.swift"; sourceTree = "<group>"; };
B8DE1FAF26C228780079C9CE /* SignalRingRTC.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SignalRingRTC.framework; path = Dependencies/SignalRingRTC.framework; sourceTree = "<group>"; };
B8DE1FB326C22F2F0079C9CE /* CallManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallManager.swift; sourceTree = "<group>"; };
B8DE1FB326C22F2F0079C9CE /* WebRTCWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebRTCWrapper.swift; sourceTree = "<group>"; };
B8DE1FB526C22FCB0079C9CE /* CallMessage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CallMessage.swift; sourceTree = "<group>"; };
B8EB20E6263F7E4B00773E52 /* sk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = sk; path = sk.lproj/Localizable.strings; sourceTree = "<group>"; };
B8EB20ED2640F28000773E52 /* VisibleMessage+OpenGroupInvitation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "VisibleMessage+OpenGroupInvitation.swift"; sourceTree = "<group>"; };
@ -2386,9 +2386,9 @@
isa = PBXGroup;
children = (
B877E24026CA11170007970A /* Temp */,
B8DE1FB326C22F2F0079C9CE /* CallManager.swift */,
B806ECA026C4A7E4008BDA44 /* CallManager+UI.swift */,
B8B558FE26C4E05E00693325 /* CallManager+MessageHandling.swift */,
B8DE1FB326C22F2F0079C9CE /* WebRTCWrapper.swift */,
B806ECA026C4A7E4008BDA44 /* WebRTCWrapper+UI.swift */,
B8B558FE26C4E05E00693325 /* WebRTCWrapper+MessageHandling.swift */,
);
path = Calls;
sourceTree = "<group>";
@ -4702,7 +4702,7 @@
C352A32F2557549C00338F3E /* NotifyPNServerJob.swift in Sources */,
7B4C75CB26B37E0F0000AC89 /* UnsendRequest.swift in Sources */,
C300A5F22554B09800555489 /* MessageSender.swift in Sources */,
B8B558FF26C4E05E00693325 /* CallManager+MessageHandling.swift in Sources */,
B8B558FF26C4E05E00693325 /* WebRTCWrapper+MessageHandling.swift in Sources */,
C3C2A74D2553A39700C340D1 /* VisibleMessage.swift in Sources */,
C32C5AAD256DBE8F003C73A2 /* TSInfoMessage.m in Sources */,
C32C5A13256DB7A5003C73A2 /* PushNotificationAPI.swift in Sources */,
@ -4740,7 +4740,7 @@
B8856ECE256F1E58001CE70E /* OWSPreferences.m in Sources */,
C3C2A7842553AAF300C340D1 /* SNProto.swift in Sources */,
C32C5DC0256DD743003C73A2 /* Poller.swift in Sources */,
B8DE1FB426C22F2F0079C9CE /* CallManager.swift in Sources */,
B8DE1FB426C22F2F0079C9CE /* WebRTCWrapper.swift in Sources */,
C3C2A7682553A3D900C340D1 /* VisibleMessage+Contact.swift in Sources */,
C3A3A171256E1D25004D228D /* SSKReachabilityManager.swift in Sources */,
B8DE1FB626C22FCB0079C9CE /* CallMessage.swift in Sources */,
@ -4825,7 +4825,7 @@
C32C5FD6256E0346003C73A2 /* Notification+Thread.swift in Sources */,
C3BBE0C72554F1570050F1E3 /* FixedWidthInteger+BigEndian.swift in Sources */,
B8B5590126C4E2A400693325 /* SignalingMessage.swift in Sources */,
B806ECA126C4A7E4008BDA44 /* CallManager+UI.swift in Sources */,
B806ECA126C4A7E4008BDA44 /* WebRTCWrapper+UI.swift in Sources */,
C32C5C88256DD0D2003C73A2 /* Storage+Messaging.swift in Sources */,
C32C59C7256DB41F003C73A2 /* TSThread.m in Sources */,
C300A5B22554AF9800555489 /* VisibleMessage+Profile.swift in Sources */,

@ -613,6 +613,7 @@ import PromiseKit
case .available:
Logger.verbose("CloudKit access okay.")
resolver.fulfill(())
default: preconditionFailure()
}
}
return promise

@ -1,6 +1,6 @@
import WebRTC
extension CallVCV2 : CallManagerDelegate {
extension CallVCV2 : WebRTCWrapperDelegate {
/// Invoked by `CallManager` upon initiating or accepting a call. This method sends the SDP to the other
/// party before streaming starts.

@ -1,7 +1,7 @@
extension CallVCV2 : WebSocketDelegate {
func webSocketDidConnect(_ webSocket: WebSocket) {
func handleWebSocketConnected() {
guard let room = room else { return }
let json = [
"cmd" : "register",
@ -10,18 +10,18 @@ extension CallVCV2 : WebSocketDelegate {
]
guard let data = try? JSONSerialization.data(withJSONObject: json, options: [ .prettyPrinted ]) else { return }
print("[Calls] Web socket connected. Sending: \(json).")
webSocket.send(data)
socket?.send(data)
print("[Calls] Is initiator: \(room.isInitiator).")
if room.isInitiator {
callManager.initiateCall().retainUntilComplete()
callManager.offer().retainUntilComplete()
}
}
func webSocketDidDisconnect(_ webSocket: WebSocket) {
webSocket.delegate = nil
func handleWebSocketDisconnected() {
socket?.delegate = nil
}
func webSocket(_ webSocket: WebSocket, didReceive message: String) {
func handleWebSocketMessage(_ message: String) {
print("[Calls] Message received through web socket: \(message).")
handle([ message ])
}

@ -1,12 +1,12 @@
import WebRTC
final class CallVCV2 : UIViewController {
let roomID = "37923672515" // NOTE: You need to change this every time to ensure the room isn't full
let roomID = "37923672516" // NOTE: You need to change this every time to ensure the room isn't full
var room: RoomInfo?
var socket: WebSocket?
lazy var callManager: CallManager = {
let result = CallManager()
lazy var callManager: WebRTCWrapper = {
let result = WebRTCWrapper()
result.delegate = self
return result
}()
@ -85,9 +85,9 @@ final class CallVCV2 : UIViewController {
messages.forEach { message in
let signalingMessage = SignalingMessage.from(message: message)
switch signalingMessage {
case .candidate(let candidate): callManager.handleCandidateMessage(candidate)
case .answer(let answer): callManager.handleRemoteDescription(answer)
case .offer(let offer): callManager.handleRemoteDescription(offer)
case .candidate(let candidate): callManager.handleICECandidate(candidate)
case .answer(let answer): callManager.handleRemoteSDP(answer)
case .offer(let offer): callManager.handleRemoteSDP(offer)
default: break
}
}

@ -3,9 +3,9 @@ import SocketRocket
public protocol WebSocketDelegate : AnyObject {
func webSocketDidConnect(_ webSocket: WebSocket)
func webSocketDidDisconnect(_ webSocket: WebSocket)
func webSocket(_ webSocket: WebSocket, didReceive message: String)
func handleWebSocketConnected()
func handleWebSocketDisconnected()
func handleWebSocketMessage(_ message: String)
}
public final class WebSocket : NSObject, SRWebSocketDelegate {
@ -27,17 +27,17 @@ public final class WebSocket : NSObject, SRWebSocketDelegate {
}
public func webSocketDidOpen(_ webSocket: SRWebSocket!) {
delegate?.webSocketDidConnect(self)
delegate?.handleWebSocketConnected()
}
public func webSocket(_ webSocket: SRWebSocket!, didReceiveMessage message: Any!) {
guard let message = message as? String else { return }
delegate?.webSocket(self, didReceive: message)
delegate?.handleWebSocketMessage(message)
}
public func disconnect() {
socket.close()
delegate?.webSocketDidDisconnect(self)
delegate?.handleWebSocketDisconnected()
}
public func webSocket(_ webSocket: SRWebSocket!, didFailWithError error: Error!) {

@ -1,13 +1,13 @@
import WebRTC
extension CallManager {
extension WebRTCWrapper {
public func handleCandidateMessage(_ candidate: RTCIceCandidate) {
public func handleICECandidate(_ candidate: RTCIceCandidate) {
print("[Calls] Received ICE candidate message.")
candidateQueue.append(candidate)
}
public func handleRemoteDescription(_ sdp: RTCSessionDescription) {
public func handleRemoteSDP(_ sdp: RTCSessionDescription) {
print("[Calls] Received remote SDP: \(sdp.sdp).")
peerConnection.setRemoteDescription(sdp, completionHandler: { [weak self] error in
if let error = error {
@ -15,7 +15,8 @@ extension CallManager {
} else {
guard let self = self,
sdp.type == .offer, self.peerConnection.localDescription == nil else { return }
self.acceptCall().retainUntilComplete()
// Answer the call
self.answer().retainUntilComplete()
}
})
}

@ -1,6 +1,6 @@
import WebRTC
extension CallManager {
extension WebRTCWrapper {
public func attachLocalRenderer(_ renderer: RTCVideoRenderer) {
localVideoTrack.add(renderer)

@ -1,16 +1,16 @@
import PromiseKit
import WebRTC
public protocol CallManagerDelegate : AnyObject {
public protocol WebRTCWrapperDelegate : AnyObject {
var videoCapturer: RTCVideoCapturer { get }
func sendSDP(_ sdp: RTCSessionDescription)
func sendICECandidate(_ candidate: RTCIceCandidate)
}
/// See https://developer.mozilla.org/en-US/docs/Web/API/RTCSessionDescription for more information.
public final class CallManager : NSObject, RTCPeerConnectionDelegate {
public weak var delegate: CallManagerDelegate?
/// See https://webrtc.org/getting-started/overview for more information.
public final class WebRTCWrapper : NSObject, RTCPeerConnectionDelegate {
public weak var delegate: WebRTCWrapperDelegate?
internal var candidateQueue: [RTCIceCandidate] = []
internal lazy var factory: RTCPeerConnectionFactory = {
@ -26,26 +26,21 @@ public final class CallManager : NSObject, RTCPeerConnectionDelegate {
let configuration = RTCConfiguration()
configuration.iceServers = [ RTCIceServer(urlStrings: TestCallConfig.defaultICEServers) ]
configuration.sdpSemantics = .unifiedPlan
let pcert = RTCCertificate.generate(withParams: [ "expires": NSNumber(value: 100000), "name": "RSASSA-PKCS1-v1_5" ])
configuration.certificate = pcert
configuration.iceTransportPolicy = .all
let constraints = RTCMediaConstraints(mandatoryConstraints: [:], optionalConstraints: [ "DtlsSrtpKeyAgreement" : "true" ])
let constraints = RTCMediaConstraints(mandatoryConstraints: [:], optionalConstraints: [:])
return factory.peerConnection(with: configuration, constraints: constraints, delegate: self)
}()
internal lazy var constraints: RTCMediaConstraints = {
internal lazy var mediaConstraints: RTCMediaConstraints = {
let mandatory: [String:String] = [
kRTCMediaConstraintsOfferToReceiveAudio : kRTCMediaConstraintsValueTrue,
kRTCMediaConstraintsOfferToReceiveVideo : kRTCMediaConstraintsValueTrue
]
let optional: [String:String] = [:]
// TODO: Do these constraints make sense?
return RTCMediaConstraints(mandatoryConstraints: mandatory, optionalConstraints: optional)
}()
// Audio
internal lazy var audioSource: RTCAudioSource = {
// TODO: Do these constraints make sense?
let constraints = RTCMediaConstraints(mandatoryConstraints: [:], optionalConstraints: [:])
return factory.audioSource(with: constraints)
}()
@ -106,13 +101,13 @@ public final class CallManager : NSObject, RTCPeerConnectionDelegate {
}
// MARK: Call Management
public func initiateCall() -> Promise<Void> {
public func offer() -> Promise<Void> {
print("[Calls] Initiating call.")
/*
guard let thread = TSContactThread.fetch(for: publicKey, using: transaction) else { return Promise(error: Error.noThread) }
*/
let (promise, seal) = Promise<Void>.pending()
peerConnection.offer(for: constraints) { [weak self] sdp, error in
peerConnection.offer(for: mediaConstraints) { [weak self] sdp, error in
if let error = error {
seal.reject(error)
} else {
@ -138,13 +133,13 @@ public final class CallManager : NSObject, RTCPeerConnectionDelegate {
return promise
}
public func acceptCall() -> Promise<Void> {
public func answer() -> Promise<Void> {
print("[Calls] Accepting call.")
/*
guard let thread = TSContactThread.fetch(for: publicKey, using: transaction) else { return Promise(error: Error.noThread) }
*/
let (promise, seal) = Promise<Void>.pending()
peerConnection.answer(for: constraints) { [weak self] sdp, error in
peerConnection.answer(for: mediaConstraints) { [weak self] sdp, error in
if let error = error {
seal.reject(error)
} else {
@ -170,7 +165,7 @@ public final class CallManager : NSObject, RTCPeerConnectionDelegate {
return promise
}
public func endCall() {
public func dropConnection() {
peerConnection.close()
}
Loading…
Cancel
Save