admin管理员组文章数量:1657388
前言
为什么想到对接腾讯云直播SDK呢?答案很简单--公司需要。从开始着手对接SDK,到现在直播全程流畅跑通,花了两周零几天的时间。为了帮后续也需要接入腾讯云直播SDK的朋友节省不必要的时间、少走点弯路,决定写下这篇文章,把我对接的全过程记录下来。
日期:2019/12/24
开发过程
1.接入SDK:
只需要导入以下两个SDK,直播和IM的,点播不需要导入SDK。
//腾讯云直播
implementation 'com.tencent.liteavsdk:LiteAVSDK_Smart:latest.release'
//腾讯云IM
implementation 'com.tencent.imsdk:imsdk:4.6.1'
注意:导入IM到项目中后,注意是否是最新版本,如果不是最新版本会显黄色,请根据提示修改成最新版本。
博主根据文档接入IMSDK的时候,就是因为没有导入最新版本的SDK,因此出了bug,浪费了一些时间!同样的坑请不要踩了。
2.初始化SDK:
按照我自己一直以来的习惯,但凡是接入第三方SDK,都会专门写一个工具类来操作,这里我创建的工具类是TXLiveUtils。
同样按照习惯,将初始化代码写在Application类的onCreate方法中(当然你也可以写在你的某个Activity里):
//腾讯云直播组件初始化
//初始化腾讯云直播工具类
TXLiveUtils.createInstance(this);
//初始化腾讯云直播SDK
TXLiveUtils.getInstance().initCloudSDK();
//初始化腾讯IMSDK
TXLiveUtils.getInstance().initIMSDK();
工具类代码:(核心干货)
/**
* @Description: 腾讯云直播工具
* @author: zhangshihao
* @date: 2019/12/6
*/
public class TXLiveUtils {
private static final String TAG = TXLiveUtils.class.getSimpleName();
private static TXLiveUtils instance;
private Context mContext;
private TXLivePusher txLivePusher;
private TXLivePushConfig txLivePushConfig;
private ITXLivePushListener itxLivePushListener;
private TIMManager timManager;
private String groupId;
private String liveId;
public static final int INVOKE_START_LIVE_FAILED = 100;//开始直播接口调用失败
public static final int SCREEN_RECORD_OPEN_FAILED = 101;//录屏开启失败
private long startTimestramp;//开播时间
public TXLiveUtils(Context context) {
this.mContext = context.getApplicationContext();
txLivePusher = new TXLivePusher(mContext);
txLivePushConfig = new TXLivePushConfig();
}
/**
* Application中调用 !* 不调用后续使用该工具类会报错 *!
*
* @param context
*/
public static void createInstance(Context context) {
if (instance == null) {
instance = new TXLiveUtils(context);
}
}
public static TXLiveUtils getInstance() {
return instance;
}
//初始化腾讯视频云sdk
public void initCloudSDK() {
TXLiveBase.getInstance().setLicence(mContext, Constant.LICENCE_URL, Constant.LICENCE_KEY);
}
/**
* 初始化IM SDK
* 初始化监听
* 初始化用户基础配置
*/
public void initIMSDK() {
timManager = TIMManager.getInstance();
//初始化 IM SDK 基本配置
//判断是否是在主线程
if (SessionWrapper.isMainProcess(mContext.getApplicationContext())) {
TIMSdkConfig config = new TIMSdkConfig(Integer.parseInt(Constant.TENCENT_CLOUD_LIVE_SDK_APPID))
.enableLogPrint(true)
.setLogLevel(TIMLogLevel.DEBUG)
.setLogPath(Environment.getExternalStorageDirectory().getPath() + "/crash-live/");
//初始化 SDK
TIMManager.getInstance().init(mContext.getApplicationContext(), config);
}
//初始化用户配置
//基本用户配置
TIMUserConfig userConfig = new TIMUserConfig();
//设置用户状态变更事件监听器
userConfig.setUserStatusListener(new TIMUserStatusListener() {
@Override
public void onForceOffline() {
//被其他终端踢下线
LogUtil.i(TAG+ "onForceOffline");
}
@Override
public void onUserSigExpired() {
//用户签名过期了,需要刷新 userSig 重新登录 IM SDK
LogUtil.i(TAG+ "onUserSigExpired");
}
})
//设置连接状态事件监听器
.setConnectionListener(new TIMConnListener() {
@Override
public void onConnected() {
LogUtil.i(TAG+ "onConnected");
}
@Override
public void onDisconnected(int code, String desc) {
LogUtil.i(TAG+ "onDisconnected");
}
@Override
public void onWifiNeedAuth(String name) {
LogUtil.i(TAG+ "onWifiNeedAuth");
}
})
//设置群组事件监听器
.setGroupEventListener(new TIMGroupEventListener() {
@Override
public void onGroupTipsEvent(TIMGroupTipsElem elem) {
LogUtil.i(TAG+ "onGroupTipsEvent, type: " + elem.getTipsType());
}
})
//设置会话刷新监听器
.setRefreshListener(new TIMRefreshListener() {
@Override
public void onRefresh() {
LogUtil.i(TAG+ "onRefresh");
}
@Override
public void onRefreshConversation(List<TIMConversation> conversations) {
LogUtil.i(TAG+ "onRefreshConversation, conversation size: " + conversations.size());
}
});
//禁用本地所有存储
userConfig.disableStorage();
//开启消息已读回执
userConfig.enableReadReceipt(true);
//将用户配置与通讯管理器进行绑定
TIMManager.getInstance().setUserConfig(userConfig);
}
/**
* 获取IM个人的conversation
*/
public TIMConversation getPeerConversation(String peer) {
return TIMManager.getInstance().getConversation(
TIMConversationType.C2C, //会话类型:单聊
peer); //会话对方用户帐号//对方ID
}
/**
* 获取IM群聊的Conversation
*/
public TIMConversation getGroupConversation(String groupId) {
//获取群聊会话
return TIMManager.getInstance().getConversation(
TIMConversationType.Group, //会话类型:群组
groupId); //群组 ID;
}
/**
* 发送文本消息
*/
public void sendTextMsg(TIMConversation conversation,String textContent) {
//构造一条消息
TIMMessage msg = new TIMMessage();
//添加文本内容
TIMTextElem elem = new TIMTextElem();
elem.setText(textContent);
//将elem添加到消息
if (msg.addElement(elem) != 0) {
LogUtil.d(TAG + "addElement failed");
return;
}
//发送消息
conversation.sendMessage(msg, new TIMValueCallBack<TIMMessage>() {//发送消息回调
@Override
public void onError(int code, String desc) {//发送消息失败
//错误码 code 和错误描述 desc,可用于定位请求失败原因
//错误码 code 含义请参见错误码表
LogUtil.e(TAG + "send message failed. code: " + code + " errmsg: " + desc);
}
@Override
public void onSuccess(TIMMessage msg) {//发送消息成功
LogUtil.d(TAG + "SendMsg ok : content = "+textContent);
}
});
}
/**
* 创建IM聊天群
*/
public String createChatGroup(){
if(TextUtils.isEmpty(groupId)){
LogUtil.e(TAG+" groupId is empty");
return "";
}
LogUtil.i(TAG+" createChatGroup : groupid = "+groupId);
//创建公开群,且不自定义群 ID
TIMGroupManager.CreateGroupParam param = new TIMGroupManager.CreateGroupParam("Public", groupId);
//自定义群id
param.setGroupId(groupId);
//指定群简介
param.setIntroduction("直播互动群"+SharedPreferencesUtil.getIntDate(Constant.SPKEY_USERID));
//指定群公告
param.setNotification("欢迎加入直播互动群"+SharedPrefere
版权声明:本文标题:android端接入腾讯云直播全过程详解(包含腾讯云点播、腾讯云IM)直播+弹幕+录制直播视频 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1725735356a1039659.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论