• Xcode
• MacBook Pro
• Xcode:v 14.2
• 声网SDK:4.1.1,SDK的下载可查看文末参考资料
• Apple 开发者账号
pod initopen -e Podfile
import AgoraRtcKit//自3.0.0版本起,AgoraRtcEngineKit 类名更换为 AgoraRtcKit
class ViewController: UIViewController{ // 定义本地视图变量 var localView: UIView! // 定义远端视频变量 var remoteView: UIView! // 定义 agoraKit var agoraKit: AgoraRtcEngineKit!
// 设置视频窗口布局 override func viewDidLayoutSubviews(){ super.viewDidLayoutSubviews() remoteView.frame = self.view.bounds localView.frame = CGRect(x: self.view.bounds.width - 180, y:0, width: 180, height: 230) }
func initView(){ // 初始化远端视频窗口。 remoteView = UIView() self.view.addSubview(remoteView) // 初始化本地视频窗口。 localView = UIView() self.view.addSubview(localView) }
//初始化引擎func initializeAgoraEngine(){ let config = AgoraRtcEngineConfig() // 在这里输入你的 App ID. config.appId = "24bbaca4116c4b11b81cdf4cffdf41" // 调用 AgoraRtcEngineDelegate agoraKit = AgoraRtcEngineKit.sharedEngine(with: config, delegate: self) }
func joinChannel(){ let option = AgoraRtcChannelMediaOptions() // 在视频通话场景下,将频道场景设置为 liveBroadcasting option.channelProfile = .liveBroadcasting // 设置用户角色为主播 option.clientRoleType = .broadcaster // 使用临时 token 加入频道,在这里传入你的项目的 token 和频道名。 agoraKit?.joinChannel(byToken: "007eJxTYezdV5FYj92Eh4WVzc+Yfl9sd4XNOyPb1it1+3nGPwt4rMBiZJCUlJieaGBqaJZskGRomWRgmp6SZJKelAUlDI/PFnAIpDYGMDDtmv2BkZIBAEJ+FoSo1L52BAQBbtCAO", channelId: "zeng", uid: 0, mediaOptions: option)}
func setupLocalVideo(){ // 启用视频模块 agoraKit?.enableVideo() agoraKit?.enableAudio() // 开始本地预览 agoraKit?.startPreview() let videoCanvas = AgoraRtcVideoCanvas() videoCanvas.uid = 0 videoCanvas.renderMode = .hidden videoCanvas.view = localView // 设置本地视图 agoraKit?.setupLocalVideo(videoCanvas) }
func leaveChannel() { // Step 1, release local AgoraRtcVideoCanvas instance agoraKit.setupLocalVideo(nil) // Step 2, leave channel and end group chat agoraKit.leaveChannel(nil) AgoraRtcEngineKit.destroy() }
extension ViewController: AgoraRtcEngineDelegate{ // 监听 didJoinedOfUid 回调 // 远端主播加入频道时,会触发该回调 func rtcEngine(_ engine: AgoraRtcEngineKit, didJoinedOfUid uid: UInt, elapsed: Int){ let videoCanvas = AgoraRtcVideoCanvas() videoCanvas.uid = uid //渲染模式 采用hidden videoCanvas.renderMode = .hidden videoCanvas.view = remoteView // 设置远端视图 agoraKit?.setupRemoteVideo(videoCanvas) }}
override func viewDidLoad() { super.viewDidLoad() // 当加载视图后,你可以进行其他其他设置。 // 初始化视频窗口函数 initView() // 当调用声网 API 时,以下函数会被调用 initializeAgoraEngine() setupLocalVideo() joinChannel() }
enable:表示是否开启虚拟背景,值为true或者false
backData:表示自定义的背景图
segData:表示背景图像的处理属性
let source = AgoraVirtualBackgroundSource()source.backgroundSourceType = .imgsource.source = Bundle.main.path(forResource: "test", ofType: "png")agoraKit.enableVirtualBackground(true, backData: source, segData: nil)
关注实时互动领域的
技术实践、行业洞察、人物观点
☟☟☟

