You need to enable JavaScript to run this app.
导航
基础功能
最近更新时间:2024.08.15 23:20:52首次发布时间:2023.06.05 21:38:35

本文介绍如何实现 iOS 开播 SDK 的基础功能。

前提条件

  • 您已集成 iOS 开播 SDK。详见 集成 iOS 开播 SDK
  • 如果您需要使用美颜、滤镜和道具贴纸功能,联系企业直播技术支持获取计算机视觉(CV)License 以及资源包。
  • 如果您需要使用录屏直播功能,请先获取屏幕共享扩展的唯一标识(Bundle Identifier)以及 App Group 的唯一标识(Container ID)。详见进阶功能

进入直播间

在 Xcode 的 App Target 中,打开定义如何进入直播间的文件并添加以下代码:

说明

通过调用 CreateActivityAPIV2ListActivityAPI 获取直播间的活动 ID,调用 GetTemporaryLoginTokenAPI 获取开播密钥。

#import <BDLive/BDLive.h>
// 1. 创建 BDLLiveStreamingModel 实例
BDLLiveStreamingModel *model = [[BDLLiveStreamingModel alloc] init];
// 1.1 输入获取到的直播间活动 ID 和开播密钥
model.activityId = ACTIVITY_ID; // 将 ACTIVITY_ID 替换为直播间活动 ID
model.secretKey = SECRET_KEY; // 将 SECRET_KEY 替换为开播密钥

// 1.2 (可选)配置美颜、滤镜和道具贴纸功能。通过离线或在线方式获取授权。如需自定义美颜、滤镜和道具贴纸,详见进阶功能
model.effectConfig = [[BDLEffectConfig alloc] init];
// 离线授权
model.effectConfig.licenseMode = BDLEffectConfigLicenseModeOffline;
model.effectConfig.licenseFilePath = [[NSBundle mainBundle] pathForResource:@"CV_LICENSE_NAME" ofType:@"licbag"]; //  将 CV_LICENSE_NAME 替换为 CV License 文件的名称
// 在线授权
model.effectConfig.licenseMode = BDLEffectConfigLicenseModeOnline;
model.effectConfig.key = @"KEY"; // 将 KEY 替换为您的业务标识,对应开通的业务类型。请联系技术支持获取
model.effectConfig.secret = @"SECRET"; // 将 SECRET 替换为您的业务密钥,业务密钥可在创建业务时同业务标识一起获得。请联系技术支持获取

// 1.3(可选)配置是否显示指定按钮
BDLFeatureEntranceConfiguration *featureEntranceConfig = BDLLiveStreaming.sharedInstance.liveStreamingConfiguration.featureEntranceConfig;
featureEntranceConfig.showBeautyEntrance = YES; // 是否显示美颜入口按钮。YES:显示。确保您已完成 1.2 的配置美颜、滤镜和道具贴纸功能。NO:不显示。默认值:YES
featureEntranceConfig.showPropsEntrance = YES; // 是否显示道具入口按钮。YES:显示。确保您已完成 1.2 的配置美颜、滤镜和道具贴纸功能。NO:不显示。默认值:YES
featureEntranceConfig.showCloudTemplateEntrance = YES; // 是否显示模板入口按钮。YES:显示。NO:不显示。默认值:YES
featureEntranceConfig.showPendentEntrance = YES; // 是否显示挂件和图层入口按钮。YES:显示。NO:不显示,并关闭模板功能,即不显示模板入口按钮、不支持新增和编辑模板。默认值:YES
featureEntranceConfig.showSwitchCamera = YES; // 是否显示前后摄像头翻转入口按钮。YES:显示。NO:不显示。默认值:YES
featureEntranceConfig.showRotateScreen = YES; // 是否显示横竖屏切换入口按钮。YES:显示。NO:不显示。默认值:YES
featureEntranceConfig.showChangeResolution = YES; // 是否显示清晰度切换入口按钮。YES:显示。NO:不显示。默认值:YES
featureEntranceConfig.showMediaMergeEntrance = NO; // 是否显示媒体合流入口按钮。YES:显示。NO:不显示。默认值:NO
featureEntranceConfig.showTextMergeEntrance = NO; // 是否显示文字合流入口按钮。YES:显示。NO:不显示。默认值:NO

// 1.4 (可选)配置是否支持新增和编辑模板
featureEntranceConfig.editCloudTemplateEnable = YES; // 是否支持新增和编辑模板。YES:支持,即便 showCloudTemplateEntrance 取值为 NO,也会显示模板入口按钮。NO:不支持。默认值:YES

// 1.5 (可选)配置是否支持编辑直播间信息
featureEntranceConfig.editLiveInfoEnable = YES; // 是否支持编辑直播间的横屏封面和标题。YES:支持。NO:不支持。默认值:NO

