关于如何接入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);登录失败回调

回调返回参数说明

TemplateInfo 模版信息 参数如下

Viewer 用户信息 参数如下

RoomInfo 房间信息 参数如下

1.1.3 关键代码示例

登录调用代码示例如下:

1.2 直播播放视频和文档

1.2.1主动调用api

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

方法说明
setDWLivePlayParams(DWLiveListener dwLiveListener, Context context)设置回调和上下文
setDWLivePlayer(DWLivePlayer player)设置播放器
setDWLivePlayDocView(DocView docView)设置文档
start(Surface surface)开始播放,同步
start()开始播放,player需设置Surface
pause()暂停播放器
stop()停止播放
onDestroy()释放资源
restartVideo()重置播放器,不重新获取播放地址
reloadVideo()重置播放器,重新获取播放地址

直播DWLive文档自由翻页方法

方法说明
changeDocModeType(DocModeType docModeType)切换自由翻页模式和跟随模式(默认)
changePageTo(String docId, int pageIndex)手动翻页

直播DWLive其他业务方法

方法说明
setVolume(float left, float right)设置播放声音大小
changeQuality(int quality, LiveChangeSourceListener changeCallBack)(>=3.14.0)切换视频清晰度
changeLine(int lineIndex, LiveChangeSourceListener changeCallBack)(>=3.14.0)切换媒体源线路
changePlayMode(LivePlayMode playMode, LiveChangeSourceListener changeCallBack)(>=3.14.0)切换播放模式
  
setDocScaleType(DocView.ScaleType type)设置文档缩放模式
changeDocBackgroundColor(String color)设置文档背景颜色

播放器核心代码在DWLivePlayer.java类中,调用方法如下

方法说明
DWLivePlayer(Context context)构造方法
setSurface(Surface surface)设置Surface
start()开始播放
pause()暂停播放
stop()停止播放
reset()重置播放器
release()释放
setPlayerEventListener(PlayerEvent playerEvent)(>=3.14.0)设置播放器监听
setAntiRecordScreen(Activity activity)(>=3.14.0)设置防录屏
setOnPreparedListener(OnPreparedListener listener)(过时)设置准备回调
setOnErrorListener(IMediaPlayer.OnErrorListener listener)(过时)设置失败回调
setOnInfoListener(OnInfoListener listener)(过时)设置播放状态信息回调
setOnVideoSizeChangedListener(OnVideoSizeChangedListener listener)(过时)设置视频尺寸信息回调
setSpeedListener(LiveSpeedListener speedListener)(过时)设置视频缓冲的网速

1.2.2 播放器回调事件api

PlayerEvent回调事件如下

方法说明
onPrepared()播放器初始化完成
onInfo(int what, int extra)播放器状态信息
onVideoSizeChanged(int width, int height)播放器尺寸信息
onBufferSpeed(float speed)媒体流网速
onError(int code, DWLiveException exception)播放器失败信息

onInfo播放器状态信息的回调

  1. 缓冲开始

what = IMediaPlayer.MEDIA_INFO_BUFFERING_START

  1. 缓冲结束

what = IMediaPlayer.MEDIA_INFO_BUFFERING_END

  1. 开始渲染

what = IMediaPlayer.MEDIA_INFO_VIDEO_RENDERING_START

1.2.3 关键代码示例

设置播放器显示布局:

设置文档展示的控件布局:

初始化播放器并设置播放参数

获取Surface

下面是通过实现SurfaceTextureListener回调获得

调用播放视频和文档方法

1.2.4 集成说明

完成上面的步骤后,我们就能够观看到直播间的视频画面和文档画面了,也就基本完成了获得视频直播的核心功能的集成,即观看视频和观看文档的功能。

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 属性如下

2.2 问答功能

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

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

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

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

方法说明
DWLive.sendQuestionMsg(String question)发送问题

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

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

返回的实体类Question属性如下

返回的实体类属性如下

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类,相关方法如下:

连麦功能的核心回调类为RtcClient.RtcClientListener,相关的回调方法如下:

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 :