本文介绍如何实现 iOS 开播 SDK 的基础功能。
在 Xcode 的 App Target 中,打开定义如何进入直播间的文件并添加以下代码:
说明
通过调用 CreateActivityAPIV2 或 ListActivityAPI 获取直播间的活动 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;