Add UI utilities

pull/560/head
Niels Andriesse 4 years ago
parent 1a12199d0b
commit 67792ad15f

@ -157,6 +157,7 @@
B6FE7EB71ADD62FA00A6D22F /* PushKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6FE7EB61ADD62FA00A6D22F /* PushKit.framework */; }; B6FE7EB71ADD62FA00A6D22F /* PushKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6FE7EB61ADD62FA00A6D22F /* PushKit.framework */; };
B8041A9525C8FA1D003C2166 /* MediaLoaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8041A9425C8FA1D003C2166 /* MediaLoaderView.swift */; }; B8041A9525C8FA1D003C2166 /* MediaLoaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8041A9425C8FA1D003C2166 /* MediaLoaderView.swift */; };
B8041AA725C90927003C2166 /* TypingIndicatorCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8041AA625C90927003C2166 /* TypingIndicatorCell.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 */; };
B80A579F23DFF1F300876683 /* NewClosedGroupVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B80A579E23DFF1F300876683 /* NewClosedGroupVC.swift */; }; B80A579F23DFF1F300876683 /* NewClosedGroupVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B80A579E23DFF1F300876683 /* NewClosedGroupVC.swift */; };
B817AD9A26436593009DF825 /* SimplifiedConversationCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B817AD9926436593009DF825 /* SimplifiedConversationCell.swift */; }; B817AD9A26436593009DF825 /* SimplifiedConversationCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = B817AD9926436593009DF825 /* SimplifiedConversationCell.swift */; };
B817AD9C26436F73009DF825 /* ThreadPickerVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B817AD9B26436F73009DF825 /* ThreadPickerVC.swift */; }; B817AD9C26436F73009DF825 /* ThreadPickerVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B817AD9B26436F73009DF825 /* ThreadPickerVC.swift */; };
@ -1142,6 +1143,7 @@
B6FE7EB61ADD62FA00A6D22F /* PushKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PushKit.framework; path = System/Library/Frameworks/PushKit.framework; sourceTree = SDKROOT; }; 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>"; }; 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>"; }; 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>"; };
B80A579E23DFF1F300876683 /* NewClosedGroupVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewClosedGroupVC.swift; sourceTree = "<group>"; }; B80A579E23DFF1F300876683 /* NewClosedGroupVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewClosedGroupVC.swift; sourceTree = "<group>"; };
B817AD9926436593009DF825 /* SimplifiedConversationCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimplifiedConversationCell.swift; sourceTree = "<group>"; }; B817AD9926436593009DF825 /* SimplifiedConversationCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SimplifiedConversationCell.swift; sourceTree = "<group>"; };
B817AD9B26436F73009DF825 /* ThreadPickerVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThreadPickerVC.swift; sourceTree = "<group>"; }; B817AD9B26436F73009DF825 /* ThreadPickerVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThreadPickerVC.swift; sourceTree = "<group>"; };
@ -2338,6 +2340,7 @@
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
B8DE1FB326C22F2F0079C9CE /* CallManager.swift */, B8DE1FB326C22F2F0079C9CE /* CallManager.swift */,
B806ECA026C4A7E4008BDA44 /* CallManager+UI.swift */,
); );
path = Calls; path = Calls;
sourceTree = "<group>"; sourceTree = "<group>";
@ -4765,6 +4768,7 @@
C32C5D23256DD4C0003C73A2 /* Mention.swift in Sources */, C32C5D23256DD4C0003C73A2 /* Mention.swift in Sources */,
C32C5FD6256E0346003C73A2 /* Notification+Thread.swift in Sources */, C32C5FD6256E0346003C73A2 /* Notification+Thread.swift in Sources */,
C3BBE0C72554F1570050F1E3 /* FixedWidthInteger+BigEndian.swift in Sources */, C3BBE0C72554F1570050F1E3 /* FixedWidthInteger+BigEndian.swift in Sources */,
B806ECA126C4A7E4008BDA44 /* CallManager+UI.swift in Sources */,
C32C5C88256DD0D2003C73A2 /* Storage+Messaging.swift in Sources */, C32C5C88256DD0D2003C73A2 /* Storage+Messaging.swift in Sources */,
C32C59C7256DB41F003C73A2 /* TSThread.m in Sources */, C32C59C7256DB41F003C73A2 /* TSThread.m in Sources */,
C300A5B22554AF9800555489 /* VisibleMessage+Profile.swift in Sources */, C300A5B22554AF9800555489 /* VisibleMessage+Profile.swift in Sources */,

@ -0,0 +1,16 @@
import WebRTC
extension CallManager {
func attachLocalRenderer(_ renderer: RTCVideoRenderer) {
localVideoTrack.add(renderer)
}
func attachRemoteRenderer(_ renderer: RTCVideoRenderer) {
remoteVideoTrack?.add(renderer)
}
func handleLocalFrameCaptured(_ videoFrame: RTCVideoFrame) {
localVideoSource.capturer(videoCapturer, didCapture: videoFrame)
}
}

