关于音视频:基于声网-SDK-实现-macOS-端的一对一视频通话

62次阅读

共计 5812 个字符,预计需要花费 15 分钟才能阅读完成。

音视频互动包含直播是以后比拟热门的玩法,咱们常常见到有 PK 连麦、直播答题、一起 KTV、电商直播、互动大班课、视频相亲等。本文将演示 如何通过声网 SDK 在 macOS 端实现一个视频通话利用

前提条件

  • Xcode 9.0 或以上版本
  • 反对 macOS 10.10 或以上版本的 macOS 设施
  • 无效的声网账户(收费注册)

注:如果你的网络环境部署了防火墙,请依据声网文档核心的「利用企业防火墙限度」关上相干端口。

筹备开发环境

本节介绍如何创立我的项目,并将声网 SDK 集成至你的我的项目中。

创立 macOS 我的项目

参考以下步骤创立一个 macOS 我的项目。若已有 macOS 我的项目,能够跳脱这一步,间接查看本文「集成 SDK」大节。

  1. 关上 Xcode 并点击 Create a new Xcode project。
  2. 抉择我的项目类型为 Cocoa App,并点击 Next。
  3. 输出我的项目信息,如项目名称、开发团队信息、组织名称和语言,并点击 Next。

如果你没有增加过开发团队信息,会看到 Add account… 按钮。点击该按钮并依照屏幕提示登入 Apple ID,实现后即可抉择你的账户作为开发团队。

  1. 抉择我的项目存储门路,并点击 Create。
  2. 进入 TARGETS > Project Name > General > Signing 菜单,抉择 Automatically manage signing,并在弹出菜单中点击 Enable Automatic。

集成 SDK

抉择如下任意一种形式将声网 SDK 集成到你的我的项目中。

办法一:应用 CocoaPods 主动集成

  1. 开始前确保你已装置 Cocoapods。参考 Getting Started with CocoaPods 装置阐明。
  2. 在 Terminal 里进入我的项目根目录,并运行 pod init 命令。我的项目文件夹下会生成一个 Podfile 文本文件。
  3. 关上 Podfile 文件,批改文件为如下内容。留神将 Your App 替换为你的 Target 名称。

    # platform :macOS, '10.11' use_frameworks!
    target 'Your App' do
      pod 'AgoraRtcEngine_macOS'
    end
  4. 在 Terminal 内运行 pod update 命令更新本地库版本。
  5. 运行 pod install 命令装置声网 SDK。胜利装置后,Terminal 中会显示 Pod installation complete!,此时我的项目文件夹下会生成一个 xcworkspace 文件。
  6. 关上新生成的 xcworkspace 文件。

办法二:手动复制 SDK 文件

  1. 返回 SDK 下载页面,获取最新版的声网 SDK,而后解压。
  2. 将 libs 文件夹内的 AgoraRtcEngineKit.framework 文件复制到我的项目文件夹下。
  3. 关上 Xcode,进入 TARGETS > Project Name > Build Phases > Link Binary with Libraries 菜单,点击 + 增加如下库。在增加 AgoraRtcEngineKit.framework 文件时,还需在点击 + 后点击 Add Other…,找到本地文件并关上。
  4. AgoraRtcEngineKit.framework

    1. Accelerate.framework
    2. CoreWLAN.framework
    3. libc++.dylib
    4. libresolv.9.tbd
    5. SystemConfiguration.framework
    6. VideoToolbox.framework

增加媒体设施权限

  1. 依据场景须要,关上 Xcode,在 info.plist 文件中,点击 + 图标开始增加如下内容,获取相应的设施权限:
  2. 若你的我的项目已启用 App Sandbox 或 Hardened Runtime 设置,则需勾选如下内容,获取相应的设施权限:

实现 音视频通话

本节介绍如何实现音视频通话。视频通话的 API 调用时序见下图:

1. 创立用户界面

依据场景须要,为你的我的项目创立音视频通话的用户界面。若已有用户界面,能够间接查看导入类。

如果你想实现一个视频通话,咱们举荐你增加如下 UI 元素:

  • 本地视频窗口
  • 远端视频窗口
  • 完结通话按钮

