说明:TUIKit 5.0.10 版本开始基于 TRTC 实现了支持直播功能的 TUIKit_live UI 组件。
在您的项目导入 TUIKit 后,仅需简单的几步就可以快速启用直播功能。如果您还没有导入 TUIKit ,请根据 步骤2:导入TUIKit 中的方式导入 tuikit
和 tuiki-live
。
TUIKit_live 直播UI组件集成后的直播效果:
直播广场页 | 主播准备页 | 主播开播页 |
---|---|---|
说明:系统将为您在 实时音视频控制台 创建一个与当前 IM 应用相同 SDKAppID 的实时音视频应用,二者帐号与鉴权可复用。
建议使用源码集成 tuikit
和 tuikit-live
,以便于您修改源码满足自身的业务需求。
将 tuikit
和 tuikit-live
代码拷贝到自己项目中,在 settings.gradle
引入 tuikit
和 tuikit-live module
,最后在自己项目中导入依赖。
implementation project(':tuikit')
implementation project(':tuikit-live')
初始化 TUIKit 需要传入 步骤1 生成的 SDKAppID,并调用 login
登录,其中 UserSig 生成的具体操作请参见 如何计算 UserSig。
TUIKitConfigs config = new ConfigHelper().getConfigs();
TUIKit.init(this, SDKAPPID, config);
TUIKit.login(userID, userSig, new IUIKitCallBack() {
@Override
public void onError(String module, final int code, final String desc) {
// 登录失败
}
@Override
public void onSuccess(Object data) {
// 登录成功
}
});
创建主播端,您需要创建 TUILiveRoomAnchorLayout
并设置一个唯一的 roomid,即可开播。
TUILiveRoomAnchorLayout layoutTuiLiverRomAnchor = findViewById(R.id.tui_liveroom_anchor_layout);
// 接收主播创建成功/退出 回调
layoutTuiLiverRomAnchor.setLiveRoomAnchorLayoutDelegate(this);
// roomId:123456,观众端也需要设置和主播端一样的roomid才可以看到该主播。这里的roomid仅用于测试,实际应该生成一个唯一的值。
layoutTuiLiverRomAnchor.initWithRoomId(getSupportFragmentManager(), 12345);
创建观众端,您需要创建 TUILiveRoomAudienceLayout
并设置和主播端一致的 roomId 即可观看该主播的直播。
TUILiveRoomAudienceLayout roomAudienceLayout = findViewById(R.id.layout_room_audience);
// 初始化观众页,设置与主播端一致的 roomId,即可观看该主播的直播,anchorId为主播id
// useCDN 可以先设置成 false,如果您有CDN播放的需求,可以参照后面章节
roomAudienceLayout.initWithRoomId(getSupportFragmentManager(), 12345, “1280”, false, “”);
现在,您已经拥有了主播端和观众端,还需要一个直播房间列表将两者关联起来。
由于房间列表千差万别,我们暂时未提供服务端房间列表搭建示例,您可以参考 Demo 中的 RoomManager
来实现客户端上报的逻辑。
主播端创建成功后,在主播端回调函数中,上报开播、停播信息。
// TUILiveRoomAnchorLayoutDelegate
// 创建房间成功回调
public void onRoomCreate(final TRTCLiveRoomDef.TRTCLiveRoomInfo roomInfo) {
// 上报新的直播间创建成功
RoomManager.getInstance().createRoom(roomInfo.roomId, RoomManager.TYPE_LIVE_ROOM, null);
}
// 退出/停止直播回调
public void onRoomDestroy(TRTCLiveRoomDef.TRTCLiveRoomInfo roomInfo) {
// 销毁房间
RoomManager.getInstance().destroyRoom(roomInfo.roomId, RoomManager.TYPE_LIVE_ROOM, null);
}
创建直播大厅页 UI:
直播大厅页用于展示直播列表,具体实现请参考 Demo 中 LiveRoomFragment.java
的实现。
单击观看:
在直播大厅页单击任意直播间,参照 步骤5:观众端观看直播 生成观看端即可观看。
创建观众端 TUILiveRoomAudienceLayout 时,如果设置 useCdn 为 false,则默认使用 TRTC 进行观看;如果设置 useCdn 为 true,且设置了 cdnDomain,则会采用 CDN 进行观看。
TRTC 采用 UDP 协议进行传输音视频数据,标准直播 CDN 则采用的 RTMP/HLS/FLV 等协议进行数据传输。TRTC 的特点是延迟低,上下麦体验更加流畅,但价格会比标准直播的 CDN 高。
若您对观看延迟要求不高,可以使用 CDN 观看,以降低成本。
已开通腾讯 云直播 服务。应国家相关部门的要求,直播播放必须配置播放域名,具体操作请参考 添加自有域名。
// eg: 假设您的 配置播放域名并完成 CNAME 中设置的域名为 my.com,那么默认播放 URL 为 http://[播放域名]/live/[sdkappid]_[roomId]_[userID]_main.flv
TUILiveRoomAudienceLayout roomAudienceLayout = findViewById(R.id.layout_room_audience);
roomAudienceLayout.initWithRoomId(getSupportFragmentManager(), 12345, "12565", true, "http://[播放域名]/live/[sdkappid]_[roomId]_[userID]_main.flv");
注意:更多关于 TRTC 旁路直播的介绍,可以查看 实现 CDN 直播观看 和 云端混流服务。
TUIKit_live SDK 支持用户自定义礼物,如果修改礼物内容或来源时,请在 TUIKit_live 的 DefaultGiftAdapterImp.java
文件中修改服务器请求地址,或者请求逻辑;仅需保证最后返回的数据与现在的数据格式一致即可。
//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 功能,仅需完成以下两个步骤:
在主播端创建 TUILiveRoomAnchorLayout 时开启 PK。
TUILiveRoomAnchorLayout layoutTuiLiverRomAnchor = findViewById(R.id.tui_liveroom_anchor_layout);
mLayoutTuiLiverRomAnchor.initWithRoomId(getSupportFragmentManager(), 12345);
// 开启PK
layoutTuiLiverRomAnchor.enablePK(true);
layoutTuiLiverRomAnchor.setLiveRoomAnchorLayoutDelegate(this);
在主播端 TUILiveRoomAnchorLayout 的回调函数中 getRoomPKList 设置 PK 列表数据。
public void getRoomPKList(final TUILiveRoomAnchorLayout.OnRoomListCallback callback) {
/// 如果您创建的房间需要PK功能,在这个回调通过 callback 返回可以PK的主播房间id数组。
RoomManager.getInstance().getRoomList(RoomManager.TYPE_LIVE_ROOM, new RoomManager.GetRoomListCallback() {
@Override
public void onSuccess(List<String> roomIdList) {
if (callback != null) {
callback.onSuccess(roomIdList);
}
}
@Override
public void onFailed(int code, String msg) {
}
});}
调用CreateHybridCluster创建一个混合云集群。 调试 您可以在OpenAPI Explorer中...
简单下载是通过OSS API的 GetObject 接口,下载已经上传的文件(Object),Objec...
加密数据盘后,数据盘上的动态数据传输以及静态数据都会被加密。 创建实例时加密...
本文转载自微信公众号「程序员漫画编程」,作者程序职场 。转载本文请联系程序员...
河南省网站在哪备案?河南 网站备案 要在你购买服务器的服务商网站进行,比如你...
调用DeleteParameter删除普通参数 调试 您可以在OpenAPI Explorer中直接运行该接...
前几天项目经理提了个需求要实现点击刷新按钮实现页面的局部刷新,刷新页面使用谷...
阿里云AnalyticDB 下文简称 ADB 满足了我们营销SAAS平台海量数据实时分析秒级返...
之前的一篇文章给大家介绍过了何为微服务:图文详解:如何给女朋友解释什么是微...
【51CTO.com原创稿件】10月25日,以智同道合,数创未来为主题的第一届数据分析技...