版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android系统上的“自助式网络直播SDK”技术方案目录TOC\o"1-5"\h\z\o"CurrentDocument"一、 简介 3\o"CurrentDocument"三、 权限开通申请 3\o"CurrentDocument"四、 SDK使用准备 3\o"CurrentDocument"1、 下载SDK&DEMO 3\o"CurrentDocument"2、 开发环境要求 33、 需要导入的Jar 4\o"CurrentDocument"4、 动态库SO 4\o"CurrentDocument"5、 权限及配置 4\o"CurrentDocument"6、 代码混淆 5五、 快速接入介绍 51、 权限认证信息配置 5\o"CurrentDocument"2、 发起直播流程 5\o"CurrentDocument"3、 观看直播流程 5\o"CurrentDocument"4、 基础功能说明 6\o"CurrentDocument"5、 响应事件(回调) 6\o"CurrentDocument"6、 发起直播详解 7\o"CurrentDocument"7、 RTMP观看直播详解 8\o"CurrentDocument"8、 HLS观看直播及HLS观看回放 9\o"CurrentDocument"9、 支持文档演示 10六、 DEMO简介 10\o"CurrentDocument"七、 第三方K值认证 11\o"CurrentDocument"1、 认证流程 11\o"CurrentDocument"2、 开启设置 11\o"CurrentDocument"3、 K值使用 11
一、简介本文档为了指导开发者更快使用Android系统上的“自助式网络直播服务SDK”,默认读者已经熟悉IDE的基本使用方法(本文以Eclipse为例),以及具有一定的编程知识基础等。支持的产品特性如下:分类特性名称描述发起直播支持编码类型音频编码:AAC,视频编码:H.264支持推流协议RTMP视频分辨率640*480屏幕朝向横屏、竖屏闪光灯开/关静音开/关切换摄像头前、后置摄像头目标码率使用软编,码率固定在300-400之间,暂不可修改支持环境Android4.0以上,观看直播支持播放协议RTMP/HLS延时RTMP:2-4秒,HLS:20秒左右支持解码H.264文档演示(new)支持文档演示文档可与视频同步演示观看回放支持协议HLS权限第三方K值认证支持客户自己的权限验证机制来控制观看直播、观看回放的权限其它代码安全支持代码混淆二、 权限开通申请请点击API&SDK权限申请立即沟通申请,申请后客户经理会在线上与您直接联系。审核通过后,可以获取开发应用的权限信息:App_Key、Secret_Key、AppSecret_Key。三、 SDK使用准备1、 下载SDK&DEMO2、 开发环境要求Pc操作系统:64window系统JDK:1.6以上Eclipse:建议使用官方已经集成的Eclipse,谨慎使用AndroidstudioAndroid:4.0以上备注:Android设备操作系统需要4.0以上,需要访问手机硬件,暂不支持模拟器开发3、 需要导入的JarVhallsdk.jar4、 动态库SOLibdynload.soLibffmpeg.soLibjingle.solibstlport_shared.solibVinnyLive.so5、 权限及配置<uses-permissionandroid:name="android.permission.CAMERA"/><uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permissionandroid:name="android.permission.RECORD_AUDIO"/><uses-permissionandroid:name="android.permission.RECORD_VIDEO"/><uses-permissionandroid:name="android.permission.INTERNET"/><uses-permissionandroid:name="android.permission.WRITE_SETTINGS"/><uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/><uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permissionandroid:name="android.permission.FLASHLIGHT"/><uses-permissionandroid:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/><uses-featureandroid:name="android.hardware.camera"/><uses-featureandroid:name="android.hardware.camera.autofocus"/>备注:主要是访问网络.Wife.还有手机硬件的Camera6、 代码混淆若app打包需要进行代码混淆,请添加:-dontwarn-com.vhall.**-dontwarn-com.vinny.**-keepclasscom.vhall.**{*;}-keepclasscom.vinny.**{*;}四、快速接入介绍1、 权限认证信息配置以下信息配置到文件里。文件名称:src\com\example\rtmpdemo\Constants.javapublicclassConstants{publicstaticfinalStringAPP_KEY="";publicstaticfinalStringAPP_SECRET_KEY="”;}其中:App_Key、App_Secret_Key:从此页面获取到,2、 发起直播流程第一步预览采集Camera:在Activity的onCreate方法中,创建CameraNewView,并且初始化第二步发起直播:设置开始按钮,在可点击情况下调用NativeLive.StartPublish(StringUrl)。第三步建立Socket发起直播成功后,连接Socket建立参会newZReqEngine().newAttend()第四步停止直播:设置停止按钮,在可点击情况下调用NativeLive.StopPublish()3、 观看直播流程第一步创建观看View在Activity的onCreate方法中,创建PlayView,并且初始化第二步开始观看NativeLive.StartRecv(StringwatchUrl)第三步停止观看
NativeLive.StopRecv()4、 基础功能说明备注:以下功能根据各自需求自行选取使用,设置后即可显示Step1:初始化播放器PlayViewplayview=newPlayView(GLSurfaceView)playview.init(with,height)playview.updataScreen(byte[]Y,byte[]U,byte[]V)playview.updataScreenAll(byte[]YUV)Step2:初始化音频AudioPlayaudio=newAudioPlay()Audio.init(intsampleRate,intchannelConfig,intaudioFormat)Audio.play(byte[]data,intsize)Audio.destory()Step3:使用自定义CameraNewView自定义view已经对手机摄像头(Camera)做好了处理,实时采集每一帧数据,包括摄像头的切换,闪光的开启,用户可以自行调用。mCameraView=(CameraNewView)this.findViewByld(R.id.cameraview);5、 响应事件(回调)直播观看过程中的回调LiveCallback:在你当前开启直播的页面,初始化直播回调:LiveCallbacklivecallback=newLiveCallback;实现其中的回调方法:publicvoidnotifyVideoData(byte[]data)publicintnotifyAudioData(byte[]data,intsize)publicvoidnotifyEvent(intresultCode,Stringcontent)publicvoidonH264Video(byte[]data,intsize,inttype)在当前ActivityonCreate方法中加入回调LiveObs.setCallBack(livecallback);其中notifyEvent(resultCode,content)返回的resultCode是底层定义的直播状态,需要用户对其自行处理。状态定义如下:publicstaticfinalintOK_PublishConnect=0; //直播连接服务器成publicstaticfinalpublicstaticfinalpublicstaticfinalpublicstaticfinalpublicstaticfinalpublicstaticfinalintERROR_PublishConnect=1; //直播连接服务器失败intOK_WatchConnect=2;〃观看直播连接服务器成功intERROR_WatchConnectpublicstaticfinalintOK_PublishConnect=0; //直播连接服务器成publicstaticfinalpublicstaticfinalpublicstaticfinalpublicstaticfinalpublicstaticfinalpublicstaticfinalintERROR_PublishConnect=1; //直播连接服务器失败intOK_WatchConnect=2;〃观看直播连接服务器成功intERROR_WatchConnectintStartBufferingintStopBufferingintERROR_Param3;//观看直播连接服务器失败=4;//开始缓冲=5;//停止缓冲=6;//错误参数publicstaticfinalintpublicstaticfinalintpublicstaticfinalintpublicstaticfinalintpublicstaticfinalintpublicstaticfinalintpublicstaticfinalintpublicstaticfinalint6、 发起直播详解publicstaticfinalintpublicstaticfinalintpublicstaticfinalintpublicstaticfinalintpublicstaticfinalintpublicstaticfinalintpublicstaticfinalintpublicstaticfinalint6、 发起直播详解ERROR_NeedReconnectERROR_SendINFO_Speed_UploadINFO_Speed_DownloadINFO_NetWork_StatusINFO_Decoded_Video=INFO_Decoded_Audio=INFO_Record_Audio==7;//错误需要重新连接=8;//发送直播流失败=9;//上传速度Kbps单位=10;//下载速度Kbps单位=11;//网络状态12;//视频解码13;//音频解码20;//录音用户使用VhallSDK发起直播需要首先了解几个重要的类LiveParam 直播中所需的重要参数(这些参数会被传入底层,错误的参数会让Activity报错,目前默认使用分辨率640*480更高的分辨率暂不支持)ConnectionChangeReceiver 用来检测网络变化定义的一些常量publicstaticfinalintNET_ERROR=0;publicstaticfinalintNET_UNKNOWN=1;publicstaticfinalintNET_2G3G=2;publicstaticfinalintNET_WIFI=3;第一步初始化直播信息创建Activity,初始化自定义viewCameraNewView,此时的CameraNewView被创建,开启PreviewCallback回调,实现onPreviewFram(),获取Camera采集的每一帧的数据,将此数据传递底层处理mCameraView=(CameraNewView)this.findViewById(R.id.cameraview);mCameraView.init(param,this,newRelativeLayout.LayoutParams(0,0));mCameraView.startPublish()//此方法须直播回调中返回OK_PublishConnect才能调用此处代码必须添加NativeLive.CreateVinnyLive();//创建VinnyLive对象LiveObs.setCallback(mLiveCallBack);//设置直播回调NativeLive.EnableDebug(true);//是否打开Debug模式(会打印日志)NativeLive.AddObs();//添加直播的监听第二步创建button,开启直播。这时调用底层方法,连接推流地址,需要传递一个参数Path,Path为流的地址。判断这个方法,如果返回的是0,则连接成功,返回非0,则连接失败NativeLive.StartPublish(path) // 连接推流地址第三步处理直播时的回调当直播成功之后,处理直播时时返回的信息 ,详细方法可以参考直播过程的回调LiveCallback,处理方案根据各自需求自行处理。第四步停止直播
CameraView.stopPublish();NativeLive.StopPublish()7、 RTMP观看直播详解第一步初始化PlayViewAudioPlayplayView初始化时需要传入GLSurfaceView,使用它需要用户自定义一个渲染器(render)不过这里在初始化时已经定义好,用户可以直接使用mPlayView=newPlayView(glSurfaceview);mPlayView.init(width,height)//传入初始化的宽高;此处代码必须添加NativeLive.CreateVinnyLive();//创建VinnyLive对象LiveObs.setCallback(mLiveCallBack);//设置直播回调NativeLive.EnableDebug(true);//是否打开Debug模式(会打印日志)NativeLive.AddObs(); //添加直播的监听获取用户的活动ID(此ID需要在PC上取得),请求ZReqEngine.watch(id,APP_KEY,APP_SECRET_KEY,name,email,password,newReqCallback())@paramid//活动ID必传@paramAPP_KEY//app_key@paramAPP_SECRET_KEY//app_secret_key@paramname//必传@paramemail//必传且保证唯性@parampassword//活动如果有K值需要传©callbackReqCallback//传入回调获取返回的参数请求成功之后,会在ReqCallbackOnSuccess()返回Json参数。@resultrtmp_video@resultvideo@resultstatus@resultrtmp_video@resultvideo@resultstatus@resultmsg_server@resultmsg_token//hls观看直播回放地址//当前播放状态//建立参会//建立参会请求失败之后,会在ReqCallbackOnFail()返回信息,直接打印即可建立参会,参会建立成功,可以统计参会人数。ZReqEngine.Attendattend=newZReqEngine().newAttend(msg_server,msg_token);第二步创建button开始观看将之前获取的观看地址传入当前方法Natiive.StarRecv(path)//连接接受地址 0则连接成功,非0则连接失败第三步处理直播时的回调这时会用到LiveCallback中的方法publicvoidnotifyVideoData(byte[]data) 〃得到正在直播的视频数据这时调用UpdateScreenAll(),将取得的视频信息传给PlayViewmPlayView.UpdateScreenAll(data)publicintnotifyAudioData(byte[]data,intsize) //得到正在直播的音频数据这时调用play(),将取得的视频信息传给AudioPlay备注:notifyEvent()依然需要调用第四步停止观看NativeLive.StopRecv()stopAudioPlayattend.disAttend();//关闭参会8、 HLS观看直播及HLS观看回放初始化VhallHlsPlayer,实现VhallHLSPlayer.Listener需要用户设置SurfaceViewStringuserAgent=Util.getUserAgent(this,"VhallAPP");mMediaPlayer=newVhallHlsPlayer(newHlsRendererBuilder(this,userAgent,path));//这里需要传入地址mMediaPlayer.addListener(mVhallPlayerListener);mMediaPlayer.setSurface(Surface);//设置SurfaceViewmMediaPlayer.setPlayWhenReady(true) //为true的时候开始播放实现VhallHLSPlayer.Listener 所需实现的方法如下publicvoidonStateChanged(booleanplayWhenReady,intplaybackState)(}//当播放状态发生改变的时候publicvoidonError(Exceptione)(} //播放错误的时候publicvoidonVideoSizeChanged(intwidth,intheight,intunappliedRotationDegrees,floatpixelWidthHeightRatio)(}//Video尺寸发生改变的时候获取播放地址之前需要先获取用户的活动ID(通过服务器接口获取)请求ZReqEngine.watch(id,APP_KEY,APP_SECRET_KEY,name,email,password,newReqCallback())@paramid//活动ID必传@paramAPP_KEY//app_key@paramAPP_SECRET_KEY//app_secret_key@paramname//必传,参会人员姓名,用于统计@paramemail//必传且保证唯一性,参会人员邮箱,用于统计,并做为用户的唯标识@parampassword//可选,活动如果有K值需要传©callbackReqCallback//传入回调获取返回的参数
请求成功之后,会在ReqCallbackOnSuccess()返回Json参数@resultrtmp_video@resultvideo@resultstatus@resultrtmp_video@resultvideo@resultstatus@resultmsg_server@resultmsg_token//hls观看直播回放地址//当前播放状态//建立参会//建立参会请求失败之后,会在ReqCallbackOnFail()返回信息,直接打印即可建立Socket连接参会,建立成功后,可以统计参会人数。ZReqEngine.Attendattend=newZReqEngine().newAttend(msg_server,msg_token);9、支持文档演示当直播活动类型为“视频+文档”或“音频+文档”时,通过以下方法可集成观看,文档会与视频或音频播放同步。publicclassClassNameimplementsZReqEngine.FlashMsgListener//观看直播页面实现此接口用于处理文档翻页消息ZReqEngine.Attendattend;//参会用于统计参与人数接收文档聊天等即时消息attend=newZReqEngine().newAttend(msg_server,msg_token);attend.setFlashMsgListener(this);//设置文档翻页消息接口attend.attend();//参会参会后可接受文档翻页消息©OverridepublicvoidonFlash(StringflashMsg)(//当直播文档翻页时,通过此回调处理消息,flashMsg为json数据//具体处理请看demo}attend.disAttend();//退出观看时取消参会五、DEMO简介1、 DEMO简介DEMO只针对核心功能进行演示,不包括UI界面设计。2、 主要测试参数说明:活动ID:指的是客户创建的一个直播活动的唯一标识,Demo测试时可从的控制台页面上获取到Token:Demo测试时可从页面调用接口获取到,有效期为24小时码率设置:主要用于视频编码设置,码率与视频的质量成正比,默认值300,单位Kbps缓冲时间:延时观看时间分辨率:640*480K值:默认为空,指的是控制直播观看权限的参数,具体使用说明参考3、 客户Server端需提供给APP的信息客户Server端需要提供如下信息:Id:通过客户Server端接口获取到,此接口需调用VHALL接口获取。AccessToken:通过客户Server端接口获取到,此接口需调用VHALL接口获取。六、第三方K值认证观看直播、观看回放的权限控制,支持使用客户的权限验证逻辑。1、 认证流程用户,对见召 VhaIIS-orvac 第三方认iiESer^8r—PITTPGET请京带k犬散JHTTP请求瞪证问宜:: :第三方认证i墨室考真W霎败:队证亮成’渣出pe浦Bn:2、 开启设置全局设置:针对所有的活动配置生效,如果针对单个活动再做配置,以单个活动配置为最终配置。通过接口调用设置webinar/whole-auth-url全局配置第三方K值验证URL针对某个活动的配置方式一:通过页面配置,数字表示自己帐号下的活动id针对某个活动的配置方式二:通过接口(webinar/create或webinar/update)设置3、 K值使用1)网页嵌入或SDK里的调用方法,请务必带上k参数,如果这个参数为空或者没有这个参数,则视为认证失败•网页嵌入地址类似:•SDK里的调用方法,需要传递3个参数name,email,pass
email:可选参数,如果不填写系统会随机生成邮箱地址。由于email自身的唯一性,我们推荐使用email来作为唯一标识有效用户的字段。对于第三方自有用户数据的系统,也可以使用一些特征ID作为此标识,请以email的格式组织,比如在第三方系统中,用户ID为123456,可在其后添加一个@,组成123456@形式的email地址。name:可选参数,如果不填写系统会随机生成。此字段表示用户昵称、姓名或其他有意义的字符串。可以为中文,但必须为UTF-8,且经过URL编码(urlencode)。k:可选参数,此字段为了提供给第三方可以根据自己的权限系统,验证客户是否可访问直播地址。ZReqEngine.watch(id,APP_KEY,APP_SECRE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基于本体的科学数据集成与共享:方法、实践与挑战
- 基于服务覆盖率优化的集装箱内陆中转站精准选址策略研究
- 基于有限元数值模拟的青藏高原东北缘地震活动性剖析与预测
- 基于智能算法的混合型汽车装配线排序策略与优化研究
- 2026年广西南宁市法官检察官遴选试题及答案
- 2026年陕西省汉中市辅警人员招聘考试题库及答案
- 2026年检测机构人员能力评价试题及答案
- 2026年呼伦贝尔市辅警考试题库(含答案)
- 2026教师资格证中学教育知识与能力试题及答案
- 2026年校园意识形态考核试题及答案
- 黄石住房公积金管理办法
- 外委班组等同化管理办法
- DB4405∕T 315-2025 非物质文化遗产 潮阳英歌
- 公路工程预算定额
- CJ/T 156-2001沟槽式管接头
- T/CECS 10214-2022钢面镁质复合风管
- JJF(新) 128-2024 热量表配对铂热电阻校准规范
- 黑洞课件教学课件
- 甲方工程管理手册
- 建筑安装工程设备与材料的划分
- DL∕T 5529-2017 电力系统串联电容补偿系统设计规程
评论
0/150
提交评论