直播SDK使用说明
应用基本的程序结构是用Manager
提供的接口完成相应功能的操作,从AHandler
继承实现一个接口类(下面假设实现的类名为XPHandler
),在其中完成事件的响应。
core支持三种模式:直播(边拍边传)、先拍后传、断点续传。通常来说,客户端应用程序的做法如下:
-
连接视频服务器,并进行认证:
- 调用Manager.setPreviewSize来设定预览画面大小
- 调用Manager.startPreview来打开预览画面,这一步在拍摄视频时是可选的,如果不显示打开预览画面,则在调用Manager.startRecord时会自动打开预览画面
- 调用Manager.setVideoResolution来设定直播视频的画面大小
- 调用Manager.startRecord开始直播, 其中传入的
is_offline
参数应该为false
- 当XPHandler.onLocalFilename被调用时,应用应该记录下来当前拍摄视频在本地存储的文件名, 以在将来断点续传时所用。此事件接口只有在硬编模式,且Manager.startRecord时传入的第三个参数
force_really_file==true
才可能被回调。因为当force_really_file==false
时本地不会产生视频文件,而目前软编模式也不会在本地产生视频文件,在这两种情况下是不支持断点续传的。
- 当XPHandler.onStreamIdNotify被调用时,应用应该记录下来当前的stream id以备用,此时代表视频已经通过服务器开始直播了。
- 在直播过程中,可以通过调用Manager.getUploadingSpeed获取直播上传数据的网络速度,也可以通过调用Manager.getCacheRemaining来获取当前由于网络拥塞缓存在本地的数据,以此判断延迟的长短。
- 在直播过程中,如果其他用户或管理系统发送的语音或文字消息到达相应的XPHandler.onRecvTextMessage或XPHandler.onRecvAudioMessage接口就会被回调。
- 在经过一段时间后,根据用户操作响应调用Manager.stopRecord来结束直播。
- 在调用Manager.stopRecord后不久,XPHandler.onRecordFinished被回调,表示直播被停止。
- 根据网络延迟在长短,XPHandler.onStreamUploaded将在一段时间后被回调,表示此次直播的数据已经完全上传完毕。
- 如有需要,重新回到步骤5开始一个新的直播。
注意,在XPHandler.onStreamUploaded被回调前,不可以再次发起一个直播流。应用在界面上应该锁住状态以防止异常发生,如在XPHandler.onStreamUploaded被调用前将直播按钮置于无效状态,禁止用户触发。
- 网络连接和认证步骤不是必须的。
- 同直播的2,3,4步骤,设定视频属性,打开预览等。
- 调用Manager.startRecord传入的第三个参数
is_offline
应该为true.
- XPHandler.onLocalFilename会被回调,应用记录离线拍摄的文件名,以备后面上传时所用。
- 在经过一段时间,由用户触发,调用Manager.stopRecord停止直播。
- XPHandler.onRecordFinished被回调。
例如:在一个activity(简称a_activity)里登录视频服务器,在另一个activity(简称b_activity)里进行预览拍摄。
- 在a_ctivity初始化数据,设置必要信息(参见上述初始化数据,设置 必要信息步骤)
- 在a_ctivity连接视频服务器,并进行认证:
- 调用Manager.setNetTimeout设定网络超时时间
- 调用Manager.connectCloud(Manager.connectVS或Manager.initNet)建立网络连接
- 在XPhandler.onConnectFail中进行断线重连处理
- 在XPhandler.onHandShake中调用Manager.tryLogin进行身份认证
- 在XPHandler.onAuthResponse中判断认证是否通过。
- 在认证成功后一直到断开连接的过程中:
- 在b_activity 中通过Manager.setPreviewSurface设置预览view;
- 在b_activity 中拍摄参考上面“2如果是视频直播中的 步骤2,3,4,5,6,7,8,9,10,11,12”
- 参照“直播”的步骤1,建立连接并完成认证。
- 根据XPHandler.onLocalFilename中记录的以前拍摄的视频文件名和路径,调用Manager.uploadVideoFile上传此视频文件。
- XPHandler.onParseVideoFileStart被回调,表示文件解析成功,正在开始上传。
- XPHandler.onParseVideoFileUpdate被回调,表示文件处理的进度。
- XPHandler.onParseVideoFileEnd被回调表示文件处理结束,但不代表文件上传结束。
- 在开始上传后和直播一样XPHandler.onStreamIdNotify将被回调,应用由此得到此视频在服务器上的唯一ID
- 同样,在上传过程中可以通过Manager.getCacheRemaining获取缓冲大小和Manager.getUploadingSpeed获取上传速度。
- 最后当视频完成上传后XPHandler.onStreamUploaded将被回调。
- 同样需要注意的是,在XPHandler.onStreamUploaded被回调前,禁止发起一个新的数据流(数据流的定义见术语定义章节)
直播云暂不支持断点续传功能。
- 网络连接不是必须的
- 调用Manager.setPreviewSize来设定预览画面大小
- 调用Manager.startPreview来打开预览画面
- 调用Manager.takePicture来拍摄照片,传入所拍照片的尺寸。
- XPHandler.onTakePicture被回调,应用记录其中传来的file_name参数,记录此照片文件名(包括全路径)
- 参照“直播”步骤1,建立连接并完成认证。
- 根据在XPHandler.onTakePicture中记录的以前拍摄的照片文件名和路径,调用Manager.uploadFile上传此照片文件。
- XPHandler.onUploadFileStart被回调,以通知应用上传已经开始
- 同样,在上传过程中可以通过Manager.getCacheRemaining获取缓冲大小和Manager.getUploadingSpeed获取上传速度。
- 在经过一段时间后XPHandler.onUploadFileEnd被回调,以通知应用上传已经完成。
同样,在收到XPHandler.onUploadFileEnd前不能发生一个新的数据流(数据流的定义参考术语定义)。直播云暂不支持该功能,该功能适用于独立视频服务器。
横屏拍摄
在AndroidManifest.xml
配置android:screenOrientation=”landscape”
即为横屏拍摄模式
竖屏拍摄
在AndroidManifest.xml
配置android:screenOrientation=”portrait”
并且在开始直播前
调用以下代码
Manager.forcePortrait(true)
Android4.0以下的设备不支持竖屏拍摄
特别注意
如果AndroidManifest.xml
中没有配置android:screenOrientation=""
则需要配置android:configChanges="keyboard|orientation"
,否则在改变设备姿态时,activity
会退出