产品百科 |Ali RTC iOS 基本功能介绍

简介: 阿里云 RTC 的基本功能包含初始化 SDK、加入频道、本地发布和订阅远端、离开频道等。当您成功初始化 SDK,您可以进行本地预览视频功能,进行简单的预览和测试。当您操作本地发布和订阅远端时,可以设置手动或者自动模式。

前提条件

在实现基本功能前,请您确保下载最新 SDK,请参见 SDK 下载

获得加入频道必须的频道鉴权令牌(Token):

  • 您可以在控制台生成临时 Token 校验加入频道是否成功,详情请参见控制台生成 Token
  • 在安全要求更高的场景下,建议您在服务端生成 Token,详情请参见服务端生成 Token

说明 本文中的实现方法为主要功能方法,仅供参考,您可以根据业务需求进行实际开发。

操作步骤

  1. 请您先初始化 SDK。首先您需要创建 AliRtcEngine 实例,并注册 AliRtcEngineDelegate 监听相关回调。如果您在 ViewController 中持有 AliRtcEngine 实例,请声明属性。
@interface ViewController () <AliRtcEngineDelegate>
@property (nonatomic, strong) AliRtcEngine *engine;
@end

iOS 回调详情请参见回调及监听

self.engine = [AliRtcEngine sharedInstance:self extras:@""];

说明目前 SDK 暂不支持多实例

  1. 本地预览。在创建完 AliRtcEngine 实例后,您可以创建 canvas 布局进行本地预览视频。
AliVideoCanvas *canvas = [[AliVideoCanvas alloc] init];
canvas.renderMode = AliRtcRenderModeAuto;
canvas.view = (AliRenderView *)view; /* 预览窗口view */
canvas.mirrorMode = AliRtcRenderMirrorModeOnlyFrontCameraPreviewEnabled;
[self.engine setLocalViewConfig:canvas forTrack:AliRtcVideoTrackCamera];
[self.engine startPreview];

您也可以取消本地预览。

[self.engine stopPreview];

说明

  • AliRtcRenderMode 提供四种渲染模式。
  • (推荐)AliRtcRenderModeAuto:自动模式。
  • AliRtcRenderModeStretch:拉伸填充视图,不保持视频比例。
  • AliRtcRenderModeFill:在保持视频宽高比的同时缩放,填充黑边。
  • AliRtcRenderModeCrop:在保持视频宽高比的同时缩放,并裁剪以适合视图。
  • view 必须是 AliRenderView 或者其子类。
  • AliRtcRenderMirrorMode 在本地或远端均可设置镜像模式,并提供三种镜像模式。
  • AliRtcRenderMirrorModeOnlyFrontCameraPreviewEnabled:只有前置摄像头预览镜像,其余不镜像。
  • AliRtcRenderMirrorModeAllEnabled:全部镜像。
  • AliRtcRenderMirrorModeAllDisabled:全部不镜像。
  1. 设置自动或者手动模式。说明阿里云 RTC iOS 端默认实现自动发布和订阅,您也可以通过代码手动发布和订阅
  • 自动发布模式: 如果您打开自动发布模式,加入频道之后,SDK 将自动开始发布音视频流;如果关闭自动发布模式,则需要您调用 publish 接口之后才会发布音视频流。
  • 自动订阅模式: 如果您打开自动订阅模式,加入频道之后,SDK 将会自动订阅当前频道内其他人的音视频流;如果关闭自动订阅模式,则需要您调用 subscribe 接口之后才会订阅其他人的音视频流。
/*
设置自动发布和订阅,只能在加入频道之前配置。
autoPublish:是否自动发布。取值:YES|NO。
autoSubscribe:是否自动订阅。取值:YES|NO。
*/ 
[self.engine setAutoPublish:YES withAutoSubscribe:YES];
  1. 加入频道。
AliRtcAuthInfo *authinfo = [[AliRtcAuthInfo alloc]init];
authinfo.channel   = /* 您的channelId */;
authinfo.appid     = /* 您的Appid */;
authinfo.nonce     = /* 您的nonce */;
authinfo.user_id   = /* 您的userId */;
authinfo.token     = /* 您的token */;
authinfo.timestamp = /* 您的timestamp */;
authinfo.gslb      = /* 您的gslb地址 */;
[self.engine joinChannel:authinfo name:/* userName */ onResult:^(NSInteger errCode){
    // 加入频道UI处理
}];
  1. 发布或取消发布本地流。发布本地流。
  • 自动发布模式下:加入频道成功后,即可发布本地流,无需再次调用 publish 接口。
  • 手动发布模式下:加入频道成功后,可通过以下接口发布本地流。

如果发布过程中需要变更配置或者停止发布,需要按如下流程先重新设置配置参数,然后再调用 publish 接口。

//YES表示允许发布音频流,NO表示不允许。
[self.engine configLocalAudioPublish:YES];
//YES表示允许发布相机流,NO表示不允许。
[self.engine configLocalCameraPublish:YES];
//YES表示允许发布次要视频流;NO表示不允许。
[self.engine configLocalSimulcast:YES forTrack:AliRtcVideoTrackCamera];
[self.engine publish:^(int err) {
}];

取消发布本地流。

[self.engine configLocalAudioPublish:NO];
[self.engine configLocalCameraPublish:NO];
[self.engine configLocalSimulcast:NO forTrack:AliRtcVideoTrackCamera];
[self.engine publish:^(int err) {
}];
  1. 订阅或取消订阅远程流。订阅远程流。
  • 自动订阅模式下:加入频道成功后,即可订阅远端流,无需再次调用 subscribe 接口。
  • 手动订阅模式下:加入频道成功后,可通过以下接口订阅远端流。

如果订阅过程中需要变更配置或者停止订阅,需要按如下流程先重新设置配置参数,然后再调用 subscribe 接口。

//YES表示允许订阅音频流,NO表示不允许。
[self.engine configRemoteAudio:/* remoteUserID */ enable:YES];
//YES表示允许订阅屏幕流,NO表示不允许。
[self.engine configRemoteScreenTrack:/* remoteUserID */ enable:YES];
//第二个参数:YES表示优先拉取大流。
//第三个参数:YES表示允许订阅相机流,NO表示不允许。
[self.engine configRemoteCameraTrack:/* remoteUserID */ preferMaster:YES enable:YES];
[self.engine subscribe:/* remoteUserID */ onResult:^(NSString *uid, AliRtcVideoTrack vt, AliRtcAudioTrack at) {
}];

无论是自动模式还是非自动模式,当您订阅成功后,通过 delegate 可以获取订阅的 callback,然后您可以进行相关 UI 操作或逻辑处理。

- (void)onSubscribeChangedNotify:(NSString *)uid audioTrack:(AliRtcAudioTrack)audioTrack videoTrack:(AliRtcVideoTrack)videoTrack {
    dispatch_async(dispatch_get_main_queue(), ^{
        // UI或者逻辑处理,例如渲染远端视频流的操作如下。
        if(videoTrack & AliRtcVideoTrackCamera) {
        // camera track
        AliVideoCanvas *canvas = [[AliVideoCanvas alloc] init];
        canvas.renderMode = /* renderMode */;
        canvas.view = (AliRenderView *)view;/* 渲染view */
        [self.engine setRemoteViewConfig:canvas uid:uid forTrack:AliRtcVideoTrackCamera];
      }
    });
}

您可以通过下述 delegate 回调监听远端用户的流状态变更。例如,手动模式下,收到此回调后,可以获取到远端用户的发布状态,然后相应做出订阅(subscribe)操作,或者更新 UI 等。

- (void)onRemoteTrackAvailableNotify:(NSString *)uid audioTrack:(AliRtcAudioTrack)audioTrack videoTrack:(AliRtcVideoTrack)videoTrack {
}

取消订阅远程流。

[self.engine configRemoteAudio:/* remoteUserID */ enable:NO];
[self.engine configRemoteScreenTrack:/* remoteUserID */ enable:NO];
[self.engine configRemoteCameraTrack:/* remoteUserID */ preferMaster:YES enable:NO];
[self.engine subscribe:/* remoteUserID */ onResult:^(NSString *uid, AliRtcVideoTrack vt, AliRtcAudioTrack at) {
}];
  1. 离开频道。
