SDK 文档

服务端 API

开启直播大厅(iOS)

最近更新时间:2020-10-28 17:35:31

说明:

TUIKit 5.0.10 版本开始基于 TRTC 实现了支持直播功能的 TUIKit_live UI 组件。

在您的项目导入 TUIKit 后,仅需简单的几步就可以快速启用直播功能。如果您还没有导入 TUIKit ,请根据 步骤2:导入TUIKit 中的 pods 方式导入 TUIKit ,默认就会导入 TUIKit_live 直播 UI 组件。

TUIKit_live 直播UI组件集成后的直播效果:

直播广场页 主播准备页 主播开播页

步骤1:开通音视频服务

  1. 登录 即时通信 IM 控制台 ,单击目标应用卡片,进入应用的基础配置页面。
  2. 单击【开通腾讯实时音视频服务】区域的【立即开通】。
  3. 在弹出的开通实时音视频 TRTC 服务对话框中,单击【确认】。
    说明:

    系统将为您在 实时音视频控制台 创建一个与当前 IM 应用相同 SDKAppID 的实时音视频应用,二者帐号与鉴权可复用。

步骤2:初始化并登录 TUIKit

初始化 TUIKit 需要传入 步骤1 生成的 SDKAppID,并调用 login 登录,其中 UserSig 生成的具体操作请参见 如何计算 UserSig

[[TUIKit sharedInstance] setupWithAppId:SDKAppID];
[[TUIKit sharedInstance] login:@"userID" userSig:@"userSig" succ:^{
     NSLog(@"-----> 登录成功");
} fail:^(int code, NSString *msg) {
     NSLog(@"-----> 登录失败");
}];

步骤3:主播端开播

创建主播端,您需要创建 TUILiveRoomAnchorViewController 并设置一个唯一的 roomid,即可开播。

#import "TUIKitLive.h"
/// roomId:123456,观众端需要设置和主播端一样的 roomid 才可以看到直播。这里的 roomid 仅用于测试,实际应该生成一个唯一的值。
TUILiveRoomAnchorViewController *anchorVC = 
[[TUILiveRoomAnchorViewController alloc] initWithRoomId:123456];
/// 接收主播创建成功/退出 回调
anchorVC.delegate =  self ; 
[anchorVC eanblePK: NO];
/// push/present 展示主播页viewController
[self.navigationController pushViewController:anchorVC animated: YES];

步骤4:观众端观看直播

创建观众端,您需要创建 TUILiveRoomAudienceViewController 并设置和主播端一致的 roomId 即可观看该主播的直播。

#import "TUIKitLive.h"
/// 初始化观众页,设置与主播端一致的 roomId,即可观看该主播的直播。
/// useCDN 可以先设置成 NO,如果您有CDN播放的需求,可以参照后面章节
/// anchorId 该直播间的主播userId,建议设置,选填
/// cdnUrl cdn播放地址,eg:http://[播放域名]/live/[sdkappid]_[roomId]_[userID]_main.flv
TUILiveRoomAudienceViewController *audienceVC =
[[TUILiveRoomAudienceViewController alloc] initWithRoomId:123456
                         anchorId:nil
                           useCdn:NO
                           cdnUrl:@""];
/// 根据项目的情况,push/present 展示观众页viewController
[self.navigationController pushViewController:anchorVC animated: YES];

步骤5:实现直播大厅

现在,您已经拥有了主播端和观众端,还需要一个直播房间列表将两者关联起来。

  • 主播端创建房间成功后,将房间 ID 记录到后端。
  • 主播端销毁房间后,后端同步销毁房间 ID。
  • 观众端通过后端拉取到房间 ID 列表,单击后进入对应房间。

由于房间列表千差万别,我们暂时未提供后端房间列表搭建示例,您可以参考 Demo 中的 TUILiveRoomManager 来实现客户端上报的逻辑。

  1. 主播端创建成功后,在主播端回调函数中,上报开播、停播信息。
#pragma mark  - TUILiveRoomAnchorDelegate**
/// 创建房间成功回调
- (void)onRoomCreate:(TRTCLiveRoomInfo *roomInfo) {
    NSSTring *roomId = roomInfo.roomId;
    /// 上报新的直播间创建成功
    [TUILiveRoomManager.sharedManager createRoom:sdkAppId 
                        type:@"liveRoom" 
                         success:nil
                          failed:nil];
}

/// 退出/停止直播回调
- (void)onRoomDestroy:(TRTCLiveRoomInfo *roomInfo) {
    NSSTring *roomId = roomInfo.roomId;
    /// 上报直播间销毁
  [TUILiveRoomManager.sharedManager destroyRoom:sdkAppId 
                          type:@"liveRoom"
                    success:nil 
                     failed:nil];
}
  1. 创建直播大厅页 UI:
    直播大厅页用于展示直播列表,具体实现请参考 Demo 中 TUILiveRoomListViewController 的实现。
  2. 单击观看:
    在直播大厅页点击任意直播间,参照 步骤4:观众端观看直播 生成观看端即可观看。