// 1.6(可选)配置录屏直播功能。该功能仅适用于 iOS 12 及以上版本。有关如何实现该功能的详细信息,请参考进阶功能 > 录屏直播
if (@available(iOS 12.0, *)) {
   model.extensionBundleId = @"BUNDLE_ID"; // 将 BUNDLE_ID 替换为屏幕共享扩展的 Bundle Identifier
   model.groupId = @"GROUP_ID"; // 将 GROUP_ID 替换为 App group 的 Container ID
}

// 1.7(可选)自定义评论 cell。您可以自定义评论的文字内容、样式或替换表情图片。以下示例代码在评论区中增加随机字符串
BDLSCommentViewConfiguration *commentViewConfig = BDLLiveStreaming.sharedInstance.liveStreamingConfiguration.commentViewConfig;
commentViewConfig.customizeCommentCell = ^(BDLStreamingCommentView * _Nonnull view, BDLStreamCommentCell * _Nonnull commentViewCell, BDLPollingChatModel * _Nonnull comment) {
    // 创建随机字符串
    NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:[NSString stringWithFormat:@"%02d ", arc4random() % 100] attributes:@{
        NSFontAttributeName : [UIFont systemFontOfSize:14],
        NSForegroundColorAttributeName : [UIColor redColor]
    }];
    // 拼接现有评论区内容
    if (commentViewCell.textView.attributedText) {
        [attrStr appendAttributedString:commentViewCell.textView.attributedText];
    }
    // 将新的 attributeString 传入 cell
    commentViewCell.textView.attributedText = attrStr;
};

// 2. 进入直播间
[[BDLLiveStreaming sharedInstance] joinLiveStreamingWithModel:model
                                                      success:^(void) {
    // 3. 如果成功进入直播间,获取直播间页面
    BDLLiveStreamingController *livePushVC = [[BDLLiveStreaming sharedInstance] getLiveStreamingController];
    livePushVC.modalPresentationStyle = UIModalPresentationFullScreen;
    // 3.1 设置直播间代理,监听直播间变化。详见设置直播间事件回调
    livePushVC.delegate = self;
   
    // 3.2(可选)配置直播间。详见自定义配置
     
    // 4. 显示直播间 ViewController(livePushVC) 
    [self presentViewController:livePushVC animated:YES completion:^{
        [BDLDFloatLogView bringFloatToFrontIfNeeded];
    }];
    
} failure:^(NSError * _Nonnull error) {
    // Handle error
}];
// MARK: - BDLLivePushControllerDelegate
// 在代理中关闭直播间页面
- (void)liveStreamingControllerCloseButtonDidClick:(BDLLiveStreamingController *)controller {
    [controller dismissViewControllerAnimated:YES completion:^{
            
    }];
}

自定义配置

添加自定义组件

在直播间提供一个撑满屏幕且层级在当前界面元素之上的UI区域,供您添加自定义组件。

/// 内容视图,可添加自定义组件。大小和 liveStreamingVC.view 相同
@property (nonatomic, strong) UIView *contentView;

/// 可以通过以下方式添加自定义组件
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(14, 100, 100, 100)];
[liveStreamingVC.contentView addSubview:view];

设置是否显示评论区

设置开播后是否显示评论区的消息和输入框。

/// 设置是否显示评论视图,默认显示
@property (nonatomic, copy, nullable) __kindof UIView *_Nullable (^customizedCommentView)(UIView *commentView);

/// 不显示评论视图
self.customizedCommentView = ^__kindof UIView * _Nullable(UIView * _Nonnull commentView) {
     return nil;
 };

设置直播间事件回调

在代理中,设置回调监听直播间变化。

/// 在直播间需要被关闭时触发该回调。您应该在该回调中关闭直播间 
- (void)liveStreamingControllerCloseButtonDidClick:(BDLLiveStreamingController *)controller;
/// 在屏幕朝向改变时触发该回调
- (void)liveStreamingController:(BDLLiveStreamingController *)controller orientationDidChange:(UIInterfaceOrientation)orientation;
/// 在直播开始时触发该回调。此时会隐藏开始直播和顶部的功能按钮,并改变美颜图标的位置
- (void)liveStreamingControllerDidStartStreaming:(BDLLiveStreamingController *)controller;
/// 在直播结束时触发该回调
- (void)liveStreamingControllerDidEndStreaming:(BDLLiveStreamingController *)controller;

/// 生命周期回调,分别对应 viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear 和 viewDidDisappear 方法
- (void)liveStreamingControllerDidLoad:(BDLLiveStreamingController *)controller;
- (void)liveStreamingControllerWillAppear:(BDLLiveStreamingController *)controller animated:(BOOL)animated;
- (void)liveStreamingControllerDidAppear:(BDLLiveStreamingController *)controller animated:(BOOL)animated;
- (void)liveStreamingControllerWillDisappear:(BDLLiveStreamingController *)controller animated:(BOOL)animated;
- (void)liveStreamingControllerDidDisappear:(BDLLiveStreamingController *)controller animated:(BOOL)animated;