SDK直播核心功能集成
[TOC]
1. 登录
1.1 主动调用API
直播需要主动调用的方法在DWPushSession.java中(DWPushSession为单例)中,如下:
方法 | 说明 |
---|---|
getInstance() | 获取DWLogin实例 |
login(String userId, String roomId, String username, String password,final OnLoginStatusListener loginStatusListener) | 登录 |
release() | 释放 |
1.2 回调事件API
1.2.1 OnLoginStatusListener
登录回调
方法 | 说明 |
---|---|
void successed() | 登录成功后的回调 |
void failed(DWPushException e) | 登录失败后回调 |
1.3 关键代码示例
登录
......
DWPushSession pushSession = DWPushSession.getInstance();
pushSession.login(userId, roomId, username, password, onLoginStatusListener);
......
释放
......
DWPushSession pushSession = DWPushSession.getInstance();
pushSession.release();
......
2. 推流
2.1 主动调用API
2.1.1 推流配置构建
推流时的配置构建需要主动调用DWPushConfigBuilder.java(Build模式),如下:
方法 | 说明 |
---|---|
DWPushConfigBuilder() | 构建DWPushSessionBuilder实例 |
cameraType(@CameraType int cameraType) | 相机类型 |
orientation(@Orientation int orientation) | 推流方向 |
videoResolution(@Resolution int videoResolution) | 推流分辨率 |
bitrate(int bitrate) | 码率 |
fps(int fps) | 帧率 |
beauty(boolean isBeauty) | 是否使用美颜 |
rtmpNodeIndex(int index) | 选择推送节点 |
build() | 构建DWPushConfig实例 |
2.1.2 推流操作
推流相关操作需要主动调用DWPushSession.java,如下:
方法 | 说明 |
---|---|
setTextureView(DWTextureView textureView) | 设置渲染层 |
prepare(DWPushConfig pushConfig) | 开始预览 |
start(DWPushConfig pushConfig, DWOnPushStatusListener pushStatusListener) | 开始推流 |
updateVolume(int volume) | 调节音量 |
updateBeautifulLevel(whiteLevel, skinLevel, pinkLevel) | 调节美颜 |
closeBeauty() | 关闭美颜 |
openBeauty() | 打开美颜 |
updateIcon(Bitmap bitmap, Rect rect) | 调节水印 |
setIcon(Bitmap bitmap, Rect rect) | 初始化水印 |
setBeautifulLevel(int whiteLevel, int skinBlurLevel, int pinkLevel) | 初始化美颜级别 |
setVolume(int volume) | 初始化音量 |
onResume(boolean isPush) | 生命周期 |
onPause() | 生命周期 |
onDestory() | 生命周期 |
switchCamera() | 切换摄像头 |
toggleFlashlight() | 开启/关闭闪光灯 |
getRoomUserCount() | 获取直播间人数 |
sendChatMsgToAll(String msg) | 发送公聊信息 |
sendMsgToOne(String userId, String userName, String msg) | 发送私聊信息 |
stop() | 停止推流 |
注意:getRoomUserCount**该方法俩次调用时间间隔最少5S 少于5S SDK内屏蔽当前请求 |
2.2 回调事件API
2.2.1 DWOnPushStatusListener
推流回调
方法 | 说明 |
---|---|
onConfigMessage(String liveId) | 配置信息liveid回调 |
onSuccessed() | 连接成功回调 |
onDisconnected() | 连接断开回调 |
fonFailed(String message) | 连接失败回调 |
onReconnect() | 重连回调 |
onClosed(int action) | 连接关闭回调 |
(新增)onCurrentInfo(LiveCurrentInfo info) | 回调直播中的信息LiveCurrentInfo |
2.2.2 OnChatMsgListener
聊天回调
方法 | 说明 |
---|---|
onReceivedPublic(ChatUser from, ChatMsg msg, boolean isPublisher) | 接收公聊信息回调 |
onReceivedPrivate(ChatUser from, ChatUser to, ChatMsg msg, boolean isPublisher) | 接收私聊信息回调 |
onError(String errorMsg) | 聊天出现错误 |
2.2.3 OnChatRoomListener
直播间回调
方法 | 说明 |
---|---|
onRoomUserCountUpdate(int count) | 成功获取直播间人数回调 |
2.3 关键示例代码
2.3.1 构建DWPushConfig实例
......
DWPushConfig pushConfig = new DWPushConfig.DWPushConfigBuilder().
fps(mFpsCurrentValue).
bitrate(mBitrateCurrentValue).
orientation(mOrientationIndex).
cameraType(mCameraTypeIndex).
beauty(mUseBeauty).
rtmpNodeIndex(mRecommendIndex).
build();
......
2.3.2 开始推流
......
DWPushSession pushSession = DWPushSession.getInstance();
pushSession.start(pushConfig, dwOnPushStatusListener):
......
2.3.3 停止推流
......
DWPushSession pushSession = DWPushSession.getInstance();
pushSession.stop():
......
2.3.4 切换摄像头
......
DWPushSession pushSession = DWPushSession.getInstance();
pushSession.switchCamera():
......
2.3.5 开启/关闭闪光灯
......
DWPushSession pushSession = DWPushSession.getInstance();
pushSession.toggleFlashlight():
......
2.3.6 初始化音量
......
DWPushSession pushSession = DWPushSession.getInstance();
pushSession.setVolume(volume):
......
2.3.7 初始化美颜级别
......
DWPushSession pushSession = DWPushSession.getInstance();
pushSession.setBeautifulLevel(whiteLevel, skinLevel, pinkLevel):
......
2.3.8 初始化水印
......
DWPushSession pushSession = DWPushSession.getInstance();
pushSession.setIcon(bitmap, rect):
......
2.3.9 推流过程中调节音量
......
DWPushSession pushSession = DWPushSession.getInstance();
pushSession.updateVolume(value):
......
2.3.10 推流过程中调节美颜级别
......
DWPushSession pushSession = DWPushSession.getInstance();
pushSession.updateBeautifulLevel(whiteLevel, skinLevel, pinkLevel);
......
2.3.11 推流过程中更新水印
......
DWPushSession pushSession = DWPushSession.getInstance();
pushSession.updateIcon(bitmap, rect);
......
2.3.12 发送公聊
......
DWPushSession pushSession = DWPushSession.getInstance();
pushSession.sendChatMsgToAll(msg);
......
2.3.13 发送私聊
......
DWPushSession pushSession = DWPushSession.getInstance();
pushSession.sendMsgToOne(userId, userName, msg);
......
2.3.14 获取直播间人数
......
DWPushSession pushSession = DWPushSession.getInstance();
pushSession.getRoomUserCount()
......
2.3.15 布局文件设置DWTextureView(DWTextureView继承自TextureView):
......
<com.bokecc.sdk.mobile.push.view.DWTextureView
android:id="@+id/id_push_gl_surface"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
......
注意
DWTextureView初始化,具体参考demo
2.3.16 直播带货:
使用直播带货需引入组件库
api ('com.bokecc.module:pushcommercemodule:1.0.0')
api ('com.bokecc:basemodule:1.0.1')
需要在应用启动后初始化组件
//基础库初始化
InteractSDK.getInstance().init(LoginActivity.this.getApplicationContext());
//直播带货组件初始化
PushCommerceInteractSDK.getInstance().init(LoginActivity.this.getApplicationContext());
2.3.16.1 判断直播带货开关
DWPushSession.getInstance().isOpenCommodity()
2.3.16.2 获取互动组件token
DWPushSession.getInstance().getInteractiveToken(new BaseCallback<String>(){
@Override
public void onError(String error) {
}
@Override
public void onSuccess(String msg) {
}
})
2.3.16.3 提供了默认界面样式 可直接使用
......
<com.bokecc.pushcommercelib.view.DefaultCommodityView
android:layout_width="match_parent"
android:layout_height="435dp"
android:layout_alignParentBottom="true"
android:background="#ffffff"
android:visibility="gone"
android:id="@+id/commodity_view"
/>
......
//初始化
mCommerdityView.initialize(token, new CommerceUiListener() {
@Override
public void onClose() {
//隐藏
}
});
2.3.16.4 如果需要自定义界面,可参照该文档
//创建管理器
LiveCommerceManager commerceManager = new LiveCommerceManagerImpl();
//初始化监听
commerceManager.init(LiveCommerceListener liveCommerceListener);
//设置token
commerceManager.setToken(String interactToken);
其他api说明
public interface LiveCommerceManager {
/**
* 初始化
* @param liveCommerceListener
*/
void init(LiveCommerceListener liveCommerceListener);
/**
* 设置token及相关参数
* @param interactToken
*/
void setToken(String interactToken);
/**
* 获取商品列表
*/
void getCommodityList(int pageNum,int size);
/**
* 移除商品
* @param id
*/
void remove(long id);
/**
* 置顶
* @param id 商品id
*/
void stick(long id);
/**
* 取消置顶
* @param id 商品id
*/
void unStick(long id);
/**
* 推送
* @param id 商品id
*/
void push(long id);
/**
* 取消推送
* @param id 商品id
*/
void unPush(long id);
/**
* 销毁
*/
void release();
/**
* 获取导入列表
* @param importNum 列表页
* @param pageSize 每页数量
*/
void getImportCommodityList(int importNum, int pageSize);
/**
* 导入商品
* @param id
*/
void importCommodity(long id);
public interface LiveCommerceListener {
/**
* 错误
* @param code 错误码
* @param msg 错误信息
*/
void onError(int code,String msg);
/**
* 商品列表
* @param commodityModles
* @param total
*/
void onCommodityList(int total,List<CCCommodityModle> commodityModles);
/**
* 推送成功
* @param id
*/
void onPushSuccess(long id);
/**
* 取消推送成功
* @param id
*/
void onUnPushSuccess(long id);
/**
* 移除成功
* @param id
*/
void onRemoveSuccess(long id);
/**
* 导入成功
* @param id
*/
void onImportSuccess(long id);
/**
* 置顶成功
* @param id
*/
void onStickSuccess(long id);
/**
* 取消置顶成功
* @param id
*/
void onUnStickSuccess(long id);
/**
* 导入商品列表
* @param totalCount
* @param pageCount
* @param modles
*/
void onImportCommodityList(int totalCount, int pageCount, List<CCCommodityManageModle> modles);
}
public class CCCommodityManageModle {
//id
private long id;
//封面
private String cover;
//标题
private String title;
//当前价格 到分
private int currentPrice;
//原价 到分
private int originPrice;
//添加时间
private long gmtCreate;
//是否导入 0未导入 1导入
private int bind;
}
public class CCCommodityModle {
/**商品id*/
private long id;
/**封面*/
private String cover;
/**标题*/
private String title;
/**描述*/
private String desc;
/***/
private String[] tag;
/**当前价格*/
private int currentPrice;
/**原价*/
private int originPrice;
/**按钮文案*/
private String button;
/**0-未置顶;1-置顶*/
private int top;
/**0-未推送;1-推送*/
private int push;
/**序号*/
private int score;
}
public interface ErrorCode {
//获取商品列表失败
int GET_COMMONDITY_LIST_ERROR = 1;
//api调用频繁
int COMMONDITY_OFTEN_ERROR = 2;
//移除商品失败
int REMOVE_PRODUCTS_ERROR = 3;
//取消置顶失败
int UNSTICK_PRODUCTS_ERROR = 4;
//置顶失败
int STICK_PRODUCTS_ERROR = 5;
//推送失败
int PUSH_PRODUCTS_ERROR = 6;
//取消推送失败
int UNPUSH_PRODUCTS_ERROR = 7;
//获取导入商品列表失败
int GET_PRODUCTS_ERROR = 8;
//导入商品失败
int IMPORT_PRODUCTS_ERROR = 9;
}
2.4 备注
必须把DWPushSession与Activity的生命周期进行统一管理,如下
......
// 这里需要注意生命周期的使用
@Override
protected void onStart() {
super.onStart();
session.onResume();
}
@Override
protected void onStop() {
super.onStop();
session.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
session.onDestory();
}
......
3. 测速
3.1 主动调用API
测速需要主动调用API在DWRtmpNodeTool.java(工具类,不可实例化)中,如下:
方法 | 说明 |
---|---|
testSpeedForRtmpNodes(final OnTestSpeedFinishListener listener) | 节点测速 |
3.2 回调事件API
3.2.1 OnTestSpeedFinishListener
测速回调
方法 | 说明 |
---|---|
onFinish(ArrayList rtmpNodes) | 测速完成回调 |
void onError(String message) | 测速出错回调 |
3.3 关键示例代码
......
DWRtmpNodeTool.testSpeedForRtmpNodes(onTestSpeedFinishListener);
......
4. demo使用
- 在res/values/strings.xml里面进行测试账号配置
- 通过扫描二维码或者手动输入账号信息
注:目前demo是Android Studio版本。
(已经到底部)