关于如何接入SDK直播功能

本文主要介绍如何接入SDK直播功能,包括两大部分,核心功能和其他功能

1. 直播核心功能

1.1直播登录

1.1.1 主动调用api

直播登录需要主动调用方法在DWLive.java(DWLive为单例)中,如下

方法说明
getInstance()获取DWLive单例
setDWLiveLoginParams(DWLiveLoginListener, LoginInfo)(过时)设置直播间登录参数
startLogin()(过时)开始登录
startLogin(LoginInfo, DWLiveLoginListener)(>=3.14.0)设置参数并执行登录

登录所需参数LoginInfo参数如下

1.1.2 回调事件api

DWLiveLoginListener

方法说明
onLogin(TemplateInfo info, Viewer viewer, RoomInfo roomInfo, PublishInfo publishInfo)登录成功回调
onException(DWLiveException exception);登录失败回调,4.10.0 版本过时
onLoginFailed(int code,String msg)登录失败回调, 4.10.0 版本新增

回调返回参数说明

TemplateInfo 模版信息 参数如下

Viewer 用户信息 参数如下

RoomInfo 房间信息 参数如下

错误码枚举:

错误码描述备注
10000000请求参数不正确,请检查后重试。 
20270008您的Token不存在,请重新登录。 
10000001系统出现异常,请稍后再试。 
20200002您的账户已过期,请联系客服处理。 
10000034您还未登录,请先登录后再试。 
10000005该回放不存在或已被删除,请检查后重试。 
10000007该直播不存在或已被删除,请检查后重试。 
10000006该直播间不存在或已被删除,请检查后重试。 
20290005请求参数错误,请检查后重试。 
20270000api登录调用失败,请检查网络连接后重试。 
20270011api登录调用超时,请检查网络连接后重试。 
20270002名称或密码错误,请检查后重试。 
20270001请求参数错误,请检查后重试。 
20270003登录失败,请联系管理员添加你至白名单 
20270004该视频不属于当前账户,请联系客服。 
20270005该视频不可用,请联系客服。 
20270006获取播放地址失败,请检查网络连接后重试。 
20270010获取打点信息失败,请联系客服。 
20270007该播放地址不存在或已被删除,请联系客服。 
20290009不合法的产品线,请联系客服。 
20270012手机号验证失败,请检查输入后重试。 
20270013登记观看失败,请联系客服。 
20270014手机号验证失败,请检查输入后重试。 
20270015发送短信失败,请稍后再试。 
20270016该直播间未开启直播转回放功能,请联系客服。 
20270017回放直播间与登录直播间不符,请联系客服。 
20270018批量获取视频信息失败,请联系客服。 
20270019视频信息错误,请联系客服。 
20270020该极速回放视频没有内容,请联系客服。 
20290015企微绑定已失效,请重新绑定。 
20290016非法的企微绑定关系,请重新绑定。 
20290017该企微用户未在当前直播间下被授权,请联系管理员授权。 
20290001-接口验证返回 message,直接展示

1.1.3 关键代码示例

登录调用代码示例如下:

1.2 直播播放视频和文档

1.2.1主动调用api

直播核心类代码在DWLive.java类中(DWLive为单例)调用直播视频播放代码如下

方法说明
setDWLivePlayParams(DWLiveListener dwLiveListener, Context context)设置回调和上下文
setPublishStreamListener(LiveRtmpPlayerCallBack callBack)设置播放器回调(非无延迟)
setDWLivePlayDocView(DocView docView)设置文档
start(Context context)开始观看直播
pause()暂停直播
stop()停止直播
onDestroy()释放资源
restartVideo()重置播放器,不重新获取播放地址
reloadVideo()重置播放器,重新获取播放地址

直播DWLive文档相关方法

方法说明
changeDocModeType(DocModeType docModeType)切换自由翻页模式和跟随模式(默认)
changePageTo(String docId, int pageIndex)手动翻页
setDocScaleType(DocView.ScaleType type)设置文档缩放模式
changeDocBackgroundColor(String color)设置文档空白区颜色
setDocScaleType(DocView.ScaleType type)设置文档缩放模式
changeDocBackgroundColor(String color)设置文档背景颜色

直播DWLive其他业务方法

方法说明
setVolume(float volume)设置播放声音大小(非连麦、非无延迟模式可用)
changeQuality(int quality, LiveChangeSourceListener changeCallBack)(>=3.14.0)切换视频清晰度
changeLine(int lineIndex, LiveChangeSourceListener changeCallBack)(>=3.14.0)切换媒体源线路
changePlayMode(LivePlayMode playMode, LiveChangeSourceListener changeCallBack)(>=3.14.0)切换播放模式
setMediaCodec(boolean isMediaCodec)设置是否开启硬解

