CloudHub 文档中心
下载中心 文档中心

RTC 实时音视频


快速集成 SDK

准备

将 CloudHubRTC.framework 文件添加到工程中

配置工程文件

1.将 CloudHubRTC.framework 加入工程

2.修改 CloudHubRTC.framework 的引用设置,General–>Frameworks, Libraries, and Embedded Content image

3.工程配置修改(Build Settings) 1.Build Optins->Enable Bitcode->修改为NO image

2.Linkink->Other Linker Flage 添加 **-all_load** 和 **-ObjC**
![image](/images/whiteboard/ios/whiteboard-ios_sdk-linkflag.jpg)

4.添加依赖库 Build Phases->Link Binary With Libaries 添加必要依赖库: libc++.tbd image

添加设备权限

CloudHubRTC 会使用 iOS 设备的麦克风和摄像头,因此需要在工程的 info.plist 文件中添加权限申请

实现音视频功能

1.导入类

在调用 CloudHubRTC API 前,你需要在项目中导入 CloudHubRTC 类,并定义一个 rtcEngine 变量,声明 CloudHubRtcEngineDelegate,用于监听回调


// ViewController.h

// 导入 CloudHubRTC 类
#import <CloudHubRTC/CloudHubRTC.h>

// 声明 CloudHubRtcEngineDelegate,用于监听回调
@interface ViewController : UIViewController <CloudHubRtcEngineDelegate>
// 定义 rtcEngine 变量
@property (nonatomic, strong) CloudHubRtcEngineKit *rtcEngine;

2. 初始化 CloudHubRtcEngineKit 对象,并设置代理

调用 sharedEngineWithAppId:config: 创建并初始化 CloudHubRtcEngineKit 对象。你需要将 YourAppID 替换为你在管理后台获取的 App ID。详见获取 App ID

self.rtcEngine = [CloudHubRtcEngineKit sharedEngineWithAppId:@"Your App Id" config:nil];
self.rtcEngine.delegate = self;

3. 设置频道场景

调用 setChannelProfile 方法

[self.cloudHubRtcEngineKit setChannelProfile:<#(CloudHubChannelProfile)#>];

4. 进入频道

调用 joinChannelByToken:channelId:properties:uid:autosubscribeAudio:autoSubscribeVideo:joinSuccess: 方法

你需要将 YourToken 替换成你自己生成的 Token,并将 YourChannelId 替换为你的频道 ID

[self.rtcEngine joinChannelByToken:@"YourToken" channelId:@"YourChannelId" properties:nil uid:@"YourUserId" autosubscribeAudio:YES autoSubscribeVideo:YES joinSuccess:nil];

5. 处理频道内回调

参考 CloudHubRtcEngineDelegate

- (void)       rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
   didJoinChannelwithUid:(NSString * _Nonnull)uid
                 elapsed:(NSInteger) elapsed
{
    // 进入频道成功
    // 启⽤音频/视频模块 (订阅前提条件)
    [engine enableAudio];
    [engine enableVideo];

    // 开启本地音频/视频采集 (发布前提条件)
    [engine enableLocalAudio:YES];
    [engine enableLocalVideo:YES];
}
- (void)rtcEngine:(CloudHubRtcEngineKit *)engine didOccurError:(CloudHubErrorCode)errorCode withMessage:(NSString *)message;
- (void)       rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
 didReJoinChannelwithUid:(NSString * _Nonnull)uid
                 elapsed:(NSInteger) elapsed;

6. 本地发布流

调用 publishStream 发布本地音视频流

[self.rtcEngine publishStream];

7. 订阅远端视频流

当远端有用户发布流时,本地会收到该回调。在改回调中可以调用 startPlayingRemoteVideo:streamId:renderMode:mirrorMode: 播放该用户流, Your View 可以设置为自定义的 UIView

- (void)            rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine
 remoteVideoStateChangedOfUid:(NSString * _Nonnull)uid
                     streamId:(NSString * _Nonnull)streamId
                         type:(CloudHubMediaType)type
                        state:(CloudHubVideoRemoteState)state
                       reason:(CloudHubVideoRemoteStateReason)reason
{
    [self.rtcEngine startPlayingRemoteVideo:@"Your View" streamId:streamId renderMode:CloudHubVideoRenderModeHidden mirrorMode:CloudHubVideoMirrorModeDisabled];
}

8. 离开频道

调用 leaveChannel 离开当前频道

[self.rtcEngine leaveChannel:nil];

当离开频道后,会触发离开频道回调 rtcEngine:didLeaveChannel

- (void)rtcEngine:(CloudHubRtcEngineKit * _Nonnull)engine didLeaveChannel:(CloudHubChannelStats * _Nonnull)stats;

具体参照 示例程序源码下载