@ -4,7 +4,7 @@ import WebRTC
/// See https://developer.mozilla.org/en-US/docs/Web/API/RTCSessionDescription for more information. /// See https://developer.mozilla.org/en-US/docs/Web/API/RTCSessionDescription for more information.
public final class CallManager : NSObject, RTCPeerConnectionDelegate { public final class CallManager : NSObject, RTCPeerConnectionDelegate {
private lazy var factory: RTCPeerConnectionFactory = { internal lazy var factory: RTCPeerConnectionFactory = {
RTCInitializeSSL() RTCInitializeSSL()
let videoEncoderFactory = RTCVideoEncoderFactoryH264() let videoEncoderFactory = RTCVideoEncoderFactoryH264()
let videoDecoderFactory = RTCVideoDecoderFactoryH264() let videoDecoderFactory = RTCVideoDecoderFactoryH264()
@ -13,7 +13,7 @@ public final class CallManager : NSObject, RTCPeerConnectionDelegate {
/// Represents a WebRTC connection between the user and a remote peer. Provides methods to connect to a /// Represents a WebRTC connection between the user and a remote peer. Provides methods to connect to a
/// remote peer, maintain and monitor the connection, and close the connection once it's no longer needed. /// remote peer, maintain and monitor the connection, and close the connection once it's no longer needed.
private lazy var peerConnection: RTCPeerConnection = { internal lazy var peerConnection: RTCPeerConnection = {
let configuration = RTCConfiguration() let configuration = RTCConfiguration()
// TODO: Configure // TODO: Configure
// TODO: Do these constraints make sense? // TODO: Do these constraints make sense?
@ -21,7 +21,7 @@ public final class CallManager : NSObject, RTCPeerConnectionDelegate {
return factory.peerConnection(with: configuration, constraints: constraints, delegate: self) return factory.peerConnection(with: configuration, constraints: constraints, delegate: self)
}() }()
private lazy var constraints: RTCMediaConstraints = { internal lazy var constraints: RTCMediaConstraints = {
let mandatory: [String:String] = [ let mandatory: [String:String] = [
kRTCMediaConstraintsOfferToReceiveAudio : kRTCMediaConstraintsValueTrue, kRTCMediaConstraintsOfferToReceiveAudio : kRTCMediaConstraintsValueTrue,
kRTCMediaConstraintsOfferToReceiveVideo : kRTCMediaConstraintsValueTrue kRTCMediaConstraintsOfferToReceiveVideo : kRTCMediaConstraintsValueTrue
@ -32,35 +32,35 @@ public final class CallManager : NSObject, RTCPeerConnectionDelegate {
}() }()
// Audio // Audio
private lazy var audioSource: RTCAudioSource = { internal lazy var audioSource: RTCAudioSource = {
// TODO: Do these constraints make sense? // TODO: Do these constraints make sense?
let constraints = RTCMediaConstraints(mandatoryConstraints: [:], optionalConstraints: [:]) let constraints = RTCMediaConstraints(mandatoryConstraints: [:], optionalConstraints: [:])
return factory.audioSource(with: constraints) return factory.audioSource(with: constraints)
}() }()
private lazy var audioTrack: RTCAudioTrack = { internal lazy var audioTrack: RTCAudioTrack = {
return factory.audioTrack(with: audioSource, trackId: "ARDAMSa0") return factory.audioTrack(with: audioSource, trackId: "ARDAMSa0")
}() }()
// Video // Video
private lazy var localVideoSource: RTCVideoSource = { internal lazy var localVideoSource: RTCVideoSource = {
return factory.videoSource() return factory.videoSource()
}() }()
private lazy var localVideoTrack: RTCVideoTrack = { internal lazy var localVideoTrack: RTCVideoTrack = {
return factory.videoTrack(with: localVideoSource, trackId: "ARDAMSv0") return factory.videoTrack(with: localVideoSource, trackId: "ARDAMSv0")
}() }()
private lazy var videoCapturer: RTCVideoCapturer = { internal lazy var videoCapturer: RTCVideoCapturer = {
return RTCCameraVideoCapturer(delegate: localVideoSource) return RTCCameraVideoCapturer(delegate: localVideoSource)
}() }()
private lazy var remoteVideoTrack: RTCVideoTrack? = { internal lazy var remoteVideoTrack: RTCVideoTrack? = {
return peerConnection.receivers.first { $0.track.kind == "video" }?.track as? RTCVideoTrack return peerConnection.receivers.first { $0.track.kind == "video" }?.track as? RTCVideoTrack
}() }()
// Stream // Stream
private lazy var stream: RTCMediaStream = { internal lazy var stream: RTCMediaStream = {
let result = factory.mediaStream(withStreamId: "ARDAMS") let result = factory.mediaStream(withStreamId: "ARDAMS")
result.addAudioTrack(audioTrack) result.addAudioTrack(audioTrack)
result.addVideoTrack(localVideoTrack) result.addVideoTrack(localVideoTrack)
@ -79,7 +79,7 @@ public final class CallManager : NSObject, RTCPeerConnectionDelegate {
} }
// MARK: Initialization // MARK: Initialization
private override init() { internal override init() {
super.init() super.init()
peerConnection.add(stream) peerConnection.add(stream)
// Configure audio session // Configure audio session

Loading…
Cancel
Save