说明:TUIKit 5.0.10 版本开始基于 TRTC 实现了支持直播功能的 TUIKit_live UI 组件。
在您的项目导入 TUIKit 后,仅需简单的几步就可以快速启用直播功能。如果您还没有导入 TUIKit ,请根据 步骤2:导入TUIKit 中的 pods 方式导入 TUIKit ,默认就会导入 TUIKit_live 直播 UI 组件。
TUIKit_live 直播UI组件集成后的直播效果:
直播广场页 | 主播准备页 | 主播开播页 |
---|---|---|
说明:系统将为您在 实时音视频控制台 创建一个与当前 IM 应用相同 SDKAppID 的实时音视频应用,二者帐号与鉴权可复用。
初始化 TUIKit 需要传入 步骤1 生成的 SDKAppID,并调用 login
登录,其中 UserSig 生成的具体操作请参见 如何计算 UserSig。
[[TUIKit sharedInstance] setupWithAppId:SDKAppID];
[[TUIKit sharedInstance] login:@"userID" userSig:@"userSig" succ:^{
NSLog(@"-----> 登录成功");
} fail:^(int code, NSString *msg) {
NSLog(@"-----> 登录失败");
}];
创建主播端,您需要创建 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];
创建观众端,您需要创建 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];
现在,您已经拥有了主播端和观众端,还需要一个直播房间列表将两者关联起来。
由于房间列表千差万别,我们暂时未提供后端房间列表搭建示例,您可以参考 Demo 中的 TUILiveRoomManager
来实现客户端上报的逻辑。
#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];
}
TUILiveRoomListViewController
的实现。创建观众端 TUILiveRoomAudienceViewController 时,如果设置 useCdn 为 NO,则默认使用 TRTC 进行观看;如果设置 useCdn 为 YES,且设置了 cdnUrl,则会采用 CDN 进行观看。
TRTC 采用 UDP 协议进行传输音视频数据,标准直播 CDN 则采用的 RTMP/HLS/FLV 等协议进行数据传输。TRTC 的特点是延迟低,上下麦体验更加流畅,但价格会比标准直播的 CDN 高。
如果您对观看延迟要求不高,可以使用 CDN 观看,以降低成本。
已开通腾讯 云直播 服务。应国家相关部门的要求,直播播放必须配置播放域名,具体操作请参考 添加自有域名。
当您开通好旁路推流后,主播端已经为您自动推流到云端。当观众端在观看的时候,需要您传入 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 功能,仅需完成以下两个步骤:
TUILiveRoomAnchorViewController *anchorVC =
[[TUILiveRoomAnchorViewController alloc] initWithRoomId:123456];
anchorVC.delegate = self;
/// 开启PK
[anchorVC eanblePK: YES];
getPKRoomIDList:
设置 PK 列表数据。- (void)getPKRoomIDList:(TUILiveOnRoomListCallback)callback {
/// 如果您创建的房间需要PK功能,在这个回调通过 callback 返回可以PK的主播房间id数组。
callback(@[@"12345", @"123456"]);
}
今天看到一个很有意思的提问:(a+b)*10,10是存放在哪里的?是常量池么?如果是常...
分析任务的执行时间较长,一般需要数小时,详细的时长与环境资源类型、环境资源...
云原生的话题近几年异常火热,2011年网景创始人马克安德森曾说,软件正在吞噬世界,...
您可以通过阿里云动态Inventory动态获取指定过滤条件的主机信息。和其他Inventor...
完成日志采集规则配置后,可以在云日志控制台实时查看上报的日志。 前提条件 已...
如果企业没有将备份数据存储在云中,那么可能会落后于人。好消息是,企业当考虑...
本文介绍如何安装SharePoint 2016的具体步骤。 前提条件 已注册阿里云账号。如还...
一、活动对象 云服务器产品新用户,即在阿里云实名认证后首次购买ECS云服务器或...
请选择网格、集群及命名空间后进行观察。 请检查集群中是否正确安装ICAgent采集...
简介 开发人员每天都在处理一些大型而复杂的项目, 而配置文件会帮到我们并节省...