[self.engine leaveChannel];

您可以下载示例代码,快速跑通 Demo,实现频道内和其他人进行实时音视频通话,详情请参见 iOS Demo


「视频云技术」你最值得关注的音视频技术公众号,每周推送来自阿里云一线的实践技术文章,在这里与音视频领域一流工程师交流切磋。

image.png


相关文章
|
6月前
|
存储 数据建模 iOS开发
iOS设备功能和框架: 什么是 Core Data,它在 iOS 中的作用是什么?
iOS设备功能和框架: 什么是 Core Data,它在 iOS 中的作用是什么?
100 1
|
6月前
|
定位技术 iOS开发
iOS设备功能和框架: 如何使用 Core Location 获取设备的位置信息?
iOS设备功能和框架: 如何使用 Core Location 获取设备的位置信息?
74 0
|
监控 Android开发 iOS开发
盘点一对一直播源码iOS系统维持平台稳定功能(一):弹性扩缩容
参考代码:弹性扩缩容如何实现?System.out.println("扩容:增加直播平台实例"); currentCapacity++; } private void scaleDown() { System.out.println("缩容:减少直播平台实例");
盘点一对一直播源码iOS系统维持平台稳定功能(一):弹性扩缩容
|
移动开发 安全 前端开发
提升iOS应用安全性:全面代码混淆功能介绍,使用Ipa Guard保护你的应用
iOS加固保护是直接针对ios ipa二进制文件的保护技术,可以对iOS APP中的可执行文件进行深度混淆、加密。使用任何工具都无法逆向、破解还原源文件。对APP进行完整性保护,防止应用程序中的代码及资源文件被恶意篡改。Ipa Guard通过修改 ipa 文件中的 macho 文件中二进制数据(代码模块配置)进行操作,无需源码。不限定开发技术平台。支持oc,swift,cocos2d-x、unity3d、quick-cocos,html5 ,react native等等各种开发技术。Ipa Guard主要包含代码混淆全面、资源文件处理、不需要源代码更安全、调试信息清理、即时测试运行。
|
移动开发 前端开发 iOS开发
记录一下前端H5的复制功能在ios端的兼容性问题
记录一下前端H5的复制功能在ios端的兼容性问题
985 0
|
24天前
|
安全 Android开发 iOS开发
Android vs iOS:探索移动操作系统的设计与功能差异###
【10月更文挑战第20天】 本文深入分析了Android和iOS两个主流移动操作系统在设计哲学、用户体验、技术架构等方面的显著差异。通过对比,揭示了这两种系统各自的独特优势与局限性,并探讨了它们如何塑造了我们的数字生活方式。无论你是开发者还是普通用户,理解这些差异都有助于更好地选择和使用你的移动设备。 ###
46 3
|
4月前
|
人工智能 搜索推荐 iOS开发
苹果发布iOS 18 Beta 4,新增CarPlay 壁纸等多项功能改进
本文首发于公众号“AntDream”,探索iOS 18 Beta 4新功能与改进: CarPlay壁纸、iCloud设置访问优化、相机控制记忆、隐藏文件夹设计变更、深色/浅色模式图标同步、股票应用图标调整、iPhone镜像功能增强、控制中心蓝牙切换键、AssistiveTouch新增Type to Siri等,以及Apple Intelligence暗示。开发者可通过苹果计划提前体验。
101 12
|
6月前
|
Android开发 数据安全/隐私保护 iOS开发
ios和安卓测试包发布网站http://fir.im的注册与常用功能
ios和安卓测试包发布网站http://fir.im的注册与常用功能
278 0
ios和安卓测试包发布网站http://fir.im的注册与常用功能
|
6月前
|
机器学习/深度学习 PyTorch TensorFlow
iOS设备功能和框架: 什么是 Core ML?如何在应用中集成机器学习模型?
iOS设备功能和框架: 什么是 Core ML?如何在应用中集成机器学习模型?
178 0