本文介绍在iOS端通过低代码集成(含UI)方式实现主播端推流和观众端观看直播的功能。
背景信息
主播端推流和观众端观看是互动直播的基础场景。从集成的角度看,两个场景是独立于彼此的。用户可根据业务需要选择集成两个场景或其中一个场景。例如,只需要集成主播端推流的用户可以只集成主播端,避免接入不需要的模块而增加包大小。
前提条件
客户端集成前,请确保已经通过控制台创建应用并获取客户端集成需要的信息(应用ID,APP Key,低代码集成服务地址,低代码集成服务密钥)。创建指引请参见创建应用。
环境要求
- 设备类型:支持iPhone和iPad所有型号。
- CPU架构:支持armv7、arm64、x86_64架构,不支持i386架构。
- 系统版本:支持iOS 10.0及以上版本。
- 其他:不支持bitcode,不支持屏幕旋转。
主播端推流
- 基于CocoaPods添加SDK依赖。将下列依赖库添加到已有的
Podfile
中。其中AliStandardLiveRoomBundle
是低代码集成(含UI)方式下互动直播的入口库,其他都是AliStandardLiveRoomBundle
需要依赖的库。pod 'Masonry' pod 'AliStandardLiveRoomBundle', '1.8.0' pod 'AliInteractiveRoomBundle', '1.8.0' pod 'AliInteractiveLiveCore', '1.8.0' pod 'AliInteractiveFaceBeautyCore', '1.8.0' pod 'AlivcLivePusher', '4.4.1' pod 'Queen', '1.9.1-official-pro'
说明 美颜库Queen的'1.9.1-official-pro'版本是免授权的高级美颜版本,详情请参见美颜特效SDK。 - 配置应用权限。主播推流直播需要获取设备本身的摄像头使用权限、麦克风的使用权限、WIFI网络的使用权限。请在Xcode工程本身的
plist
文件中主动配置以下三项:Key Value Privacy - Camera Usage Description Use camera Privacy - Microphone Usage Description Use microphone Application uses Wi-Fi YES 配置后效果如下所示:
- 接入代码。
- 添加头文件引用。
#import <AliStandardLiveRoomBundle/AliStandardLiveRoomBundle.h> #import <Masonry/Masonry.h>
- 全局初始化。需要传入控制台创建应用后获得的应用ID、对应iOS端的APP Key、低代码集成服务地址,低代码集成服务密钥。示例代码
[[ASLRBLiveRoomManager sharedInstance] globalInitOnceWithConfig:({ ASLRBAppInitConfig *config = [[ASLRBAppInitConfig alloc]init]; config.appID = [NSString stringWithFormat:@"%@", @"<应用ID>"]; //必传,在控制台创建低代码互动直播应用后获取的应用ID; config.appKey = [NSString stringWithFormat:@"%@", @"<APP Key>"];//必传,在控制台创建低代码互动直播应用后获取的iOS端的App Key; config.appServerUrl = [NSString stringWithFormat:@"%@", @"<低代码集成服务地址>"];//必传,在控制台创建低代码互动直播应用后获取的低代码集成服务地址; config.appServerSignSecret = [NSString stringWithFormat:@"%@", @"<低代码集成服务密钥>"];//必传,在控制台创建低代码互动直播应用后获取的低代码集成服务密钥; config.userID = @"<用户ID>"; //必传,自定义用户ID,必须是英文字母或者阿拉伯数字或者二者组合; config.userNick = @"<用户昵称>"; //必传,支持任意字符; config; }) onSuccess:^{ NSLog(@""); } onFailure:^(NSString * _Nonnull errorMessage) { NSLog(@""); }];
- 全局初始化成功后,获取
ASLRBLiveRoomViewController
实例并进行初始化。注意 主播端集成成功后,回调中会返回liveID。请记录liveID作为观众端集成的必要输入。示例代码__weak typeof(self) weakSelf = self; [[ASLRBLiveRoomManager sharedInstance] createLiveRoomVCWithConfig:({ ASLRBLiveInitConfig* config = [[ASLRBLiveInitConfig alloc] init]; config.liveID = @"<您的liveID>"; //低代码集成场景下主播侧liveID非必传,为空时内部会自动创建新直播 config.role = ASLRBUserRoleAnchor; //主播侧必填ASLRBUserRoleAnchor config; }) onSuccess:^(ASLRBLiveRoomViewController * _Nonnull liveRoomVC) { [weakSelf setupLiveRoomViewController:liveRoomVC]; } onFailure:^(NSString * _Nonnull errorMessage) { NSLog(@"获取直播ViewController失败:%@", errorMessage); }]; -(void) setupLiveRoomViewController:(ASLRBLiveRoomViewController*) liveRoomVC { // 设置delegate liveRoomVC.delegate = self; // setup [liveRoomVC setupOnSuccess:^(NSString * _Nonnull liveID) { // 成功后记录当前直播ID,作为观众端集成的必要输入 weakSelf.liveID = liveID; } onFailure:^(NSString * _Nonnull errorMessage) { NSLog(@"样板间setup失败:%@", errorMessage); }]; }
- 实现
ASLRBLiveRoomViewControllerDelegate
,对当前ASLRBLiveRoomViewController
实例抛出的事件和报错进行监听。示例代码- (void) onASLRBLiveRoomEventInViewController:(ASLRBLiveRoomViewController *)liveRoomVC liveRoomEvent:(ASLRBEvent)liveRoomEvent info:(nonnull NSDictionary *)info { switch (liveRoomEvent) { case ASLRBCommonEventShareButtonDidClicked :{ } break; case ASLRBCommonEventExitButtonDidClicked:{ } break; case ASLRBAnchorEventLivePusherStarted:{ } break; case ASLRBCommonEventLiveDataUpdated:{ //直播间的数据更新会在这里处理,包括点赞数、实时在线人数、uv等 } break; default: break; } } - (void)onASLRBLiveRoomErrorInViewController:(nonnull ASLRBLiveRoomViewController *)liveRoomVC liveRoomError:(ASLRBLiveRoomError)liveRoomError withErrorMessage:(nonnull NSString *)errorMessage { }
- 直播
ViewController
初始化成功后,在某个父ViewController
中push
当前ASLRBLiveRoomViewController
。// 在主线程上push当前直播ViewController dispatch_async(dispatch_get_main_queue(), ^{ [weakSelf.navigationController pushViewController:liveRoomVC animated:YES]; });
执行结果至此,您已搭建好一个完整的互动直播的主播端直播推流逻辑。Xcode编译并在真机运行后可以看到开始直播界面(如下左图所示)。点击开始直播后进入直播界面(如右图所示)。 - 添加头文件引用。
观众观看直播
- 基于CocoaPods添加SDK依赖。将下列依赖库添加到已有的
Podfile
中。其中AliStandardLiveRoomBundle
是低代码集成(含UI)方式下互动直播的入口库,其他都是AliStandardLiveRoomBundle
需要依赖的库。pod 'Masonry' pod 'AliStandardLiveRoomBundle', '1.8.0' pod 'AliInteractiveRoomBundle', '1.8.0' pod 'AliInteractiveVideoPlayerCore', '1.8.0' pod 'AliPlayerSDK_iOS', '5.4.4.0' pod 'AliPlayerSDK_iOS_ARTC', '5.4.4.0' pod 'RtsSDK', '1.9.0'
说明 如需同时集成播放器SDK和短视频SDK,将下面代码中的AliPlayerSDK_iOS替换成AliPlayerPartSDK_iOS。AliPlayerPartSDK_iOS不包含ffmpeg,避免了与短视频SDK中的ffmpeg的冲突。 - 接入代码。
- 添加头文件引用。
#import <AliStandardLiveRoomBundle/AliStandardLiveRoomBundle.h> #import <Masonry/Masonry.h>
- 全局初始化。需要传入控制台创建应用后获得的应用ID、对应iOS端的APP Key、低代码集成服务地址,低代码集成服务密钥。示例代码
[[ASLRBLiveRoomManager sharedInstance] globalInitOnceWithConfig:({ ASLRBAppInitConfig *config = [[ASLRBAppInitConfig alloc]init]; config.appID = [NSString stringWithFormat:@"%@", @"<应用ID>"]; //必传,在控制台创建低代码互动直播应用后获取的应用ID; config.appKey = [NSString stringWithFormat:@"%@", @"<APP Key>"];//必传,在控制台创建低代码互动直播应用后获取的iOS端的APP Key; config.appServerUrl = [NSString stringWithFormat:@"%@", @"<低代码集成服务地址>"];//必传,在控制台创建低代码互动直播应用后获取的低代码集成服务地址; config.appServerSignSecret = [NSString stringWithFormat:@"%@", @"<低代码集成服务密钥>"];//必传,在控制台创建低代码互动直播应用后获取的低代码集成服务密钥; config.userID = @"<用户ID>"; //必传,自定义用户id,必须是英文字母或者阿拉伯数字或者二者组合; config.userNick = @"<用户昵称>"; //必传,支持任意字符; config; }) onSuccess:^{ NSLog(@""); } onFailure:^(NSString * _Nonnull errorMessage) { NSLog(@""); }];
- 全局初始化成功后,获取
ASLRBLiveRoomViewController
实例并进行初始化。示例代码注意 观众端集成时,liveID为必传参数。其获取方式与您的集成场景有关,详情如下:- 如果您集成了本产品的主播端,并记录了回调信息中的liveID值,可直接填写记录的值。
- 如果您集成了本产品的主播端,但没有记录回调信息中的liveID值,可调用GetLiveRoom - 获取直播详情接口获取应用下所有的直播信息。然后选取对应liveID值填写。
- 如果您未使用本产品的主播端,可调用CreateLiveRoom - 创建直播接口,填写与您直播间相关的必要信息。然后使用接口返回的liveID值填写。
[[ASLRBLiveRoomManager sharedInstance] createLiveRoomVCWithConfig:({ ASLRBLiveInitConfig* config = [[ASLRBLiveInitConfig alloc] init]; config.liveID = @"<您的liveID>"; //在观众侧,liveID必传,如果独立集成,请填入您的直播ID;如果配合本产品主播端集成,liveID可在主播端集成完后获取;详细信息请参见上述注意事项。 config.role = ASLRBUserRoleAudience; //观众侧必填ASLRBUserRoleAudience config; }) onSuccess:^(ASLRBLiveRoomViewController * _Nonnull liveRoomVC) { [weakSelf setupLiveRoomViewController:liveRoomVC]; } onFailure:^(NSString * _Nonnull errorMessage) { NSLog(@"获取直播ViewController失败:%@", errorMessage); }]; -(void) setupLiveRoomViewController:(ASLRBLiveRoomViewController*) liveRoomVC { // 设置delegate liveRoomVC.delegate = weakSelf; // setup [liveRoomVC setupOnSuccess:^(NSString * _Nonnull liveID) { // 成功后记录当前直播ID weakSelf.liveID = liveID; } onFailure:^(NSString * _Nonnull errorMessage) { NSLog(@"样板间setup失败:%@", errorMessage); }]; }
- 实现
ASLRBLiveRoomViewControllerDelegate
,对当前ASLRBLiveRoomViewController
实例抛出的事件和报错进行监听。示例代码- (void) onASLRBLiveRoomEventInViewController:(ASLRBLiveRoomViewController *)liveRoomVC liveRoomEvent:(ASLRBEvent)liveRoomEvent info:(nonnull NSDictionary *)info { switch (liveRoomEvent) { case ASLRBCommonEventShareButtonDidClicked :{ } break; case ASLRBCommonEventExitButtonDidClicked:{ } break; case ASLRBAnchorEventLivePusherStarted:{ } break; case ASLRBCommonEventLiveDataUpdated:{ //直播间的数据更新会在这里处理,包括点赞数、实时在线人数、uv等 } break; default: break; } } - (void)onASLRBLiveRoomErrorInViewController:(nonnull ASLRBLiveRoomViewController *)liveRoomVC liveRoomError:(ASLRBLiveRoomError)liveRoomError withErrorMessage:(nonnull NSString *)errorMessage { }
ASLRBLiveRoomViewController
实例初始化成功后,在某个父ViewController
中push
当前ASLRBLiveRoomViewController
。// 在主线程上push当前直播ViewController dispatch_async(dispatch_get_main_queue(), ^{ [weakSelf.navigationController pushViewController:liveRoomVC animated:YES]; });
执行结果至此,您已搭建好一个完整的互动直播观众端播流(观看直播)逻辑。Xcode编译并在真机运行后可以看到以下界面。 - 添加头文件引用。
主播端或观众端观看直播回放
- 基于CocoaPods添加SDK依赖。将下列依赖库添加到已有的
Podfile
中。其中AliStandardLiveRoomBundle
是低代码集成(含UI)方式下互动直播的入口库,其他都是AliStandardLiveRoomBundle
需要依赖的库。pod 'Masonry' pod 'AliStandardLiveRoomBundle', '1.8.0' pod 'AliInteractiveRoomBundle', '1.8.0' pod 'AliInteractiveVideoPlayerCore', '1.8.0' pod 'AliPlayerSDK_iOS', '5.4.4.0'
- 接入代码。
- 添加头文件引用。
#import <AliStandardLiveRoomBundle/AliStandardLiveRoomBundle.h> #import <Masonry/Masonry.h>
- 全局初始化。需要传入控制台创建应用后获得的应用ID、对应iOS端的APP Key、低代码集成服务地址,低代码集成服务密钥。示例代码
[[ASLRBLiveRoomManager sharedInstance] globalInitOnceWithConfig:({ ASLRBAppInitConfig *config = [[ASLRBAppInitConfig alloc]init]; config.appID = [NSString stringWithFormat:@"%@", @"<应用ID>"]; //必传,在控制台创建低代码互动直播应用后获取的应用ID; config.appKey = [NSString stringWithFormat:@"%@", @"<APP Key>"];//必传,在控制台创建低代码互动直播应用后获取的iOS端的APP Key; config.appServerUrl = [NSString stringWithFormat:@"%@", @"<低代码集成服务地址>"];//必传,在控制台创建低代码互动直播应用后获取的低代码集成服务地址; config.appServerSignSecret = [NSString stringWithFormat:@"%@", @"<低代码集成服务密钥>"];//必传,在控制台创建低代码互动直播应用后获取的低代码集成服务密钥; config.userID = @"<用户ID>"; //必传,自定义用户id,必须是英文字母或者阿拉伯数字或者二者组合; config.userNick = @"<用户昵称>"; //必传,支持任意字符; config; }) onSuccess:^{ NSLog(@""); } onFailure:^(NSString * _Nonnull errorMessage) { NSLog(@""); }];
- 全局初始化成功后,获取
ASLRBLiveRoomViewController
实例并进行初始化。示例代码[[ASLRBLiveRoomManager sharedInstance] createLiveRoomVCWithConfig:({ ASLRBLiveInitConfig* config = [[ASLRBLiveInitConfig alloc] init]; config.liveID = @"<您的liveID>"; //要看回放的liveID,必传,必须是已经结束的直播; config.role = ASLRBUserRoleAudience 或者 ASLRBUserRoleAnchor 均可 config.enableLivePlayback = YES; //必须设置 config; }) onSuccess:^(ASLRBLiveRoomViewController * _Nonnull liveRoomVC) { [weakSelf setupLiveRoomViewController:liveRoomVC]; } onFailure:^(NSString * _Nonnull errorMessage) { NSLog(@"获取直播ViewController失败:%@", errorMessage); }]; -(void) setupLiveRoomViewController:(ASLRBLiveRoomViewController*) liveRoomVC { // 设置delegate liveRoomVC.delegate = weakSelf; // setup [liveRoomVC setupOnSuccess:^(NSString * _Nonnull liveID) { } onFailure:^(NSString * _Nonnull errorMessage) { NSLog(@"样板间setup失败:%@", errorMessage); }]; }
- 实现
ASLRBLiveRoomViewControllerDelegate
,对当前ASLRBLiveRoomViewController
实例抛出的事件和报错进行监听。示例代码- (void) onASLRBLiveRoomEventInViewController:(ASLRBLiveRoomViewController *)liveRoomVC liveRoomEvent:(ASLRBEvent)liveRoomEvent info:(nonnull NSDictionary *)info { switch (liveRoomEvent) { case ASLRBCommonEventShareButtonDidClicked :{ } break; case ASLRBCommonEventExitButtonDidClicked:{ } break; case ASLRBAnchorEventLivePusherStarted:{ } break; case ASLRBCommonEventLiveDataUpdated:{ //直播间的数据更新会在这里处理,包括点赞数、实时在线人数、uv等 } break; default: break; } } - (void)onASLRBLiveRoomErrorInViewController:(nonnull ASLRBLiveRoomViewController *)liveRoomVC liveRoomError:(ASLRBLiveRoomError)liveRoomError withErrorMessage:(nonnull NSString *)errorMessage { }
ASLRBLiveRoomViewController
实例初始化成功后,在某个父ViewController
中push
当前ASLRBLiveRoomViewController
。// 在主线程上push当前直播ViewController dispatch_async(dispatch_get_main_queue(), ^{ [weakSelf.navigationController pushViewController:liveRoomVC animated:YES]; });
执行结果至此,您已搭建好一个完整的互动直播观看回放的逻辑。Xcode编译并在真机运行后可以看到以下界面。 - 添加头文件引用。
后续步骤
低代码集成(含UI)场景下,完成主播端及观众端集成即可使用互动直播产品。如果低代码形态的功能无法满足业务需求,您可以通过进阶开发实现更高级的功能。详情请参见互动直播进阶开发。