当你应用示例我的项目中的 UI 设计时,你将会看到如下界面:

2. 导入类

在我的项目中导入 AgoraRtcEngineKit 类:

// Objective-C
#import <AgoraRtcEngineKit/AgoraRtcEngineKit.h>
// Swift
import AgoraRtcEngineKit

声网 Native SDK 默认应用 libc++ (LLVM),如需应用 libstdc++ (GNU),请分割 [email protected]。SDK 提供的库是 Fat Image,蕴含 32/64 位模拟器、32/64 位真机版本。

3. 初始化 AgoraRtcEngineKit

在调用其余声网 API 前,须要创立并初始化 AgoraRtcEngineKit 对象。

你须要在该步骤中填入我的项目的 App ID。请参考如下步骤在控制台创立声网我的项目并获取 App ID。

  1. 登录控制台
  2. 点击创立,依照屏幕提示设置 "我的项目名""应用场景",鉴权机制,在测试阶段能够抉择 “调试模式:APP ID” 而后点击提交。
  3. 在项目管理页面,你能够获取该项目标 App ID

调用 sharedEngineWithAppId 办法,传入获取到的 App ID,即可初始化 AgoraRtcEngineKit

你还能够依据场景须要,在初始化时注册想要监听的回调事件,如本地用户退出频道及解码远端用户视频首帧等。

// Objective-C
- (void)initializeAgoraEngine {
    // 输出 App ID 并初始化 AgoraRtcEngineKit 类
    self.agoraKit = [AgoraRtcEngineKit sharedEngineWithAppId:appID delegate:self];
}
// Swift
func initializeAgoraEngine() {
   // 输出 App ID 并初始化 AgoraRtcEngineKit 类。agoraKit = AgoraRtcEngineKit.sharedEngine(withAppId: AppID, delegate: self)
}

4. 设置本地视图

如果你想实现一个语音通话,能够间接查看退出频道。

胜利初始化 AgoraRtcEngineKit 对象后,须要在退出频道前设置本地视图,以便在通话中看到本地图像。参考以下步骤设置本地视图:

  • 调用 enableVideo 办法启用视频模块。
  • 调用 setupLocalVideo 办法设置本地视图。

    // Objective-C
    // 启用视频模块
  • (void)setupLocalVideo {
    AgoraRtcVideoCanvas *videoCanvas = [[AgoraRtcVideoCanvas alloc] init];
    videoCanvas.uid = 0;
    videoCanvas.view = self.localVideo;
    videoCanvas.renderMode = AgoraVideoRenderModeHidden;
    // 设置本地视图
    [self.agoraKit setupLocalVideo:videoCanvas];
    }
    // Swift
    // 启用视频模块
    agoraKit.enableVideo()
    func setupLocalVideo() {
    let videoCanvas = AgoraRtcVideoCanvas()
    videoCanvas.uid = 0
    videoCanvas.view = localVideo
    videoCanvas.renderMode = .hidden
    // 设置本地视图
    agoraKit.setupLocalVideo(videoCanvas)
    }

    ### 5. 退出频道

实现初始化和设置本地视图后(视频通话场景),你就能够调用 joinChannelByToken 办法退出频道。你须要在该办法中传入如下参数:

  • channelId : 传入能标识频道的频道 ID。输出频道 ID 雷同的用户会进入同一个频道。
  • token:传入能标识用户角色和权限的 Token。可设为如下一个值:

若我的项目已启用 App 证书,请应用 Token。

  • nil
  • 长期 Token。长期 Token 服务有效期为 24 小时。你能够在控制台里生成一个长期 Token,详见获取长期 Token。
  • 在你的服务器端生成的 Token。在平安要求高的场景下,咱们举荐你应用此种形式生成的 Token,详见生成 Token。
  • uid : 本地用户的 ID。数据类型为整型,且频道内每个用户的 uid 必须是惟一的。若将 uid 设为 0,则 SDK 会主动调配一个 uid,并在 joinSuccessBlock 回调中报告。
  • joinSuccessBlock:胜利退出频道回调。joinSuccessBlock 优先级高于 didJoinChannel,2 个同时存在时,didJoinChannel 会被疏忽。须要有 didJoinChannel 回调时,请将 joinSuccessBlock 设置为 nil