1.2.2回调api

DWLiveListener 回调播放器
方法说明
void onLiveStreamViewPrepared(HDMediaView hdMediaView)回调直播播放器
LiveRtmpPlayerCallBack 回调播放器状态
方法说明
void onError(CCBasePlayer.CCPlayerError error, DWLiveException exception)播放器错误回调
void onVideoSizeChanged(int width, int height)视频宽高回调
void onPlayStateChange(CCBasePlayer.CCPlayerStatus state)播放器状态回调
void onBufferSpeed(float speed)播放器网速回调

1.2.3 参数说明

HDMediaView

这是直播的播放器,本质就是一个view,收到该回调时可将该view添加到指定的ViewGroup中进行显示

CCPlayerError

2. 直播其他功能

2.1 聊天功能

聊天历史记录回调在DWLiveListener类,相关方法如下:

方法说明
onHistoryChatMessage(ArrayList chatLogs)历史聊天信息

注意该api可能会存在多次回调,回调情况如下:

聊天功能分为公共聊天和私聊,聊天时主动调用的方法在DWLive类,相关方法如下:

方法说明
DWLive.sendPublicChatMsg(String publicChatMsg)发送公聊
DWLive.sendPrivateChatMsg(String toUserId, String msg)发送私聊

聊天功能的核心回调类为DWLiveListener,相关的回调方法如下:

接收公共聊天对应的回调方法为:自己发的公共聊天数据和别人的公共聊天数据都是通过此接口回调回来。

方法说明
onPublicChatMessage(ChatMessage msg)接收公共聊天消息

返回的实体类ChatMessage 属性如下

接收别人私聊我的方法和接收我私聊别人的回调方法是两个方法,如下

方法说明
onPrivateChat(PrivateChatInfo info)接收别人发我的消息
onPrivateChatSelf(PrivateChatInfo info)接收我发给别人的消息

返回的实体类PrivateChatInfo 属性如下

获取自定义表情的相关方法如下(SDK版本>=4.9.0):

方法说明
boolean isOpenCustomEmoji()获取是否开启自定义表情功能
boolean isCustomEmojiDownloadComplete()自定义表情是否下载完成
String getEmojiByName(String name)通过表情名获取单个表情,返回表情本地路径
ArrayList<CustomEmoji> getCustomEmojis()获取所有的自定义表情

 

2.2 问答功能

问答历史记录回调在DWLiveListener类,相关方法如下:

方法说明
onHistoryQuestionAnswer(List questions, List answers)问答历史记录回调

注意该api可能会存在多次回调,回调情况如下:

提问时主动调用的方法在DWLive类,相关方法如下:

方法说明
DWLive.sendQuestionMsg(String question)发送问题
sendQuestionMsg(String question, List<String> imgPathList, BaseLiveCallback<String, QaSendErrorBean> callback)发送带有图片的问答

发送带有图片的问答时,imgPathList数组中需要放入图片文件的可访问地址。

问答功能的核心回调类为DWLiveListener,相关的回调方法如下:

方法说明
onQuestion(Question question)接收问题的回调
onPublishQuestion(String questionId)接收问题发布的ID的回调
onAnswer(Answer answer)接收回答的回调

返回的实体类Question属性如下

返回的实体类Answer属性如下

ExtraDTO

ImgDTO

 

 

2.3 签到功能

签到时主动调用的方法在DWLive类,相关方法如下:

方法说明
DWLive.sendRollCall()发送签到

签到功能的核心回调类为DWLiveListener,相关的回调方法如下:

方法说明
onRollCall(int duration)收到签到事件的回调,duration 签到持续时间,单位为秒

2.4 抽奖1.0

此功能为方法回调功能,相关类DWLiveListener,相关方法如下:

方法说明
onStartLottery(String lotteryId)收到开始抽奖事件开始的回调
onLotteryResult(boolean isWin, String lotteryCode, String lotteryId, String winnerName);收到抽奖结果事件的回调
onStopLottery(String lotteryId)收到结束抽奖事件的回调

 

2.5 抽奖2.0

此功能需要主动获取和监听回调,首次进入需要主动获取抽奖,随后的抽奖需要去监听回调 ,相关类DWLiveListener、DWLive,相关方法如下: 进入直播间前可设置是否去重 默认为true:

方法说明
DWLive.getInstance().setLotteryRepetition(boolean isRepetition )是否sdk内部进行去重

首次进入直播间主动获取抽奖 调用时机在sdk初始化完成之后:

方法说明
DWLive.getInstance().queryLotteryStatus()查询当前正在进行的抽奖

收到抽奖的回调 相关类DWLiveListener:

提交抽奖 相关类DWLive:

相关的参数:

2.6 公告功能

此功能需要主动获取和监听回调,首次进入需要主动获取公告,随后的公告需要去监听回调 ,相关类DWLiveListener、DWLive,相关方法如下: 首次进入直播间主动获取公告:

方法说明
DWLive.getInstance().getAnnouncement()获取公告
收到公告的回调: 

2.7 问卷功能

问卷功能主要为方法回调功能,相关类DWLiveListener,相关方法如下:

同时提供了主动获取当前正在进行问卷的方法:

2.8 广播功能

此功能为方法回调功能,相关类DWLiveListener,相关方法如下:

注意该api可能会存在多次回调,回调情况如下:

2.9 答题卡功能(投票功能)

2.10 随堂测功能

主动获取随堂测的方法在DWLive类中,方法为:

调用主动获取方法或者监听到主播端发布随堂测,就会触发接受随堂测题目的回调。

接收随堂测题目的方法为回调功能,相关类为DWLiveListener,方法为:

参数说明

答完随堂测题目后,可以通过发送随堂测结果的方法来提交答案。

提交随堂测结果的方法为主动方法,在DWLive类中,方法为:

提交后会通过DWLiveListener下的onPracticeSubmitResult回调随堂测提交结果。

参数说明

获取当前随堂测的统计信息,可调用DWLive下的getPracticeStatis(String practiceId),此方法为主动调用方法。

调用获取统计信息的方法后,会通过DWLiveListener的onPracticStatis(PracticeStatisInfo info)方法回调当前的随堂测统计信息:

2.11 连麦功能

主动调用方法

DWLive

方法注释
isMultiMediaCall()是否是多人连麦
callInPreviewWithType(RtcCallBack rtcCallBack, BaseRtcClient.RtcConnectType type)主动申请上麦(5s之内不可频繁点击)
agreeCallInPreview(RtcCallBack rtcCallBack, BaseRtcClient.RtcConnectType type)同意上麦
rejectCall()拒绝上麦
hangup(BaseCallback baseCallback)挂断(5s之内不可频繁点击)
setLocalVideoEnable(boolean enable)设置本地视频开启(多人连麦场景下连麦中生效)
setLocalAudioEnable(boolean enable)设置本地音频开启(多人连麦场景下连麦中生效)
switchLocalCamera()切换本地摄像头(多人连麦并且连麦中生效)
pullRemoteStream(String userId, PullRemoteStreamCallBack baseCallback)拉取远端流
removeRemoteStream(String userId, BaseCallback baseCallback)移除远端流
setRtcClientListener(RTCConnectListener rtcClientListener)设置连麦监听
回调方法

RTCConnectListener

方法注视
onInviteCall()讲师邀请上麦
void onInviteCanceled()讲师取消邀请
onConnectionException(int code)连麦异常
void onRemoteStreamEnable(String userId, String hdLiveMediaCallRole)远端流可用
onRemoteStreamDisable(String userId)远端流不可用
onMediaCallStatusDidChange(boolean isAllowSpeak, BaseRtcClient.RtcConnectType type)是否可进行连麦回调
onCallWasHangup()讲师挂断
onAudioStatusDidChange(String userId, boolean isAllowAudio, boolean isSelf)音频状态改变
onVideoStatusDidChange(String userId, boolean isAllowVideo, boolean isSelf)视频状态改变
onPublishQuality(HDStreamQuality hdStreamQuality)推流状态回调
onPlayQuality(String userId, HDStreamQuality hdStreamQuality)拉流状态回调

2.12 音频模式(Deprecated 2021-10-08)

该方法无法满足现有需求,用2.21 音视频播放模式切换替代

此功能为主动调用功能,调用的方法在DWLive,相关方法如下:

如果是切换到音频模式下,surface可以传null

2.13 获取在线人数

此功能为方法回调功能,相关类DWLiveListener,相关方法如下:

返回的在线人数,是客户端设置的基数+实际人数之和

2.14 用户踢出

此方法为方法回调功能,相关类DWLiveListener,相关方法如下:

其中type的值对应的内容如下: 10: 在允许重复登录前提下,后进入者登录踢出先前登录者 20:讲师、助教、主持人通过页面踢出按钮踢出用户

2.15 打卡

此方法为方法回调功能,相关类BaseCallback,相关方法如下:

设置打卡回调

2.16 上下课逻辑

此方法为方法回调功能,相关类DWLiveListener,相关方法如下

2.17 历史文档数据

