本文介绍在iOS端通过低代码集成(含UI)方式实现主播端推流和观众端观看直播的功能。

背景信息

主播端推流和观众端观看是互动直播的基础场景。从集成的角度看,两个场景是独立于彼此的。用户可根据业务需要选择集成两个场景或其中一个场景。例如,只需要集成主播端推流的用户可以只集成主播端,避免接入不需要的模块而增加包大小。

前提条件

客户端集成前,请确保已经通过控制台创建应用并获取客户端集成需要的信息(应用ID,APP Key,低代码集成服务地址,低代码集成服务密钥)。创建指引请参见创建应用

环境要求

  • 设备类型:支持iPhone和iPad所有型号。
  • CPU架构:支持armv7、arm64、x86_64架构,不支持i386架构。
  • 系统版本:支持iOS 10.0及以上版本。
  • 其他:不支持bitcode,不支持屏幕旋转。

主播端推流

  1. 基于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
  2. 配置应用权限。
    主播推流直播需要获取设备本身的摄像头使用权限、麦克风的使用权限、WIFI网络的使用权限。请在Xcode工程本身的plist文件中主动配置以下三项:
    Key Value
    Privacy - Camera Usage Description Use camera
    Privacy - Microphone Usage Description Use microphone
    Application uses Wi-Fi YES

    配置后效果如下所示:

    权限开通
  3. 接入代码。
    1. 添加头文件引用。
      #import <AliStandardLiveRoomBundle/AliStandardLiveRoomBundle.h>
      #import <Masonry/Masonry.h>
    2. 全局初始化。需要传入控制台创建应用后获得的应用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(@"");
      }];
    3. 全局初始化成功后,获取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);
          }];
      }
    4. 实现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 {
      }
    5. 直播ViewController初始化成功后,在某个父ViewControllerpush当前ASLRBLiveRoomViewController
      // 在主线程上push当前直播ViewController
      dispatch_async(dispatch_get_main_queue(), ^{
          [weakSelf.navigationController pushViewController:liveRoomVC animated:YES];
      });
    执行结果
    至此,您已搭建好一个完整的互动直播的主播端直播推流逻辑。Xcode编译并在真机运行后可以看到开始直播界面(如下左图所示)。点击开始直播后进入直播界面(如右图所示)。iOS低代码互动直播页面

观众观看直播

  1. 基于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的冲突。
  2. 接入代码。
    1. 添加头文件引用。
      #import <AliStandardLiveRoomBundle/AliStandardLiveRoomBundle.h>
      #import <Masonry/Masonry.h>
    2. 全局初始化。需要传入控制台创建应用后获得的应用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(@"");
      }];
    3. 全局初始化成功后,获取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);
          }];
      }
    4. 实现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 {
      }
    5. ASLRBLiveRoomViewController实例初始化成功后,在某个父ViewControllerpush当前ASLRBLiveRoomViewController
      // 在主线程上push当前直播ViewController
      dispatch_async(dispatch_get_main_queue(), ^{
          [weakSelf.navigationController pushViewController:liveRoomVC animated:YES];
      });
    执行结果
    至此,您已搭建好一个完整的互动直播观众端播流(观看直播)逻辑。Xcode编译并在真机运行后可以看到以下界面。iOS互动直播观众端

主播端或观众端观看直播回放

  1. 基于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'
  2. 接入代码。
    1. 添加头文件引用。
      #import <AliStandardLiveRoomBundle/AliStandardLiveRoomBundle.h>
      #import <Masonry/Masonry.h>
    2. 全局初始化。需要传入控制台创建应用后获得的应用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(@"");
      }];
    3. 全局初始化成功后,获取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);
          }];
      }
    4. 实现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 {
      }
    5. ASLRBLiveRoomViewController实例初始化成功后,在某个父ViewControllerpush当前ASLRBLiveRoomViewController
      // 在主线程上push当前直播ViewController
      dispatch_async(dispatch_get_main_queue(), ^{
          [weakSelf.navigationController pushViewController:liveRoomVC animated:YES];
      });
    执行结果
    至此,您已搭建好一个完整的互动直播观看回放的逻辑。Xcode编译并在真机运行后可以看到以下界面。直播回放样式

后续步骤

低代码集成(含UI)场景下,完成主播端及观众端集成即可使用互动直播产品。如果低代码形态的功能无法满足业务需求,您可以通过进阶开发实现更高级的功能。详情请参见互动直播进阶开发