更多的参数设置注意事项请参考 joinChannelByToken 接口中的参数形容。

// Objective-C
- (void)joinChannel {
    // 退出频道
    [self.agoraKit joinChannelByToken:token channelId:@"demoChannel1" info:nil uid:0 joinSuccess:^(NSString *channel, NSUInteger uid, NSInteger elapsed) {}];
}
// Swift
func joinChannel() {
    // 退出频道
    agoraKit.joinChannel(byToken: Token, channelId: "demoChannel1", info:nil, uid:0) {[unowned self] (channel, uid, elapsed) -> Void in}
    self.isLocalVideoRender = true
            self.logVC?.log(type: .info, content: "did join channel")
        }
        isStartCalling = true
}

6. 设置远端视图

视频通话中,通常你也须要看到其余用户。在退出频道后,可通过调用 setupRemoteVideo 办法设置远端用户的视图。

远端用户胜利退出频道后,SDK 会触发 firstRemoteVideoDecodedOfUid 回调,该回调中会蕴含这个远端用户的 uid 信息。在该回调中调用 setupRemoteVideo 办法,传入获取到的 uid,设置远端用户的视图。

// Objective-C
// 监听 firstRemoteVideoDecodedOfUid 回调。// SDK 接管到第一帧远端视频并胜利解码时,会触发该回调。// 能够在该回调中调用 setupRemoteVideo 办法设置远端视图。- (void)rtcEngine:(AgoraRtcEngineKit *)engine firstRemoteVideoDecodedOfUid:(NSUInteger)uid size: (CGSize)size elapsed:(NSInteger)elapsed {if (self.remoteVideo.hidden) {self.remoteVideo.hidden = NO;}
    AgoraRtcVideoCanvas *videoCanvas = [[AgoraRtcVideoCanvas alloc] init];
    videoCanvas.uid = uid;
    videoCanvas.view = self.remoteVideo;
    videoCanvas.renderMode = AgoraVideoRenderModeHidden;
    // 设置远端视图
    [self.agoraKit setupRemoteVideo:videoCanvas];
}
// Swift
// 监听 firstRemoteVideoDecodedOfUid 回调。// SDK 接管到第一帧远端视频并胜利解码时,会触发该回调。// 能够在该回调中调用 setupRemoteVideo 办法设置远端视图。func rtcEngine(_ engine: AgoraRtcEngineKit, firstRemoteVideoDecodedOfUid uid:UInt, size:CGSize, elapsed:Int) {
        isRemoteVideoRender = true
        let videoCanvas = AgoraRtcVideoCanvas()
        videoCanvas.uid = uid
        videoCanvas.view = remoteVideo
        videoCanvas.renderMode = .hidden
        // 设置远端视图
        agoraKit.setupRemoteVideo(videoCanvas)
    }

7. 来到频道

依据场景须要,如完结通话、敞开 App 或 App 切换至后盾时,调用 leaveChannel 来到以后通话频道。

// Objective-C
- (void)leaveChannel {
    // 来到频道。[self.agoraKit leaveChannel:^(AgoraChannelStats *stat)
}
// Swift
func leaveChannel() {
// 来到频道
 AgoraKit.leaveChannel(nil)
 AgoraKit.setupLocalVideo(nil)
 remoteVideo.removeFromSuperview()
 localVideo.removeFromSuperview()
 delegate?.VideoChatNeedClose(self)
 AgoraKit = nil
 view.window!.close()}

示例代码

你能够在 Agora-macOS-Tutorial-Objective-C-1to1/Agora-macOS-Tutorial-Swift-1to1 示例我的项目的 VideoChatViewController.m/VideoChatViewController.swift 文件中查看残缺的源码和代码逻辑。

运行 / 测试项目

你能够在 macOS 设施中运行此我的项目。当胜利开始视频通话时,你能够同时看到本地和远端的视图。


如果遇到问题,能够在 RTE 开发者社区 发帖发问。

正文完
 0