Skip to content

Commit

Permalink
Don't export WebRTC (livekit#251)
Browse files Browse the repository at this point in the history
* progress

* progress

* hide RTCDefaultAudioProcessingModule and RTCAudioDeviceModule

* video renderer

* RTCFrameCryptorDelegate adapter

* adapter for RTCVideoCapturerDelegate

* VideoCaptureInterceptor

* VideoRotation

* video view rendering

* rendering

* replace all imports with implementationOnly

* fix compile

* fix ios compile

* use static

* prefix

* fix macos

* update package and symbols

* minor optimization

* implement AudioRenderer

* fix compile

* iceServers on ConnectOptions

* AudioCustomProcessingDelegate

* hide LKRTCVideoCapturerDelegate

* audio device

* Update AudioManager.swift

* Update VideoRenderer.swift
  • Loading branch information
hiroshihorie committed Oct 26, 2023
1 parent 980146b commit 347a27b
Show file tree
Hide file tree
Showing 90 changed files with 927 additions and 601 deletions.
2 changes: 1 addition & 1 deletion Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ let package = Package(
)
],
dependencies: [
.package(name: "WebRTC", url: "https://github.com/webrtc-sdk/Specs.git", .exact("114.5735.08")),
.package(name: "WebRTC", url: "https://github.com/livekit/webrtc-xcframework-static.git", .exact("114.5735.09")),
.package(name: "SwiftProtobuf", url: "https://github.com/apple/swift-protobuf.git", .upToNextMajor(from: "1.21.0")),
.package(name: "Promises", url: "https://github.com/google/promises.git", .upToNextMajor(from: "2.2.0")),
.package(url: "https://github.com/apple/swift-log.git", .upToNextMajor(from: "1.5.2"))
Expand Down
5 changes: 3 additions & 2 deletions Sources/LiveKit/Broadcast/BroadcastScreenCapturer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,14 @@
//

import Foundation
import WebRTC
import Promises

#if canImport(UIKit)
import UIKit
#endif

@_implementationOnly import WebRTC

#if os(iOS)

class BroadcastScreenCapturer: BufferCapturer {
Expand Down Expand Up @@ -57,7 +58,7 @@ class BroadcastScreenCapturer: BufferCapturer {
return
}
frameReader.didCapture = { pixelBuffer, rotation in
self.capture(pixelBuffer, rotation: rotation)
self.capture(pixelBuffer, rotation: rotation.toLKType())

}
frameReader.startCapture(with: socketConnection)
Expand Down
3 changes: 2 additions & 1 deletion Sources/LiveKit/Broadcast/SocketConnectionFrameReader.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@
import Foundation
import CoreVideo
import CoreImage
import WebRTC

@_implementationOnly import WebRTC

private class Message {
// Initializing a CIContext object is costly, so we use a singleton instead
Expand Down
21 changes: 11 additions & 10 deletions Sources/LiveKit/Core/DataChannelPair.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,10 @@
*/

import Foundation
import WebRTC
import Promises

@_implementationOnly import WebRTC

internal class DataChannelPair: NSObject, Loggable {

// MARK: - Public
Expand All @@ -31,8 +32,8 @@ internal class DataChannelPair: NSObject, Loggable {

// MARK: - Private

private var _reliableChannel: RTCDataChannel?
private var _lossyChannel: RTCDataChannel?
private var _reliableChannel: LKRTCDataChannel?
private var _lossyChannel: LKRTCDataChannel?

public var isOpen: Bool {

Expand All @@ -45,15 +46,15 @@ internal class DataChannelPair: NSObject, Loggable {
}

public init(target: Livekit_SignalTarget,
reliableChannel: RTCDataChannel? = nil,
lossyChannel: RTCDataChannel? = nil) {
reliableChannel: LKRTCDataChannel? = nil,
lossyChannel: LKRTCDataChannel? = nil) {

self.target = target
self._reliableChannel = reliableChannel
self._lossyChannel = lossyChannel
}

public func set(reliable channel: RTCDataChannel?) {
public func set(reliable channel: LKRTCDataChannel?) {
self._reliableChannel = channel
channel?.delegate = self

Expand All @@ -62,7 +63,7 @@ internal class DataChannelPair: NSObject, Loggable {
}
}

public func set(lossy channel: RTCDataChannel?) {
public func set(lossy channel: LKRTCDataChannel?) {
self._lossyChannel = channel
channel?.delegate = self

Expand Down Expand Up @@ -130,16 +131,16 @@ internal class DataChannelPair: NSObject, Loggable {

// MARK: - RTCDataChannelDelegate

extension DataChannelPair: RTCDataChannelDelegate {
extension DataChannelPair: LKRTCDataChannelDelegate {

func dataChannelDidChangeState(_ dataChannel: RTCDataChannel) {
func dataChannelDidChangeState(_ dataChannel: LKRTCDataChannel) {

if isOpen {
openCompleter.fulfill(())
}
}

func dataChannel(_ dataChannel: RTCDataChannel, didReceiveMessageWith buffer: RTCDataBuffer) {
func dataChannel(_ dataChannel: LKRTCDataChannel, didReceiveMessageWith buffer: LKRTCDataBuffer) {

guard let dataPacket = try? Livekit_DataPacket(contiguousBytes: buffer.data) else {
log("could not decode data message", .error)
Expand Down
9 changes: 5 additions & 4 deletions Sources/LiveKit/Core/Engine+SignalClientDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,10 @@
*/

import Foundation
import WebRTC
import Promises

@_implementationOnly import WebRTC

extension Engine: SignalClientDelegate {

func signalClient(_ signalClient: SignalClient, didMutate state: SignalClient.State, oldState: SignalClient.State) {
Expand All @@ -35,7 +36,7 @@ extension Engine: SignalClientDelegate {
}
}

func signalClient(_ signalClient: SignalClient, didReceive iceCandidate: RTCIceCandidate, target: Livekit_SignalTarget) {
func signalClient(_ signalClient: SignalClient, didReceive iceCandidate: LKRTCIceCandidate, target: Livekit_SignalTarget) {

guard let transport = target == .subscriber ? subscriber : publisher else {
log("failed to add ice candidate, transport is nil for target: \(target)", .error)
Expand All @@ -47,7 +48,7 @@ extension Engine: SignalClientDelegate {
}
}

func signalClient(_ signalClient: SignalClient, didReceiveAnswer answer: RTCSessionDescription) {
func signalClient(_ signalClient: SignalClient, didReceiveAnswer answer: LKRTCSessionDescription) {

guard let publisher = self.publisher else {
log("publisher is nil", .error)
Expand All @@ -61,7 +62,7 @@ extension Engine: SignalClientDelegate {
return
}

func signalClient(_ signalClient: SignalClient, didReceiveOffer offer: RTCSessionDescription) {
func signalClient(_ signalClient: SignalClient, didReceiveOffer offer: LKRTCSessionDescription) {

log("received offer, creating & sending answer...")

Expand Down
15 changes: 8 additions & 7 deletions Sources/LiveKit/Core/Engine+TransportDelegate.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,10 @@
*/

import Foundation
import WebRTC
import Promises

@_implementationOnly import WebRTC

extension Engine: TransportDelegate {

func transport(_ transport: Transport, didGenerate stats: [TrackStats], target: Livekit_SignalTarget) {
Expand Down Expand Up @@ -47,15 +48,15 @@ extension Engine: TransportDelegate {
}
}

func transport(_ transport: Transport, didGenerate iceCandidate: RTCIceCandidate) {
func transport(_ transport: Transport, didGenerate iceCandidate: LKRTCIceCandidate) {
log("didGenerate iceCandidate")
signalClient.sendCandidate(candidate: iceCandidate,
target: transport.target).catch(on: queue) { error in
self.log("Failed to send candidate, error: \(error)", .error)
}
}

func transport(_ transport: Transport, didAddTrack track: RTCMediaStreamTrack, rtpReceiver: RTCRtpReceiver, streams: [RTCMediaStream]) {
func transport(_ transport: Transport, didAddTrack track: LKRTCMediaStreamTrack, rtpReceiver: LKRTCRtpReceiver, streams: [LKRTCMediaStream]) {
log("did add track")
if transport.target == .subscriber {

Expand All @@ -69,21 +70,21 @@ extension Engine: TransportDelegate {
}
}

func transport(_ transport: Transport, didRemove track: RTCMediaStreamTrack) {
func transport(_ transport: Transport, didRemove track: LKRTCMediaStreamTrack) {
if transport.target == .subscriber {
notify { $0.engine(self, didRemove: track) }
}
}

func transport(_ transport: Transport, didOpen dataChannel: RTCDataChannel) {
func transport(_ transport: Transport, didOpen dataChannel: LKRTCDataChannel) {

log("Server opened data channel \(dataChannel.label)(\(dataChannel.readyState))")

if subscriberPrimary, transport.target == .subscriber {

switch dataChannel.label {
case RTCDataChannel.labels.reliable: subscriberDC.set(reliable: dataChannel)
case RTCDataChannel.labels.lossy: subscriberDC.set(lossy: dataChannel)
case LKRTCDataChannel.labels.reliable: subscriberDC.set(reliable: dataChannel)
case LKRTCDataChannel.labels.lossy: subscriberDC.set(lossy: dataChannel)
default: log("Unknown data channel label \(dataChannel.label)", .warning)
}
}
Expand Down
Loading

0 comments on commit 347a27b

Please sign in to comment.