Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 12 additions & 32 deletions iOS/APIExample-SwiftUI/APIExample-SwiftUI.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -92,14 +92,11 @@
4C9309C22CBA91530085EFF9 /* JoinMultiChannel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9309722CBA91520085EFF9 /* JoinMultiChannel.swift */; };
4C9309C32CBA91530085EFF9 /* JoinMultiChannelRTC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9309732CBA91520085EFF9 /* JoinMultiChannelRTC.swift */; };
4C9309C42CBA91530085EFF9 /* PictureInPicture.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9309752CBA91530085EFF9 /* PictureInPicture.swift */; };
4C9309C52CBA91530085EFF9 /* SDKRenderRTC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9309772CBA91530085EFF9 /* SDKRenderRTC.swift */; };
4C9309C62CBA91530085EFF9 /* SDKRenderViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9309782CBA91530085EFF9 /* SDKRenderViewModel.swift */; };
4C9309C72CBA91530085EFF9 /* SDKRenderExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9309792CBA91530085EFF9 /* SDKRenderExample.swift */; };
4C9309C82CBA91530085EFF9 /* PIPDisplayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C93097B2CBA91530085EFF9 /* PIPDisplayView.swift */; };
4C9309C92CBA91530085EFF9 /* PixelBufferRenderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C93097C2CBA91530085EFF9 /* PixelBufferRenderView.swift */; };
4C9309CA2CBA91530085EFF9 /* CustomRenderViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C93097E2CBA91530085EFF9 /* CustomRenderViewModel.swift */; };
4C9309CB2CBA91530085EFF9 /* CustomRenderRTC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C93097F2CBA91530085EFF9 /* CustomRenderRTC.swift */; };
4C9309CC2CBA91530085EFF9 /* CustomRenderExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9309802CBA91530085EFF9 /* CustomRenderExample.swift */; };
4C9309CA2CBA91530085EFF9 /* PixelBufferRenderViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C93097E2CBA91530085EFF9 /* PixelBufferRenderViewModel.swift */; };
4C9309CB2CBA91530085EFF9 /* PixelBufferRenderRTC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C93097F2CBA91530085EFF9 /* PixelBufferRenderRTC.swift */; };
4C9309CC2CBA91530085EFF9 /* PixelBufferRenderExample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9309802CBA91530085EFF9 /* PixelBufferRenderExample.swift */; };
4C9309CD2CBA91530085EFF9 /* VideoMetadata.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9309822CBA91530085EFF9 /* VideoMetadata.swift */; };
4C9309CE2CBA91530085EFF9 /* VideoMetaDataRTC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9309832CBA91530085EFF9 /* VideoMetaDataRTC.swift */; };
4C9309CF2CBA91530085EFF9 /* RTMPStreamRTC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C9309852CBA91530085EFF9 /* RTMPStreamRTC.swift */; };
Expand Down Expand Up @@ -269,14 +266,11 @@
4C9309722CBA91520085EFF9 /* JoinMultiChannel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JoinMultiChannel.swift; sourceTree = "<group>"; };
4C9309732CBA91520085EFF9 /* JoinMultiChannelRTC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = JoinMultiChannelRTC.swift; sourceTree = "<group>"; };
4C9309752CBA91530085EFF9 /* PictureInPicture.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PictureInPicture.swift; sourceTree = "<group>"; };
4C9309772CBA91530085EFF9 /* SDKRenderRTC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SDKRenderRTC.swift; sourceTree = "<group>"; };
4C9309782CBA91530085EFF9 /* SDKRenderViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SDKRenderViewModel.swift; sourceTree = "<group>"; };
4C9309792CBA91530085EFF9 /* SDKRenderExample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SDKRenderExample.swift; sourceTree = "<group>"; };
4C93097B2CBA91530085EFF9 /* PIPDisplayView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PIPDisplayView.swift; sourceTree = "<group>"; };
4C93097C2CBA91530085EFF9 /* PixelBufferRenderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PixelBufferRenderView.swift; sourceTree = "<group>"; };
4C93097E2CBA91530085EFF9 /* CustomRenderViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CustomRenderViewModel.swift; sourceTree = "<group>"; };
4C93097F2CBA91530085EFF9 /* CustomRenderRTC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CustomRenderRTC.swift; sourceTree = "<group>"; };
4C9309802CBA91530085EFF9 /* CustomRenderExample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CustomRenderExample.swift; sourceTree = "<group>"; };
4C93097E2CBA91530085EFF9 /* PixelBufferRenderViewModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PixelBufferRenderViewModel.swift; sourceTree = "<group>"; };
4C93097F2CBA91530085EFF9 /* PixelBufferRenderRTC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PixelBufferRenderRTC.swift; sourceTree = "<group>"; };
4C9309802CBA91530085EFF9 /* PixelBufferRenderExample.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PixelBufferRenderExample.swift; sourceTree = "<group>"; };
4C9309822CBA91530085EFF9 /* VideoMetadata.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VideoMetadata.swift; sourceTree = "<group>"; };
4C9309832CBA91530085EFF9 /* VideoMetaDataRTC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = VideoMetaDataRTC.swift; sourceTree = "<group>"; };
4C9309852CBA91530085EFF9 /* RTMPStreamRTC.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RTMPStreamRTC.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -760,23 +754,12 @@
isa = PBXGroup;
children = (
4C9309752CBA91530085EFF9 /* PictureInPicture.swift */,
4C9309762CBA91530085EFF9 /* SDKRender */,
4C93097A2CBA91530085EFF9 /* PIPCommon */,
4C93097D2CBA91530085EFF9 /* CustomRender */,
);
path = PictureInPicture;
sourceTree = "<group>";
};
4C9309762CBA91530085EFF9 /* SDKRender */ = {
isa = PBXGroup;
children = (
4C9309772CBA91530085EFF9 /* SDKRenderRTC.swift */,
4C9309782CBA91530085EFF9 /* SDKRenderViewModel.swift */,
4C9309792CBA91530085EFF9 /* SDKRenderExample.swift */,
);
path = SDKRender;
sourceTree = "<group>";
};
4C93097A2CBA91530085EFF9 /* PIPCommon */ = {
isa = PBXGroup;
children = (
Expand All @@ -789,9 +772,9 @@
4C93097D2CBA91530085EFF9 /* CustomRender */ = {
isa = PBXGroup;
children = (
4C93097E2CBA91530085EFF9 /* CustomRenderViewModel.swift */,
4C93097F2CBA91530085EFF9 /* CustomRenderRTC.swift */,
4C9309802CBA91530085EFF9 /* CustomRenderExample.swift */,
4C93097E2CBA91530085EFF9 /* PixelBufferRenderViewModel.swift */,
4C93097F2CBA91530085EFF9 /* PixelBufferRenderRTC.swift */,
4C9309802CBA91530085EFF9 /* PixelBufferRenderExample.swift */,
);
path = CustomRender;
sourceTree = "<group>";
Expand Down Expand Up @@ -1100,7 +1083,7 @@
buildActionMask = 2147483647;
files = (
4C93076A2CB961150085EFF9 /* CircularBuffer.c in Sources */,
4C9309CA2CBA91530085EFF9 /* CustomRenderViewModel.swift in Sources */,
4C9309CA2CBA91530085EFF9 /* PixelBufferRenderViewModel.swift in Sources */,
4C9309D52CBA91530085EFF9 /* AudioWaveformRTC.swift in Sources */,
4C9309CE2CBA91530085EFF9 /* VideoMetaDataRTC.swift in Sources */,
4C9309C12CBA91530085EFF9 /* CustomPCMAudioSource.swift in Sources */,
Expand All @@ -1113,7 +1096,7 @@
4C93077A2CB961150085EFF9 /* VideoUIView.swift in Sources */,
4C9309B92CBA91530085EFF9 /* LiveStreaming.swift in Sources */,
4C9307FC2CBA6F790085EFF9 /* JoinChannelAudio.swift in Sources */,
4C9309CB2CBA91530085EFF9 /* CustomRenderRTC.swift in Sources */,
4C9309CB2CBA91530085EFF9 /* PixelBufferRenderRTC.swift in Sources */,
4C9309D12CBA91530085EFF9 /* CustomAudioRender.swift in Sources */,
4C93076E2CB961150085EFF9 /* KFMP4Demuxer.m in Sources */,
4C9309C22CBA91530085EFF9 /* JoinMultiChannel.swift in Sources */,
Expand All @@ -1122,7 +1105,7 @@
4C9309C92CBA91530085EFF9 /* PixelBufferRenderView.swift in Sources */,
4C93075D2CB961150085EFF9 /* AgoraCustomEncryption.mm in Sources */,
4C9307652CB961150085EFF9 /* AgoraCameraSourcePush.swift in Sources */,
4C9309CC2CBA91530085EFF9 /* CustomRenderExample.swift in Sources */,
4C9309CC2CBA91530085EFF9 /* PixelBufferRenderExample.swift in Sources */,
4C9308012CBA6F8D0085EFF9 /* JoinChannelVideoRTC.swift in Sources */,
4C9309DC2CBA91530085EFF9 /* VoiceChanger.swift in Sources */,
4C93076F2CB961150085EFF9 /* MediaUtils.m in Sources */,
Expand All @@ -1139,7 +1122,6 @@
4C9309ED2CBA95530085EFF9 /* SpatialAudioRTC.swift in Sources */,
4C9309DA2CBA91530085EFF9 /* RhythmPlayerRTC.swift in Sources */,
4C9309BB2CBA91530085EFF9 /* CreateDataStream.swift in Sources */,
4C9309C62CBA91530085EFF9 /* SDKRenderViewModel.swift in Sources */,
4C9309B62CBA91530085EFF9 /* MutliCameraRTC.swift in Sources */,
4C93077D2CB961150085EFF9 /* KeyCenter.swift in Sources */,
4C9307692CB961150085EFF9 /* AgoraMetalShader.metal in Sources */,
Expand All @@ -1154,7 +1136,6 @@
4C9307612CB961150085EFF9 /* NetworkManager.swift in Sources */,
4C9307C52CB961160085EFF9 /* APIExample_SwiftUIApp.swift in Sources */,
4C9309DB2CBA91530085EFF9 /* VoiceChangerRTC.swift in Sources */,
4C9309C72CBA91530085EFF9 /* SDKRenderExample.swift in Sources */,
F73B018D2CC10E240077B7D2 /* ViewExtensions.swift in Sources */,
4C9309AB2CBA91530085EFF9 /* RawAudioDataRTC.swift in Sources */,
4C9307752CB961150085EFF9 /* AgoraPcmSourcePush.swift in Sources */,
Expand All @@ -1174,7 +1155,6 @@
4C93075E2CB961150085EFF9 /* SettingsView.swift in Sources */,
4C93080C2CBA712F0085EFF9 /* JoinChannelVideoToken.swift in Sources */,
4C9309BA2CBA91530085EFF9 /* LiveStreamingRTC.swift in Sources */,
4C9309C52CBA91530085EFF9 /* SDKRenderRTC.swift in Sources */,
4C9309E42CBA91530085EFF9 /* ContentInspect.swift in Sources */,
4C9309D92CBA91530085EFF9 /* RhythmPlayer.swift in Sources */,
4C9307622CB961150085EFF9 /* JSONObject.swift in Sources */,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@

import SwiftUI

struct CustomRenderMockContainerView: View {
@ObservedObject var viewModel: CustomRenderViewModel
struct PixelBufferRenderMockContainerView: View {
@ObservedObject var viewModel: PixelBufferRenderViewModel

var localView = PixelBufferCustomRenderView()

Expand All @@ -23,24 +23,24 @@ struct CustomRenderMockContainerView: View {
}

@available(iOS 15.0, *)
struct CustomRenderExample: View {
struct PixelBufferRenderExample: View {
@State var configs: [String: Any]

//mock data
@StateObject private var customRenderViewModel: CustomRenderViewModel
@StateObject private var customRenderViewModel: PixelBufferRenderViewModel

//pip controller
@StateObject private var pipViewModel: PIPViewModel

let myContainerView: CustomRenderMockContainerView
let myContainerView: PixelBufferRenderMockContainerView

init(configs: [String: Any]) {
_configs = State(initialValue: configs)

let viewModel = CustomRenderViewModel(configs: configs)
let viewModel = PixelBufferRenderViewModel(configs: configs)
_customRenderViewModel = StateObject(wrappedValue: viewModel)

myContainerView = CustomRenderMockContainerView(viewModel: viewModel)
myContainerView = PixelBufferRenderMockContainerView(viewModel: viewModel)
let pipSourceView = UIHostingController(rootView: myContainerView).view!
_pipViewModel = StateObject(wrappedValue: PIPViewModel(pipSourceView: pipSourceView))
}
Expand Down Expand Up @@ -84,7 +84,7 @@ struct CustomRenderExample: View {
struct CustomRenderExamplePreviews: PreviewProvider {
static var previews: some View {
if #available(iOS 15.0, *) {
CustomRenderExample(configs: [:])
PixelBufferRenderExample(configs: [:])
} else {
// Fallback on earlier versions
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ protocol CustomRenderRTCProtocol {
@class SDKRenderRTC
@abstract RTC management class, handle RTC connection, video view data management (view based on PixelBufferRenderView self-rendering), channel management
*/
class CustomRenderRTC: NSObject, ObservableObject , CustomRenderRTCProtocol{
class PixelBufferRenderRTC: NSObject, ObservableObject , CustomRenderRTCProtocol{
var videoFrameDelegte: AgoraVideoFrameDelegate?

private var uid: UInt = 0
Expand Down Expand Up @@ -71,7 +71,7 @@ class CustomRenderRTC: NSObject, ObservableObject , CustomRenderRTCProtocol{
}
}

extension CustomRenderRTC: AgoraVideoFrameDelegate {
extension PixelBufferRenderRTC: AgoraVideoFrameDelegate {
func onCapture(_ videoFrame: AgoraOutputVideoFrame, sourceType: AgoraVideoSourceType) -> Bool {
if let localView = localView, let pixelBuffer = videoFrame.pixelBuffer {
localView.renderVideoPixelBuffer(pixelBuffer: pixelBuffer, width: videoFrame.width, height: videoFrame.height)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ import Foundation
@class CustomRenderViewModel(
@abstract This type has nothing to do with PIP and only simulates the implementation of rtc services for service reference and can be modified according to the service
*/
class CustomRenderViewModel: NSObject, ObservableObject {
class PixelBufferRenderViewModel: NSObject, ObservableObject {
@Published var remoteRenderViews: [PixelBufferCustomRenderView] = []
private var isJoined = false
var customRenderRtc: CustomRenderRTC
var customRenderRtc: PixelBufferRenderRTC
var configs: [String: Any]

private lazy var rtcConfig: AgoraRtcEngineConfig = {
Expand All @@ -40,7 +40,7 @@ class CustomRenderViewModel: NSObject, ObservableObject {
}()

init(configs: [String: Any]) {
self.customRenderRtc = CustomRenderRTC()
self.customRenderRtc = PixelBufferRenderRTC()
self.configs = configs
super.init()
}
Expand Down Expand Up @@ -88,7 +88,7 @@ class CustomRenderViewModel: NSObject, ObservableObject {
}
}

extension CustomRenderViewModel: AgoraRtcEngineDelegate {
extension PixelBufferRenderViewModel: AgoraRtcEngineDelegate {
func rtcEngine(_ engine: AgoraRtcEngineKit, didJoinChannel channel: String, withUid uid: UInt, elapsed: Int) {
self.isJoined = true
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,27 +7,21 @@

import SwiftUI

enum PipType {
case sdkRender, customRender
}

struct PipItem: Identifiable {
let id = UUID()
var name: String
var type: PipType
}

struct PictureInPictureEntry: View {
var items: [PipItem] = [
PipItem(name: "PIP Custom Render", type: .customRender),
PipItem(name: "PIP RTC SDK Render", type: .sdkRender)
PipItem(name: "Pixel Buffer Render"),
]

var body: some View {
List {
ForEach(items) { item in
NavigationLink(destination: {
let entry = PictureInPictureJoinEntry(pipType: item.type)
let entry = PictureInPictureJoinEntry()
entry.navigationTitle(item.name)
}) {
Text(item.name)
Expand All @@ -38,7 +32,6 @@ struct PictureInPictureEntry: View {
}

struct PictureInPictureJoinEntry: View {
var pipType: PipType
@State private var channelName: String = ""
@State private var isActive = false
@State private var configs: [String: Any] = [:]
Expand All @@ -54,22 +47,12 @@ struct PictureInPictureJoinEntry: View {
Text("Join Channel")
}.disabled(channelName.isEmpty)
Spacer()
if pipType == .sdkRender {
if #available(iOS 15.0, *) {
NavigationLink(destination: sdkRenderView().navigationTitle(channelName).navigationBarTitleDisplayMode(.inline), isActive: $isActive) {
EmptyView()
}
} else {
// Fallback on earlier versions
if #available(iOS 15.0, *) {
NavigationLink(destination: customRenderView().navigationTitle(channelName).navigationBarTitleDisplayMode(.inline), isActive: $isActive) {
EmptyView()
}
} else {
if #available(iOS 15.0, *) {
NavigationLink(destination: customRenderView().navigationTitle(channelName).navigationBarTitleDisplayMode(.inline), isActive: $isActive) {
EmptyView()
}
} else {
// Fallback on earlier versions
}
// Fallback on earlier versions
}

Spacer()
Expand All @@ -78,19 +61,14 @@ struct PictureInPictureJoinEntry: View {
}

@available(iOS 15.0, *)
private func customRenderView() -> CustomRenderExample {
return CustomRenderExample(configs: configs)
}

@available(iOS 15.0, *)
private func sdkRenderView() -> SDKRenderExample{
return SDKRenderExample(configs: configs)
private func customRenderView() -> PixelBufferRenderExample {
return PixelBufferRenderExample(configs: configs)
}

}

struct PictureInPictureJoinEntryPreviews: PreviewProvider {
static var previews: some View {
PictureInPictureJoinEntry(pipType: .customRender)
PictureInPictureJoinEntry()
}
}
Loading
Loading