此方法为方法回调功能,相关类DWLiveListener,相关方法如下

注意该api可能会存在多次回调,回调情况如下:

2.18 线路切换(Deprecated 2021-10-08)

由于该方法无法兼容切换视频清晰度,故将该方法列为废弃,在标记的时间之后不再维护,由2.20 清晰度切换2.21线路切换代替

直播可根据返回的线路进行线路切换和清晰度切换

主动调用方法(DWLive)

方法说明
changePlaySource(LiveLineConfig liveLineConfig, LiveLineSwitchListener changeLineCallback)切换清晰度和线路

监听回调方法(DWLiveListener)注意该api可能会存在多次回调,回调情况如下:

方法说明
HDReceivedVideoAudioLines(List videoPlaySource, LiveLineAudioParams audioPlaySource);返回视频线路列表和音频线路列表

 

2.19 清晰度切换

直播可根据回调返回的清晰度列表进行视频清晰度的切换

监听回调类 DWLiveListener

方法说明
onHDReceivedVideoQuality(List videoQuality, LiveQualityInfo currentQuality)返回清晰度列表和默认清晰度对象

该api会存在多次回调 如:切换清晰度、网络不稳定、从音频切回到视频模式

回调方法中LiveQualityInfo属性信息如下

主动调用类DWLive

方法说明
changeQuality(int quality, LiveChangeSourceListener changeCallBack)切换清晰度

主动调用方法中参数信息如下

quality:清晰度对应的code码

changeCallBack

 

2.20 线路切换

直播可根据回调返回的线路列表进行视频和音频线路的切换

监听回调类 DWLiveListener

方法说明
onHDReceivedVideoAudioLines(List lines, int indexNum)返回线路列表和当前线路的索引

该api会存在多次回调 如:切换清晰度、网络不稳定、音频/视频模式切换

用户账号开启音频线路功能并切换到音频播放模式(详见2.21)时时才会返回音频线路

回调方法中LiveLineInfo属性信息如下

主动调用类DWLive

方法说明
changeLine(int lineIndex, LiveChangeSourceListener changeCallBack)切换音频或者视频线路

主动调用方法中参数信息如下

lineIndex :回调方法中参数lines的索引

changeCallBack :

 

2.21 音视频播放模式切换

直播可切换音频/视频播放模式,该方法需要账号开启音频线路功能

监听回调类DWLiveListener

方法说明
onHDAudioMode(DWLive.Audio hasAudio)返回支持的播放模式

回调方法中hasAudio枚举说明如下

主动调用方法DWLive

方法说明
changePlayMode(PlayMode playMode, LiveChangeSourceListener changeCallBack)切换播放模式

该方法只有在回调方法返回类型为DWLive.Audio.HAVE_AUDIO_LINE_TRUE时才生效

主动调用方法中参数信息如下

playMode :

changeCallBack :

 

2.22 防录屏

直播可进行防录屏设置

主动调用类DWLive

方法说明
setAntiRecordScreen(Activity activity)开启防录屏

 

2.23 互动组件

直播从4.1.0开始,提供互动组件相关API,与 互动组件SDK 配合可实现互动功能,版本及互动组件对应关系如下:

直播SDK版本可用互动组件
4.1.0点赞、打赏
4.2.0点赞、打赏、投票、红包雨
4.3.0点赞、打赏、投票、红包雨、问卷、邀请卡
4.5.0点赞、打赏、投票、红包雨、问卷、邀请卡、直播带货

直播互动组件相关API如下:

方法描述
getInteractionConfigure()获取组件开关状态,直播登录后可以调用,可为null,调用时注意判空。返回值见下方InteractionConfigure描述
getInteractiveToken(BaseCallback callback)获取组件token,直播登录后可以调用
getInteractiveOngoing(BaseCallback<List> callback)获取正在进行中组件,返回InteractionOngoing列表,见下方描述

 

InteractionConfigure(部分参数在对应版本才有):

 

InteractionOngoing:

 

2.24 课件下载

版本:>=4.18.0

使用说明:

进入房间,调用getLiveDigestInfo()方法获取摘要信息,通过摘要信息中的getCustomMenuList()方法获取当前的自定义菜单列表,判断如果自定义菜单中包含type为10的item,说明当前直播间课件下载功能打开,然后调用getCoursewareList获取当前可供下载的课件列表,当点击下载按钮时,调用getCoursewareDownUrl获取下载链接(具有时效性,请立即开始下载)。收到onCoursewarePush回调时,按发送状态更新当前课件列表。

直播新增API(DWLive):

直播新增回调(DWLiveListener):

 

CoursewareInfo:

判断课件下载开关打开代码示例: