直播视频直播sdk

视频直播sdk  时间:2021-05-13  阅读:()

微吼直播SDKforAndroid中国领先的商务视频直播平台目录一、修订记录4二、简介51、支持的产品特性如下:52、API&SDK的使用框架流程图63、SDK主要流程图6三、权限开通申请71、申请Key72、绑定应用签名信息73、生成当前签名AccessToken84、获取包名还有安全码SHA1值8(1)包名获取:8(2)发行版本安全码SHA1:85、客户Server端需提供给APP的信息10四、SDK集成前必要的准备工作101、下载SDK与DEMO102、开发环境要求103、需要导入的AAR(之前导入的Jar)104、添加依赖105、权限及配置10五、流媒体快速接入介绍111、初始化配置11(1)初始化VhallSDK11(2)基础参数说明112、用户标识12(1)创建用户12(2)登陆12(3)登陆参数描述123、发直播13(1)准备工作:13(2)发直播:14(3)直播事件回调15(4)结束直播164、看直播17(1)看直播17(2)观看事件回调18(3)停止观看195、看回放19(1)看回放19(2)观看回放事件回调20(3)播放器方法21(4)发送/获取评论信息226滤镜直播:23六、功能接入介绍241、聊天服务器相关功能24(1)、上下线消息通知26(2)、聊天消息26(3)、聊天记录27(4)、问答消息282、消息服务器相关功能29(1)、PPT翻页消息30(2)、活动结束消息30(3)、抽奖消息303、分辨率切换/切换到单音频324、设置观看布局321、文档演示功能33第三方K值认证332、认证流程333、开启设置344、K值使用34二、版本迁移重点说明351、2.
3.
2迁移到2.
4.
035一、修订记录日期版本号描述修订者2016-04-21V2.
1.
1初稿xy2016-05-06V2.
2.
0新增文档演示xy2016-08-01V2.
3.
1多分辨率方案/防盗链/多展示方案xy2016-09-27V2.
4.
0新增用户标识/聊天/问答/应用签名/观看语音直播xy2016-11-01V2.
5.
0新增子账号/聊天记录/抽奖2016-11-30V2.
5.
1新增滤镜2016-12-30V2.
5.
4播放器支持MP4播放,增加观看回放评论2017-03-01V2.
6.
0签到,公告,弹幕,表情2017-03-15V2.
7.
0问卷2017-03-31V2.
7.
1白板、画笔2017-04-15V2.
8.
0VR陀螺仪2017-06-12V2.
9.
0添加推流地址调度,添加用户信息数据统计添加自定义推流数据、自定义渲染2017-08-22V3.
01、丰富SDK数据统计2、SDK降噪与增益3、更改SDK设置滤镜方案及API4、性能优化及bug修复2017-10-24V3.
0.
11、新增投屏功能(体验)二、简介本文档为了指导开发者更快使用Android系统上的"自助式网络直播服务SDK",默认读者已经熟悉IDE的基本使用方法(本文以AndroidStudio为例),以及具有一定的编程知识基础等.
新版本重点说明2、支持的产品特性如下:分类特性名称描述发起直播支持编码类型音频编码:AAC,视频编码:H.
264支持推流协议RTMP视频分辨率640*480屏幕朝向横屏、竖屏闪光灯开/关静音开/关切换摄像头前、后置摄像头目标码率使用软编,码率固定在300-400之间目标帧率帧率默认为10帧最大可修改到30帧支持环境Android4.
0以上,观看直播支持播放协议RTMP延时RTMP:2-5秒支持解码H.
264文档演示支持文档演示文档可与视频同步演示观看回放支持协议HLS权限第三方K值认证支持客户自己的权限验证机制来控制观看直播、观看回放的权限用户标识(new)支持用户标识主要用于聊天、问答等用户互动模块聊天(new)支持发起观看直播聊天用户标识后可聊天问答(new)支持看直播提问用户标识后可提问单音频切换(new)观看对音频转换视频转音频,视频+文档转音频应用签名(new)应用签名保证应用安全防护3、API&SDK的使用框架流程图4、SDK主要流程图如果需要集成聊天或问答,需要提前服务器端创建用户标识,用户标识后才可正常使用.
主要流程设计如下:三、权限开通申请1、申请Key请点击API&SDK权限申请或致电4006826882电话立即沟通申请,申请后客户经理会在线上与您直接联系.
审核通过后,可以获取开发应用的权限信息:App_Key、AppSecret_Key,立即查看.
2、绑定应用签名信息使用SDK前集成前,务必先配置好此签名信息,否则使用时会出现"身份验证失败"提示信息,配置信息流程如下.
进入http://e.
vhall.
com/home/vhallapi/authlist,API/SDK使用权限信息页面.
选择已开通的应用进行编辑操作.
点下一步进入应用绑定页面.
选择Android-SDK切页后输入以下信息:3、生成当前签名AccessToken当用户成功配置了签名信息,但是可能配置了多个签名信息,比如测试时的Debug签名或者正式的Release签名,这是生成Token时必须传递参数App_key参数,用于识别当前使用哪个签名信息,这个参数在配置签名时会生成.
如果只配置了一个签名可以不传,默认会取这唯一的签名,如果配置多个签名,并不传递App_key参数,也会出现"身份验证失败"提示信息4、获取包名还有安全码SHA1值(1)包名获取:在Android工程目录下的AndroidManifest.
xml清单文件中的package部分即是包名(2)发行版本安全码SHA1:获取这个值有以下三种方法:通过keytool工具,在cmd命令中输入keytool-list-v–keystore你的签名证书文件例如在D盘根目录,则输入:keytool-list-v-keystored:\key2.
keystore回车后输入生成证书的密码,即可得到以下信息,其中红色框部分是SHA1值:对生成的正式apk安装包文件重新改扩展名字为zip,并且解压缩可以得到类似下面的文件夹,其中有META-INF目录,双击进入目录后有MANIFEST.
MF、CERT.
SF和CERT.
RSA三个文件,通过在cmd命令进入对应文件目录后中输入keytool-printcert-fileCERT.
RSA,可以得到SHA1值,5、客户Server端需提供给APP的信息客户Server端需要提供如下信息:(1)Id:通过客户Server端接口获取到,此接口需调用vhall接口webinar/list获取.
(2)AccessToken:通过客户端接口获取到,此接口需调用vhall接口verify/access-token获取.
四、SDK集成前必要的准备工作1、下载SDK与DEMOGithub:https://github.
com/vhall/vhallsdk_live_android/releases2、开发环境要求Pc操作系统:64window系统JDK:1.
7以上Androidstudio:建议使用Androidstudio2.
0以上Android:4.
0以上备注:Android设备操作系统需要4.
0以上,需要访问手机硬件,暂不支持模拟器开发3、添加依赖工程直接依赖Moduleuilibs即可4、添加依赖compile'com.
github.
bumptech.
glide:glide:3.
7.
0'//用于加载PPTcompile('io.
socket:socket.
io-client:0.
8.
0'){//用于SDK网络连接excludegroup:'org.
json',module:'json'}5、权限及配置五、流媒体快速接入介绍1、初始化配置(1)初始化VhallSDK在用户调用VhallSDK中的任意方法前,一定要先调用init方法,初始化VhallSDK.
/***VhallSDK初始化*@paramContext*@paramAPP_KEY权限申请时获得*@paramAPP_SECRET_KEY权限申请时获得*/VhallSDK.
init(this,APP_KEY,APP_SECRET_KEY);获取App_Key、App_Secret_Key—>http://e.
vhall.
com/home/vhallapi/authlist(2)基础参数说明参数描述id对应创建的活动ID(在官网创建)token对应创建的访问Token(测试Token的实效是一天)码率默认300帧率默认10帧可选范围为10~30帧超过30帧的按30帧算初次缓冲时间只用在观看直播,默认为2秒(这里的缓冲时间不是用于延迟播放,而是缓冲2秒的数据)K值默认为空,指的是控制直播观看权限的参数,具体使用说明参考第三方K值验证分辨率640*480/1280*720APP_KEY权限申请时获得APP_SECRET_KEY权限申请时获得包名第三方用户App包名签名第三方用户App签名的SHA1值备注:当连接失败SDK默认重新连接3次,每次重连时间约为5秒2、用户标识(1)创建用户API地址:http://e.
vhall.
com/home/vhallapi/active#user_register_第三方创建用户如果使用聊天和问答功能,需要用户提前调用WebApi进行创建用户标识操作.
详细接口说明,请参数请参照API地址,(2)登陆当用户在vhall平台创建用户标识成功之后,调用VhallSDK中的login方法,如果用户需要使用如聊天,问答等功能则必须用户标识.
如果不用户标识则默认是游客模式(Demo里即使是游客也是可以聊天的,用户可以根据自己的场景控制.
问答必须创建用户)以下是代码展示:VhallSDK.
getInstance().
login(username,userpass,newVhallSDK.
LoginResponseParamCallback(){@Overridepublicvoidsuccess(Stringvhall_id,Stringcustomer_id){vhall_id}@Overridepublicvoidfailed(interrorCode,Stringreason){}});(3)登陆参数描述参数字段描述username用户名userpass用户密码vhallSDK.
RequestCallback()回调信息返回参数描述参数字段描述vhall_idvhall平台生成的ID后续看直播会用到customer_id用户平台生成的ID错误码错误码描述10501用户不存在10502登陆密码不正确3、发直播(1)准备工作:屏幕保持常亮.
getWindow().
setFlags(WindowManager.
LayoutParams.
FLAG_KEEP_SCREEN_ON,WindowManager.
LayoutParams.
FLAG_KEEP_SCREEN_ON);横竖屏发起视频/***如果竖屏发起设置ActivityInfo.
SCREEN_ORIENTATION_REVERSE_PORTRAIT*如果横屏发起设置ActivityInfo.
SCREEN_ORIENTATION_REVERSE_LANDSCAPE*/setRequestedOrientation(ActivityInfo.
SCREEN_ORIENTATION_REVERSE_PORTRAIT);设置发起布局VhallCameraViewActivity被创建,首先初始化VhallCameraView.
当前自定义View会处理包括采集,自动聚焦等关于Camera的操作,VhallCameraView需要初始化获得一些信息,调用init()方法/***pixel_type发起的分辨率*/getCameraView().
init(pixel_type,Activity(),newRelativeLayout.
LayoutParams(0,0));(2)发直播:Broadcast实例:Broadcast实例这里需要将之前设置的信息传入Broadcast中列如自定义view、帧率、码率、发起事件回调、聊天,此处完整代码可以参考DemoBroadcast.
Builderbuilder=newBroadcast.
Builder().
cameraView(mView.
getCameraView()).
frameRate(param.
frameRate).
chatCallback(newChatCallback())//如需要使用聊天加上这个回调.
videoBitrate(param.
videoBitrate).
callback(newBroadcastEventCallback());//直播事件回调broadcast=builder.
build();一键发起直播,调用SDKinitBroadcast方法,在这之前要先初始化观看实例.
发起参数描述:参数字段描述id活动IDaccessToken访问tokenvhallID是否使用子账号发直播(新加)Broadcast发起实例RequestCallback回调信息备注:子账号需要先创建,创建后会获取vhallID,当vhallID这个参数不为空时,使用子账号发起直播,使用的Token也需要用子账号重新生成,否则会返回身份验证失败.
当vhallID这个参数为空时,默认使用主账号.

以下是代码展示VhallSDK.
getInstance().
initBroadcast(param.
id,param.
token,getBroadcast(),newVhallSDK.
RequestCallback(){@Overridepublicvoidsuccess(发起成功@Overridepublicvoidfailed(interrorCode,Stringreason){}});(3)直播事件回调privateclassBroadcastEventCallbackimplementsBroadcast.
BroadcastEventCallback{@OverridepublicvoidonError(interrorCode,Stringreason){}@OverridepublicvoidonStateChanged(intstateCode){switch(stateCode){caseBroadcast.
STATE_CONNECTED:/**连接成功*/break;caseBroadcast.
STATE_NETWORK_OK:/**网络通畅*/break;caseBroadcast.
STATE_NETWORK_EXCEPTION:/**网络异常*/break;caseBroadcast.
STATE_STOP:/**直播停止*/break;}}@OverridepublicvoiduploadSpeed(Stringkbps){/**下载速度*/}}状态码状态码描述Broadcast常量20151连接成功Broadcast.
STATE_CONNECTED20152网络通畅Broadcast.
STATE_NETWORK_OK20153网络异常Broadcast.
STATE_NETWORK_EXCEPTION20154直播停止Broadcast.
STATE_STOP错误码错误码描述10401活动结束失败10402当前活动ID错误10403活动不属于自己10409第三方用户对象不存在10411用户套餐余额不足20101正在直播20102初始化视频信息失败20103预览失败,无法直播20104直播地址有误20105连接服务器失败(4)结束直播获取VhallSDK的实例调用finishBroadcast()传入参数活动ID、TOKEN、Broadcast实例、结束回调当直播结束时,需要调用此方法,此方法用于结束直播,生成回放,如果不调用,则无法生成回放.
参数说明:参数字段描述id活动IDaccessToken访问tokenBroadcast发起实例RequestCallback回调信息以下是代码展示VhallSDK.
getInstance().
finishBroadcast(param.
id,param.
token,getBroadcast(),newVhallSDK.
RequestCallback(){@Overridepublicvoidsuccess(){//停止成功}@Overridepublicvoidfailed(interrorCode,Stringreason){//停止失败}});(5)相关功能接口getBroadcast.
changeCamera()切换摄像头;getBroadcast.
setMute(Booleanmute)设置是否静音;getBroadcast.
setVolumeAmplificateSize(floatsize)设置降噪级别[0-1]cameraview.
setFilter(GPUImageFilterfilter)设置滤镜4、看直播(1)看直播WatchLive实例:watchLive实例,这里需要将一些设置信息传入列如Context、containerLayout(这里需要传入一个RelativeLayout,用于生成观看)、回调callback,MessageEventCallback消息回调,ChatCallback聊天回调WatchLive.
Builderbuilder=newWatchLive.
Builder().
context().
containerLayout()//传入观看布局.
bufferDelay()//缓冲几秒的BUFFER.
callback(newWatchCallback()).
messageCallback(newMessageEventCallback()).
chatCallback(newChatCallback());//如果使用聊天就加这个回调watchLive=builder.
build();一键观看直播:一键观看直播,当Activity被创建观看界面Activity必须包涵一个RelativeLayout布局此布局需要往VhallSDK中传递用于一键生成回放,获取VhallSDK的实例调用initWatch()这里传入参数WatchLive实例、活动ID(必填)、用户名、用户邮箱、vhall_id、K值校验等参数.
参数描述参数字段描述id活动IDnickname用户名email用户邮箱vhall_idVhallId(登陆后获取,没有传空)password密码(K值)recordId回放片段ID(只在观看回放使用),这里传空WatchLive观看直播实例RequestCallback回调信息备注:如果用户名和密码为空,则vhall_id不能为空,如果vhall_id为空,则用户名和密码不能为空,如果都传,默认取vhall_id的值.
以下是代码展示详细见DemoVhallSDK.
getInstance().
initWatch(param.
id,"test","test@vhall.
com",vhallId,param.
k,getWatchLive(),newVhallSDK.
RequestCallback(){@Overridepublicvoidsuccess(){//获取观看信息成功}@Overridepublicvoidfailed(interrorCode,Stringreason){失败}});(2)观看事件回调WatchCallback观看回调privateclassWatchCallbackimplementsWatchLive.
WatchEventCallback{@OverridepublicvoidonError(interrorCode,StringerrorMsg){//错误返回错误码}@OverridepublicvoidonStateChanged(intstateCode){//返回状态码}@OverridepublicvoiduploadSpeed(Stringkbps){//速度}}状态码状态码描述WatchLive常量20251观看直播连接成功WatchLive.
STATE_CONNECTED20254开始加载WatchLive.
STATE_BUFFER_START20255停止加载WatchLive.
STATE_BUFFER_STOP20256停止观看直播WatchLive.
STATE_STOP错误码错误码描述10030身份验证出错10402当前活动ID错误10049访客数据信息不全10404KEY值验证出错10046当前活动已结束10405微吼用户ID出错10047您已被踢出,请联系活动组织者10048活动现场太火爆,已超过人数上限10410用户信息不存在(3)停止观看当用户停止观看时,需要调用VhallSDK中停止观看直播方法,调用此方法,SDK会断开拉流.
代码展示如下getWatchLive().
stop();(4)开启弹幕弹幕实现依赖第三方库B站的弹幕引擎·烈焰弹幕DanmakuFlameMaster第一步,在我们视频view布局的上方再覆盖一个显示弹幕的View,弹幕的View必须要做成完全透明的,这样即使覆盖在视频界面的上方也不会影响到视频的正常观看,布局如下:第二步,找到build.
gradle添加如下依赖dependencies{compile'com.
github.
ctiao:DanmakuFlameMaster:0.
6.
4'compile'com.
github.
ctiao:ndkbitmap-armv7a:0.
6.
4'compile'com.
github.
ctiao:ndkbitmap-armv5:0.
6.
4'compile'com.
github.
ctiao:ndkbitmap-x86:0.
6.
4'}第三步,初始化弹幕所需的信息,设置回调详情参考Demo,HashMapmaxLinesPair=newHashMap();maxLinesPair.
put(BaseDanmaku.
TYPE_SCROLL_RL,5);//滚动弹幕最大显示5行//设置是否禁止重叠HashMapoverlappingEnablePair=newHashMap();overlappingEnablePair.
put(BaseDanmaku.
TYPE_SCROLL_RL,true);overlappingEnablePair.
put(BaseDanmaku.
TYPE_FIX_TOP,true);备注:具体实现方式参考Demo(5)VR活动如果发起的直播时VR直播,可以使用陀螺仪功能if(!
getWatchLive().
isVR(判断是否是VR活动watchView.
showToast("当前活动为非VR活动,不可使用陀螺仪");return;}getWatchLive().
setVRHeadTracker(!
getWatchLive().
isVRHeadTracker());//设置陀螺仪(6)投屏功能备注:新增Support包Suppot包中包含投屏功能,不需要的可以删掉,此版本是投屏的实现,只有开始投屏功能,暂时没有结束,快进等功能投屏是基于DLNA功能实现的,使用的ClingDLNA类库,确保使用的机器是具备DLNA功能的手机理论上支持API16以上的机型,实际测试有部分API16以上的机型不支持.
DLNA协议中包含多项协议及标准,其中UPnP协议是最重要的部分UPnP协议定义了设备之间,设备和控制点,控制点之间通信的协议@OverridepublicvoiddlnaPost(DeviceDisplaydeviceDisplay,AndroidUpnpServiceservice){getWatchLive().
dlnaPost(deviceDisplay,service,newWatch_Support.
DLNACallback(){@OverridepublicvoidonError(interrorCode){watchView.
showToast("投屏失败,errorCode:"+errorCode);}@OverridepublicvoidonSuccess(){watchView.
showToast("投屏成功!
");stopWatch();}});}5、看回放(1)看回放Watchplayback实例:Watchplayback实例,和观看直播类似,传入Context,ContainerLayout(这里需要传入一个RelativeLayout,用于生成观看回放),callback获取观看回放时的一些状态.
观看回放的操作和观看直播一样,请求的方法相同,参数相同.
代码可以参考上面的观看直播.
WatchPlayback.
Builderbuilder=newWatchPlayback.
Builder().
context(playbackView.
getmActivity()).
containerLayout(playbackView.
getContainer()).
callback(newWatchCallback()).
docCallback(newDocCallback());//新增回放绘制PPT和白板watchPlayback=builder.
build();一键观看回放:(参数和观看直播相同)一键观看回放,参数和观看直播相同,传递的观看实例变成WatchedPlayBack,参数字段描述id活动IDnickname用户名email用户邮箱vhall_idVhallId(登陆后获取,没有传空)回放这里传空password密码(K值)recordId回放片段ID(只在观看回放使用)WatchPlayBack观看回放实例RequestCallback回调信息VhallSDK.
getInstance().
initWatch(param.
id,"test","test@vhall.
com",vhallId,param.
k,,recordIdgetWatchPlayback(),newVhallSDK.
RequestCallback(){@Overridepublicvoidsuccess(){//获取观看信息成功}@Overridepublicvoidfailed(interrorCode,Stringreason){失败}});(2)观看回放事件回调VhallSDK.
getInstance().
initWatch(param.
id,"test","test@vhall.
com",vhallId,param.
k,recordId,getWatchPlayback(),privateclassWatchCallbackimplementsWatchPlayBack.
WatchEventCallback{@OverridepublicvoidonError(interrorCode,StringerrorMsg){//错误返回错误码}@OverridepublicvoidonStateChanged(booleanplayWhenReady,intplaybackState){/switch(playbackState){/播放器过程中的状态信息caseVhallHlsPlayer.
STATE_IDLE://闲置状态break;caseVhallHlsPlayer.
STATE_PREPARING://准备状态break;caseVhallHlsPlayer.
STATE_BUFFERING://正在加载break;caseVhallHlsPlayer.
STATE_READY://正在加载break;caseVhallHlsPlayer.
STATE_ENDED://准备就绪break;caseVhallHlsPlayer.
STATE_ENDED://结束default:break;}}@OverridepublicvoiduploadSpeed(Stringkbps){//速度}@OverridepublicvoidonStartFailed(StringerrorMsg){//初始化观看播放器时的错误}}(3)播放器方法当观看信息请求成功,虽然和观看直播请求的是相同的方法,但是逻辑处理不同,SDK会默认得到播放地址并设置进播放器中,用户只需调用watchPlayback实例中的各种方法来获取想要得到的信息.

开始播放:getWatchPlayback().
start();暂停播放:getWatchPlayback().
pause();停止播放:getWatchPlayback().
stop();获取播放进度:getWatchPlayback().
seekTo(playerCurrentPosition);获取当前播放进度:getWatchPlayback().
getCurrentPosition();获取播放时长:getWatchPlayback().
getDuration();是否正在播放getWatchPlayback().
isPlaying();(4)发送/获取评论信息发送参数参数字段描述text评论内容user_id用户登陆返回的唯一标识RequestCallback回调信息代码展示getWatchPlayback().
sendComment(text,user_id,newVhallSDK.
RequestCallback(){@Overridepublicvoidsuccess(){//接口请求成功chatView.
clearInputContent();chatView.
clearChatData();}@Overridepublicvoidfailed(interrorCode,Stringreason){}});错误码描述10010活动不存在10011不是该平台下的活动10017活动ID不能为空10806内容不能为空10807用户ID不能为空10808当前用户未参会获取参数参数字段描述webinar_id活动IDlimit每页的数量(取条目最多为50条)pos偏移量(如果从0开始就是最新的一条)ChatServer.
ChatRecordCallback()回调信息watchPlayback.
requestCommentHistory(webinar_id,String.
valueOf(limit),String.
valueOf(pos),newChatServer.
ChatRecordCallback(){@OverridepublicvoidonDataLoaded(Listlist){//接口请求成功chatView.
notifyDataChanged(list);chatView.
clearInputContent();}@OverridepublicvoidonFailed(interrorcode,Stringmessaage){Log.
e(TAG,"messaage-->"+messaage);}});错误码错误码描述10030身份验证出错10402当前活动ID错误10403活动不属于自己10407查询数据为空10412直播中,获取失败10413获取条目最多为50条10409参会信息不存在10410活动开始时间不存在备注:如果出现相同的评论信息,请根据请求后返回的ID去重(5)观看回放绘制PPT和白板1回调WatchPlayBack.
DocumentEventCallbackprivateclassDocCallbackimplementsWatchPlayback.
DocumentEventCallback{@OverridepublicvoidonEvent(Stringkey,ListmsgInfos){if(msgInfos!
=null&&msgInfos.
size()>0){documentView.
paintPPT(key,msgInfos);documentView.
paintBoard(key,msgInfos);}}@OverridepublicvoidonEvent(MessageServer.
MsgInfomsgInfo){documentView.
paintPPT(msgInfo);documentView.
paintBoard(msgInfo);}}备注:在Builder观看回放实例的时候加入docCallback()6滤镜直播:使用滤镜发起直播,需要使用新的CameraFilterView发起直播,目前提供美颜滤镜,方法实现调用CameraFilterView中实现滤镜的方法第一步创建美颜滤镜VhallBeautyFilter第二步设置CameraFilterView第三步设置美颜等级if(beautyFilter==null){beautyFilter=newVhallBeautyFilter();cameraview.
setFilter(beautyFilter);beautyFilter.
setBeautyLevel(level)(1~5)}cameraFilterView.
setAutoCloseFilterCallback(newGPUImageRenderer.
AutoCloseBaeutyFilter(){@OverridepublicvoidonAutoCloseBaeutyFilter(){}});cameraFilterView.
setFilterAdjuster(intadjuster)六、功能接入介绍1、聊天服务器相关功能当用户在创建发起直播实例或者观看直播实例时的.
ChatCallback中传入chatCallback回调,聊天服务器就已经开启了,具体参考快速接入介绍中的发起观看创建实例的描述以下是聊天服务器回调privateclassChatCallbackimplementsChatServer.
Callback{@OverridepublicvoidonChatServerConnected(){}//聊天服务器建立@OverridepublicvoidonConnectFailed(聊天服务器连接失败@OverridepublicvoidonChatMessageReceived(ChatServer.
ChatInfochatInfo){//消息接收switch(chatInfo.
event){caseChatServer.
eventMsgKey://聊天消息通知break;caseChatServer.
eventOnlineKey://上线消息通知break;caseChatServer.
eventOfflineKey://下线消息通知break;caseChatServer.
eventQuestion://问答消息break;}}@OverridepublicvoidonChatServerClosed(){}//聊天服务器关闭}公共字段字段描述account_id用户IDuser_name用户昵称avater用户头像room活动idevent消息类型(用于区分消息用途)time发送时间聊天服务器其他方法连接聊天服务器:getBroadcast().
connectChatServer();关闭聊天服务器:getBroadcast().
disconnectChatServer();(1)、上下线消息通知使用此功能默认聊天服务器已开启消息体说明:chatInfo.
event="onlineoffline"OnlineData描述role用户类型host:主持人guest:嘉宾assistant:助手user:观众concurrent_user房间内当前用户数is_gag是否被禁言attend_count参会人数(2)、聊天消息使用此功能默认聊天服务器已开启目前发起直播和观看直播中可以聊天.
发起直播调用getBroadCast().
sendChat()方法.
观看直播调用getWatchLive().
sendChat().
参数说明:参数字段描述text聊天内容VhallSDK.
RequestCallback回调信息发起直播代码展示&&观看直播代码展示:getBroadcast().
sendChat(text,newVhallSDK.
RequestCallback(){//发起直播时聊天@Overridepublicvoidsuccess(){}@Overridepublicvoidfailed(interrorCode,Stringreason){}});getWatchLive().
sendChat(text,newVhallSDK.
RequestCallback(){//观看直播时聊天@Overridepublicvoidsuccess(){}@Overridepublicvoidfailed(interrorCode,Stringreason){}});(3)、自定义消息使用此功能默认聊天服务器已开启消息体说明:chatInfo.
event="broadcast"ChatData描述text聊天内容getWatchLive().
sendCustomt(text,newVhallSDK.
RequestCallback(){@Overridepublicvoidsuccess(){}@Overridepublicvoidfailed(interrorCode,Stringreason){}});(4)、聊天记录获取SDK聊天记录.
聊天记录只在观看直播时候获取,调用acquireChatRecord()参数说明:参数描述showAll显示当次直播聊天最多为20条,true显示所有聊天最条为20条ChatRecordCallback聊天记录回调代码展示:getWatchLive().
acquireChatRecord(false,newChatServer.
ChatRecordCallback(){@OverridepublicvoidonDataLoaded(Listlist){}@OverridepublicvoidonFailed(interrorcode,Stringmessaage){}});错误码错误码描述10030身份验证出错10402当前活动ID错误10403活动不属于自己10407查询数据为空10408当前活动非直播状态10409参会信息不存在10410活动开始时间不存在(5)、问答消息发送活动问答目前只支持观看端发送活动问答.
在用户登陆成功的情况下可以发送问答,问答每5分钟发送一次,避免一些用户恶意发送.
调用sendQues()方法,发送问答信息.
代码展示getWatchLive().
sendQuestion(text,newVhallSDK.
RequestCallback(){@Overridepublicvoidsuccess(){//发送成功}@Overridepublicvoidfailed(interrorCode,Stringreason){//发送失败}});消息体说明:chatInfo.
event="question"QuestionData描述id问题的idnick_name昵称content提问内容join_id参会IDcreated_at创建时间role_name角色is_open是否为私密回答QuestionDataanswer参数和此消息体相同错误码错误码描述10601不是直播10602参会者不存在106035分钟内不可提问10604活动ID不能为空10605问题不能为空10606用户不能为空2、消息服务器相关功能消息服务器,目前只用于观看端使用,用于接收观看直播时的一些消息处理privateclassMessageEventCallbackimplementsMessageServer.
Callback{@OverridepublicvoidonEvent(MessageServer.
MsgInfomessageInfo){switch(messageInfo.
event){caseMessageServer.
EVENT_PPT_CHANGED://PPT翻页消息documentView.
showDoc(messageInfo.
pptUrl);break;caseMessageServer.
EVENT_DISABLE_CHAT://禁言暂不可用break;caseMessageServer.
EVENT_KICKOUT://踢出暂不可用break;caseMessageServer.
EVENT_OVER://直播结束break;caseMessageServer.
EVENT_PERMIT_CHAT://解除禁言暂不可用break;caseMessageServer.
EVENT_START_LOTTERY://抽奖开始break;caseMessageServer.
EVENT_END_LOTTERY://抽奖结束break;caseMessageServer.
EVENT_NOTICE:公告消息break;caseMessageServer.
EVENT_SIGNIN://签到消息break;caseMessageServer.
EVENT_QUESTION://问答开关break;}}@OverridepublicvoidonConnectFailed(){}@OverridepublicvoidonMsgServerClosed(){}}公共参数:字段描述event消息类型(用于区分消息用途)连接消息服务器:getWatchLive().
connectMsgServer();关闭消息服务器:getWatchLive().
disconnectMsgServer();(1)、活动结束消息msgInfo.
event="MessageServer.
EVENT_OVER"(2)、抽奖消息观看直播时播主可以发起抽奖,而在移动端观看时可以接受抽奖消息,目前默认游客和参会用户都可以抽奖,而且只能被中奖一次开始抽奖消息体msgInfo.
event="MessageServer.
EVENT_START_LOTTERY"字段描述Num可以中奖的数量type消息类型键结束抽奖消息体msgInfo.
event="MessageServer.
EVENT_END_LOTTERY"字段描述type消息类型键Msginfo.
Lists返回中奖的数组IsLottery是否中奖id当前中奖人的参会IDLotteryID抽奖IDMsginfo.
Lists结构体字段描述nickname中奖昵称user_id用户IDthird_user_id登陆用户名当用户中奖后,需要提交信息,访问SDK中的submitLotteryInfo(),所需参数如下字段描述字段描述id当前中奖人的参会IDLotteryID抽奖IDname中奖人姓名phone中奖人电话SDK代码展示VhallSDK.
getInstance().
submitLotteryInfo(joid_id,lottery_id,nickname,phone,newVhallSDK.
RequestCallback(){@Overridepublicvoidsuccess(){}@Overridepublicvoidfailed(interrorCode,Stringreason){}});}错误码字段描述10030身份验证失败10409参会ID不能为空10410抽奖ID不能为空10411用户名称不能为空10412用户手机不能为空(3)、公告消息msgInfo.
event="MessageServer.
EVENT_NOTICE"当主播正在直播,可以发送公告,公告发送后所有观看的用户都可以接受到消息,Demo中用跑马灯展示字段描述content公告内容publish_release_time公告发布时间(4)、签到消息msgInfo.
event="MessageServer.
EVENT_SIGNIN"当主播正在直播,可以发布签到,观看用户必须登陆才可以签到,签到后web端会进行展示字段描述webinar_id活动IDsign_id签到IDuser_id用户IDsign_show_time签到初始时间(5)、问卷消息msgInfo.
event="MessageServer.
EVENT_SURVEY"当主播正在直播,可以发送问卷,消息服务器会接收到survey_id,需要使用这个survey_id获取问卷信息VhallSDK.
getInstance().
getSurveyInfo(surveyid,newSurveyDataSource.
SurveyInfoCallback(){@OverridepublicvoidonSuccess(Surveysurvey){watchView.
showSurvey(survey);}@OverridepublicvoidonError(interrorCode,StringerrorMsg){chatView.
showToast(errorMsg);}});字段描述survey_id问卷ID(6)、白板消息msgInfo.
event="MessageServer.
EVENT_SHOWBOARD"//开启或者关闭白板msgInfo.
event="MessageServer.
EVENT_INITBOARD"//初始化白板msgInfo.
event="MessageServer.
EVENT_PAINTBOARD"//绘制白板msgInfo.
event="MessageServer.
EVENT_DELETEBOARD//删除白板内容msgInfo.
event="MessageServer.
EVENT_CLEARBOARD"//清空白板配置白板XML(在需要显示的界面中加入,具体详见文档)2、获取到白板的实例调用setStep方法,将消息服务器获取的信息传递进方法里就可以了publicvoidpaintBoard(MessageServer.
MsgInfomsgInfo){board.
setStep(msgInfo);}publicvoidpaintBoard(Stringkey,ListmsgInfos){board.
setSteps(key,msgInfos);}(7)、PPT消息(修改)msgInfo.
event="MessageServer.
EVENT_CHANGEDOC"//切换文档页面msgInfo.
event="MessageServer.
EVENT_PAINTDOC"//绘制文档信息msgInfo.
event="MessageServer.
EVENT_DELETEDOC"//删除绘制信息msgInfo.
event="MessageServer.
EVENT_CLEARDOC"//清空绘制信息1配置文档XML(在需要显示的界面中加入,具体详见文档)2获取到文档的实例调用setStep方法,将消息服务器获取的信息传递进方法里就可以了@OverridepublicvoidpaintPPT(MessageServer.
MsgInfomsgInfo){doc.
setStep(msgInfo);}@OverridepublicvoidpaintPPT(Stringkey,ListmsgInfos){doc.
setSteps(key,msgInfos);}3、分辨率切换/切换到单音频目前定义的分辨率有publicstaticfinalintDPI_DEFAULT=0;//默认publicstaticfinalintDPI_SD=1;//标清publicstaticfinalintDPI_HD=2;//高清publicstaticfinalintDPI_UHD=3;//超高清publicstaticfinalintDPI_AUDIO=4;//纯音频功能实现:只需要将定义好的常量传到watchLive实例中,调用setDefinition(pixel),当停止直播之后,不能立即重连,需要延迟1秒getWatchLive().
setDefinition(level)获取分辨率是否可用返回一个map状态为0不可用:1可用getWatchLive().
getDefinitionAvailable();4、设置观看布局目前观看端WatchLive定义了5种适配类型,用户可以根据自己的场景去设定观看类型描述FIT_DEFAULT默认自适应FIT_CENTER_INSIDE视频的原始尺寸居中显示FIT_X拉伸X轴,等比例放大(适合PC端发起)FIT_Y拉伸Y轴,等比例放大(适合移动端发起)FIT_XY拉伸XY轴(会拉伸,也会全屏)设置方法//scaleType观看类型getWatchLive().
setScaleType(scaleType);第三方K值认证观看直播、观看回放的权限控制,支持使用客户的权限验证逻辑.
具体可参考:http://e.
vhall.
com/home/vhallapi/embed认证流程开启设置第三方回调接口设置全局设置:针对所有的活动配置生效,如果针对单个活动再做配置,以单个活动配置为最终配置.
接口调用设置接口:webinar/whole-auth-url全局配置第三方K值验证URL针对某个活动的配置方式一:通过页面配置http://e.
vhall.
com/webinar/auth/123456789,数字表示自己帐号下的活动id针对某个活动的配置方式二:通过接口(webinar/create或webinar/update)设置接口参数:use_global_k,默认为0不开启,1为开启,是否针对此活动开启全局K值配置;当设置为0后,则以单个活动的配置为最终配置.
Vhall接口URL中请务必带上k参数,如果这个参数为空或者没有这个参数,则视为认证失败Vhall系统收到用户的接口访问请求后,会向第三方认证URL(auth_url)发送HTTPPOST请求,同时将email和k值作为POST数据提交给第三方认证.
由第三方系统验证k值的合法性.
如果认证通过,第三方认证URL(auth_url)返回字符串pass,否则的返回fail注:需要确保您的回调地址支持multipart/form-data方式接收post数据.
Vhall系统根据第三方认证URL返回值判断认证是否成功.
只有收到pass,才能认定为验证成功,否则一律跳转到指定的认证失败URL,或者提示'非法访问'K值使用网页嵌入或SDK里的调用方法,请务必带上k参数,如果这个参数为空或者没有这个参数,则视为认证失败网页嵌入地址类似:http://e.
vhall.
com/webinar/inituser/123456789email=test@vhall.
com&name=visitor&k=随机字符串SDK里的调用方法,需要传递3个参数name,email,passemail:可选参数,如果不填写系统会随机生成邮箱地址.
由于email自身的唯一性,我们推荐使用email来作为唯一标识有效用户的字段.
对于第三方自有用户数据的系统,也可以使用一些特征ID作为此标识,请以email的格式组织,比如在第三方系统中,用户ID为123456,可在其后添加一个@domain.
com,组成123456@domain.
com形式的email地址.

Spinservers:美国独立服务器(圣何塞),$111/月

spinservers是Majestic Hosting Solutions,LLC旗下站点,主营美国独立服务器租用和Hybrid Dedicated等,spinservers这次提供的大硬盘、大内存服务器很多人很喜欢。TheServerStore自1994年以来,它是一家成熟的企业 IT 设备供应商,专门从事二手服务器和工作站业务,在德克萨斯州拥有40,000 平方英尺的仓库,库存中始终有数千台...

创梦网络-新上雅安电信200G防护值内死扛,无视CC攻击,E5 32核高配/32G内存/1TB SSD/100Mbps独享物理机,原价1299,年未上新促销6折,仅779.4/月,续费同价

创梦网络怎么样,创梦网络公司位于四川省达州市,属于四川本地企业,资质齐全,IDC/ISP均有,从创梦网络这边租的服务器均可以****,属于一手资源,高防机柜、大带宽、高防IP业务,另外创梦网络近期还会上线四川眉山联通、广东优化线路高防机柜,CN2专线相关业务。广东电信大带宽近期可以预约机柜了,成都优化线路,机柜租用、服务器云服务器租用,适合建站做游戏,不须要在套CDN,全国访问快,直连省骨干,大网...

ProfitServer$34.56/年,西班牙vps、荷兰vps、德国vps/不限制流量/支持自定义ISO

profitserver怎么样?profitserver是一家成立于2003的主机商家,是ITC控股的一个部门,主要经营的产品域名、SSL证书、虚拟主机、VPS和独立服务器,机房有俄罗斯、新加坡、荷兰、美国、保加利亚,VPS采用的是KVM虚拟架构,硬盘采用纯SSD,而且最大的优势是不限制流量,大公司运营,机器比较稳定,数据中心众多。此次ProfitServer正在对德国VPS(法兰克福)、西班牙v...

视频直播sdk为你推荐
长江航道周服务信息namesgraph模式ios8支持ipad支持ipad特斯拉苹果5css下拉菜单html+css下拉菜单怎么制作win7telnet怎样开启Windows7系统中的Telnet服务win7如何关闭445端口如何关闭445端口,禁用smb协议迅雷快鸟迅雷快鸟是做什么用的,,,
长沙服务器租用 免费国际域名 vps交流 免费申请域名 联通c套餐 174.127.195.202 好看qq空间 毫秒英文 个人免费主页 外贸空间 电信网络测速器 乐视会员免费领取 优惠服务器 studentmain 国内云主机 kosspp 正在登陆游戏服务器 运维堡垒主机 七夕促销海报 小客车指标申请网站 更多