步骤6:使用直播 CDN 观看

创建观众端 TUILiveRoomAudienceViewController 时,如果设置 useCdn 为 NO,则默认使用 TRTC 进行观看;如果设置 useCdn 为 YES,且设置了 cdnUrl,则会采用 CDN 进行观看。

TRTC 采用 UDP 协议进行传输音视频数据,标准直播 CDN 则采用的 RTMP/HLS/FLV 等协议进行数据传输。TRTC 的特点是延迟低,上下麦体验更加流畅,但价格会比标准直播的 CDN 高。

如果您对观看延迟要求不高,可以使用 CDN 观看,以降低成本。

前提条件

已开通腾讯 云直播 服务。应国家相关部门的要求,直播播放必须配置播放域名,具体操作请参考 添加自有域名

开启旁路推流功能

  1. 登录 实时音视频控制台
  2. 在左侧导航栏选择【应用管理】,单击目标应用所在行的【功能配置】。
  3. 在【旁路推流配置】中,单击【启用旁路推流】右侧的,在弹出的【开启旁路推流功能】对话框中,单击【开启旁路推流功能】即可开通。

配置播放域名

  1. 登录 云直播控制台
  2. 单击【添加域名】,输入您已经备案过的播放域名,选择域名类型为【播放域名】,选择加速区域(默认为【中国大陆】),单击【确定】即可。

观众端进入观看时传入播放 URL

当您开通好旁路推流后,主播端已经为您自动推流到云端。当观众端在观看的时候,需要您传入 CDN 直播的 URL。

/// eg: 假设您的 配置播放域名并完成 CNAME 中设置的域名为 my.com,那么默认播放 URL 为 http://[播放域名]/live/[sdkAppId]_[roomId]_[userId]_main.flv
/// 
TUILiveRoomAudienceViewController *audienceVC = 
[[TUILiveRoomAudienceViewController alloc] initWithRoomId:123456 
                         anchorId:nil 
                           useCdn:YES 
                           cdnUrl:@"http://[播放域名]/live/[sdkAppId]_[roomId]_[userId]_main.flv"];
注意:

更多关于 TRTC 旁路直播的介绍,可以查看 实现 CDN 直播观看云端混流服务

常见问题

遇到主播开播没有画面,怎么解决?

开直播需要使用摄像头,麦克风,需要向用户请求开启摄像头,麦克风使用权限。
使用 Xcode【打开项目】>【单击工程文件】>【选中当前的 Target】>【单击 Info 页面】,添加 NSCameraUsageDescription 和 NSMicrophoneUsageDescription 描述。

在手机上运行项目后,在【手机设置】>【隐私】>【相机+麦克风】>【给当前应用打开权限】。

如何自定义礼物?

TUIKit_live SDK 支持用户自定义礼物,如果修改礼物内容或来源时,请在 TUIKit_live 中的 TUILiveDefaultGiftAdapterImp.m 文件中修改服务器请求地址,或者请求逻辑;仅需保证最后返回的数据与现在的数据格式一致即可。

//eg 数据格式,完整参考链接:https://liteav-test-1252463788.cos.ap-guangzhou.myqcloud.com/gift_data.json,json字符串内容如下:
{
  "giftList": [
    {
      "giftId": "1", // 礼物id,每个礼物对应一个唯一的礼物id
      "giftImageUrl": "https://8.url.cn/huayang/resource/now/new_gift/1590482989_25.png", // 礼物面板上显示图片
      "lottieUrl": "https://assets5.lottiefiles.com/packages/lf20_t9v3tO.json", // 对应大礼物动画文件
      "price": 2989, // 礼物虚拟物品价格
      "title": "火箭", // 礼物标题
      "type": 1 // 礼物类型:1 大礼物,全屏展示  2 小礼物,消息列表顶部动效展示
    },
    {
      "giftId": "2",
      "giftImageUrl": "https://8.url.cn/huayang/resource/now/new_gift/1507876726_3",
      "lottieUrl": "",
      "price": 298,
      "title": "鸡蛋",
      "type": 0
    }
}

如何实现 PK?

如果您希望实现 PK 功能,仅需完成以下两个步骤:

  1. 在主播端创建 TUILiveRoomAnchorViewController 时开启 PK。
TUILiveRoomAnchorViewController *anchorVC = 
[[TUILiveRoomAnchorViewController alloc] initWithRoomId:123456];
anchorVC.delegate = self;
///  开启PK
[anchorVC eanblePK: YES];
  1. 在主播端 TUILiveRoomAnchorViewController 的回调函数中 getPKRoomIDList: 设置 PK 列表数据。
- (void)getPKRoomIDList:(TUILiveOnRoomListCallback)callback {
    /// 如果您创建的房间需要PK功能,在这个回调通过 callback 返回可以PK的主播房间id数组。
       callback(@[@"12345", @"123456"]);
}
目录