该接口类包含了一系列的函数,应用可以通过这些函数操作core完成视频的拍传、离线拍摄、断点续传等工作。
与云平台建立连接 此接口用于连接直播云,此接口非阻塞模式,调用后立即返回,连接是否成功通过回调通知。 该接口是对initNet 的更新和优化,连接直播云时请使用该api。注意手机设备时间需是网络获取标准时间,否则会连接失败。
public static boolean connectCloud(String http_api_url, int timeout, String service_code, int buff_size)
直连VS,此接口为非阻塞模式,调用后立即返回,连接是否成功通过回调通知。请注意此接口接受的是VS的地址和端口,该接口是对initNet的补充。
public static boolean connectVS(String vs_host, int vs_port, int timeout, String service_code, int buff_size))
释放SDK使用的资源, 此方法必须放在通过init传入的Activity类的onDestroy方法中,否则在应用直接退出时可能会有资源泄漏,或未关闭摄像头导致下次启动后预览或录制失败。
public static void deInit()
客户端主动与服务器断开连接。
public static boolean disconnect()
设置认证模式 如果不设置 默认为挑战认证模式。
public static boolean forceAuthenMode(int mode)
mode
Manager.HANDSHAKE_CLEAR_PASSWORD
为明文认证模式,Manager.HANDSHAKE_CHALLENGE
为挑战认证模式强制竖屏拍摄模式,该接口配合updateOrientation接口设置竖屏拍摄时使用。
public static boolean forcePortrait(boolean isPortrait)
isPortrait
true为强制竖屏,false反之。获取已发送数据字节数。
public static long getBytesSent()
获取当前本地缓存的数据字节数。
public static int getCacheRemaining()
获取当前摄像头实例。
public static Camera getCamera()
获取当前摄像头ID。
public static CameraID getCurrentCameraId()
获取当前帧率。
public static int getCurrentFPS()
获取当前视频分辨率。
public static Resolution getCurrentVideoResolution()
获取core当前使用的回调接口实例。
public static AHandler getHandler()
获取本地视频文件路径名。
public static String getLocalVideoDir()
获取摄像头所支持的最大zoom级别。
public static int getMaxZoomLevel()
获取已录制毫秒数。
public static long getRecordDuration()
获取录制状态。
public static RecordStatus getRecordStatus()
获取SDK版本号。
public static int getSdkVersion()
获取摄像头支持的帧率列表。
public static List<int[]> getSupportedFps()
注意该API需在getSupportedVideoResolutions或startPreview之后调用才能获得正确的值,否则得到的为null。
获取摄像头支持的拍照分辨率列表。
public static List<Camera.Size> getSupportedPictureSizes()
获取当前可用的录制模式,录制模式和摄像头有关,因此在调用了setCameraId切换摄像头之后需要重新调用此方法以获取最新的模式列表。
public static List<RecordMode> getSupportedRecordModes()
获取当前摄像头支持的视频分辨率,在调用了setCameraId切换摄像头之后,需要重新调用此方法以获取最新的分辨率列表。
public static List<Resolution> getSupportedVideoResolutions()
如果该方法返回为null,则可能是发生了不可恢复的硬件错误(例如由于异常操作导致摄像头资源未被释放等),若重启应用程序该函数还是返回null则需重启手机。
获取当前上传数据的实际速率,以byte为单位。
public static int getUploadingSpeed()
初始化SDK, 此方法必须在其他所有Api之前被调用。该函数只应被调用一次,多次调用会重新初始化一些参数导致已设置的参数失效。
public static int init(Activity activity, AHandler handler)
activity
初始化SDK, 此方法必须在其他所有Api之前被调用, core只是一个库,当其被应用使用时,需要得知应用的上下文环境,需要传入一个acitivty
。handler
handler
是一个实现了Ahandler
所有事件回调接口的类的实例, core是通过回调机制来通知应用发生的各种事件, AHandler
是core提供的一个回调接口的基类,应用需要继承Ahandler
并实现其中所有的虚函数。然后通过此方法将实现的接口类的实例告诉Manager
。在相应的示例程序中,继承AHandler
是XPHandler.java
,开发者应该完全理解这个类后才可进行相应的开发设计工作。与视频服务器建立连接 此接口非阻塞模式,调用后立即返回,连接是否成功通过回调通知。连接直播云时,请使用connectCloud。
public static boolean initNet(String ps_host, int ps_port, int timeout, String service_code, int buff_size)
ps_host
PS服务器地址。ps_port
PS服务器端口。timeout
连接超时设定,注意这和上面能过setNetTimeout设定的超时不一样,这里的超时是建立连接的超时,而setNetTimeout设定的值在连接期间程序判定网络异常时的超时。service_code
服务码,每个拍摄的视频均有一个服务码与之关联,以标示此视频所属的应用业务,在建立连接时提供这个服务码,则在这个连接中拍传的视频默认都属于此服务码。连接成功,则通过回调AHandler.onConnected回调通知应用,连接失败则通过AHandler.onConnectFail回调通知应用。buff_size
参数buff_size
表示网络连接的系统缓存大小,一般情况下可以设置为0,使用默认的系统缓存大小,在网络条件不太好,且视频分辨率较小(480*360以下),又要求直播延迟较短的应用场合下,可以设置的小一点(例如64k),如果拍摄的视频分辨率过大,如720p,可以使用系统默认的大小,也可以得到较小的延迟。查询当前可用的摄像头,每次调用时都会进行查询,因此应用在确定没有外接摄像头时,只需要在应用开始前调用一次,然后缓存此列表即可。
public static List<CameraID> inQuireCameras()
网络连接是否正常。
public static boolean isConnected()
查询是否为强光模式。
public static boolean isGlareScene()
查询是否为静音状态。
public static boolean isMute()
判断当前预览画面是否已经开启。
public static boolean isPreviewing()
查询摄像头是否支持zoom操作。
public static boolean isZoomSupported()
暂停录制。
public static boolean pauseRecord()
当在直播过程中需要退出直播页面时的暂停直播,可以在SurfaceView的
surfaceDestroyed(SurfaceHolder holder)
回调里面调用该函数。
当前录制状态为暂停状态时恢复录制操作。
public static boolean resumeRecord()
当是恢复对退出直播页面时被暂停的直播,可以在SurfaceView的
surfaceCreated(SurfaceHolder holder)
回调里面调用该函数,该函数在setPreviewSurface之后调用。
设置音频编码参数 当设置编码类型为
AMR_NB
时,则channel
,sample_rate
,bit_rate
参数都被忽略,AMR_NB
的channels
固定为1,sample_rate
为8000,bit_rate
为12200; 当设置编码类型为AAC
时,几个参数都有效,sample_rate
与bit_rate
对音质都有显著影响。
public static boolean setAudioRecorderParams(AudioEncoderType audio_encode_type, int channels, int sample_rate, int bit_rate)
audio_encode_type
音频编码类型参见 enum AudioEncoderTypechannels
声道数,支持的声道数1,2(当编码类型为AMR_NB
时,固定取值1) sample_rate
采样率,支持的采样率有 8000, 11025, 12kHz, 16kHz, 22.05kHz, 24kHz, 32kHz, 44.1kHz, 48kHz, 64kHz, 88.2kHz, 96kHz(当编码类型为AMR_NB
时,固定取值8000) bit_rate
比特率,支持的比特率可以从8k到320kbps之间取值(当编码类型为AMR_NB
时,固定取值12200)参数对应关系如下所示:
设置使用前置或后置摄像头, 仅支持android 2.3以上系统,如果是在摄像头打开后使用,则需要stopPreview,statPreview使之生效。
public static boolean setCameraId(CameraID id)
id
摄像头Id。设置设备类型。
public static void setDeviceType(DeviceType device_type)
device_type
设备类型参见enum Devicetype设置强光模式,一般通过isGlareScene来获取当前强光模式状态。
public static void setGlareScene(boolean stat)
stat
true为打开强光模式,false为关闭强光模式。设置本地视频文件保存文件夹名,根目录为/sdcard/(视频文件都保存在sdcard上),如果用户希望保存在/sdcard/videofile/localvideo/,参数传"videofile/localvideo"即可,如不设置则默认保存在"/sdcard/xpai/"这个目录下,在startRecord之前调用生效。
public static boolean setLocalVideoFileDirName(String dirName)
dirName
保存视频文件文件夹名,例如传"videofile"则视频文件保存在"/sdcard/videofile/"下面在客户端连接服务器前调用,设定和服务器之间通讯时的网络超时时间,注意这不是建立连接的超时时间,而是在连接成功后判断网络异常的超时时间。
public static void setNetTimeout(int timeout)
timeout
网络超时时间,单位是毫秒。设置网络自适应功能,根据网络条件调整编码输出的数据量。
public static void setNetWorkingAdaptive(boolean enable)
enable
true开启网络自适应,false关闭网络自适应。设定预览画面的大小,注意并不是设置的预览窗口的大小,预览窗口总是全屏显示。当使用此方法改变了预览画面时,预览正处于打开状态,则需要调用stopPreview和startPreview复位一下预览以生效。
public static void setPreviewSize(int width, int height)
width
预览画面宽度height
预览画面高度设置预览画面的
SurfaceHolder
, 此函数必须在startPreview或startRecord之前被调用,否则会导致上述方法调用失败或发生未知错误。
public static void setPreviewSurface(SurfaceHolder holder)
holder
预览画面的SurfaceHolder
设置网络断线后,恢复直播的超时时间,在tryLogin之前调用生效。
public static void setResumeLiveTimeout(int timeout)
timeout
恢复直播的超时时间(单位秒),默认值为30秒返回
所谓的直播恢复是指:在直播过程中,当网络发生异常时(此时会收到sdk的onTryResumeLive回调),SDK会尝试自动重连服务器并恢复当前直播,在重连过程中播放客户端只会感觉到当前的直播视频有卡顿,并不会感觉到直播采集端已经断开和恢复重连,当直播客户端网络恢复并且恢复直播成功后(此时会收到sdk的onResumeOk的回调),当前直播仍可继续。
此API是用来设置当网络断开时,服务器等待客户端重连的超时时间(单位是秒),在这个时间内网络恢复了,则直播能恢复继续,超时此时间,则服务器会释放当前的直播资源,导致直播结束,一旦直播结束,则不可以再恢复, 如果恢复失败则会收到 onResumeFail 回调。
默认情况下,SDK已经启用了直播恢复的功能,默认的超时时间是30秒, 另外客户端设置的超时时间受限于服务器设置的最大值,目前直播云的直播恢复最大超时时间为120秒,如果客户端调用此API设置的超时时间超过120秒则实际值仍然是120秒。
如果要禁止直播恢复的功能,则设置超时时间为0即可。
设置视频帧率的范围,当设置为(20,20),SDK会自动匹配,只有在摄像头开启的模式下设置才能生效。
public static void setVideoFpsRange(int min_fps, int max_fps)
min_fps
最小帧率,默认为20max_fps
最大帧率,默认为20设置录制视频的画面大小,此函数必须在startRecord调用,否则会导致startRecord失败,注意:此处设置的是录制视频的画面大小和照片无关,照片的大小是在takePicture时传入的,在462版本支持自定义分辨率进行编码,但如果设置的分辨率与手机所支持的分辨率比例不一致也会导致直播失败,建议设置4:3 16:9等等主流的分辨率。
public static boolean setVideoResolution(int width, int height)
width
视频宽度height
视频高度调整摄像头焦距。
public static boolean setZoom(int level, boolean isSmoothZoom)
level
最大为60,最小为0,一般为12或者20的倍数isSmoothZoom
是否进行平滑调焦打开预览,在拍摄照片前必须先打开预览,否则会出错。而拍传视频时应用无需先打开预览,core会自动判断当前状态,如果没有打开,会自动打开预览。
public static boolean startPreview()
打开预览失败一般意味着摄像头不支持设定的视频参数,或者是不可恢复的硬件错误,如果重启应用后调用此方法仍然返回false,则可能需要重启手机。
开始拍传或本地录制视频,当目前已经处于拍摄状态时,调用此方法会返回false。
public static boolean startRecord(RecordMode record_mode,int bitrate, boolean force_really_file, boolean is_offline, String output_tag, String task_opaque)
record_mode
录制流媒体类型,详细参见RecordMode定义bitrate
设置视频编码的码流,例如设置为800K,则bitrate
为800 * 1024force_really_file
是否强制在本地产生视频文件。true表示在本地生成视频文件,false表示不在本地生成视频文件,如果不在本地生成视频文件则产生的流媒体不支持断点续传模式,此参数均支持当流媒体类型属于软编或硬编时,在本地SD卡上产生视频文件is_offline
是否进行离线拍摄,true表示离线拍摄,不上传,false表示边拍边传,离线模式仅当流媒体类型是硬编时才有效output_tag
客户端动态指定输出格式标签,如无特殊要求该参数传null即可(注意不能传空字符串"")opaque
任务附加字段,服务器会透传给接口,用于应用之间通过视频服务器传递业务数据,没有设置的话传null启动录制失败可能有几种情况: 没有调用过setPreviewSurface给
preview
设置holder
; setVideoResolution设置的画面大小系统不支持; 目前已经处于录制状态,应用可以通过isRecording来查询当前是否处于录制状态; 前面startPreview就已经失败了; 网络连接已经异常,但调用startRecord时提供的is_offline
却是false。
关闭预览。
public static boolean stopPreview()
如果当前正处于录制中,调用此方法会返回false。
停止录制。
public static boolean stopRecord()
如果停止失败可能会造成同一次会话中的下一个开始直播调用失败。
切换摄像头,该API切换摄像头后会自动打开预览,直播过程中也可切换前后摄像头。
public static boolean switchCamera(CameraID id)
id
摄像头id,参见CameraID拍照,照片宽高需通过getSupportedPictureSizes获取设备支持的拍照尺寸。
public static void takePicture(String path, int photo_width, int photo_height)
path
生成照片保存的目录名,例如/sdcard/xpai
photo_width
照片宽度photo_height
照片高度开关静音,通过isMute接口查询是否为静音状态。
public static boolean toggleMute(boolean onff)
onff
true为静音,false为非静音,默认为非静音尝试登录服务器。
public static void tryLogin(String user_name, String pass, String service_code)
user_name
用户名pass
密码service_code
服务码更新摄像头拍摄角度,该接口配合forcePortrait接口设置竖屏拍摄时使用。
public static void updateOrientation(int degrees)
degrees
摄像头旋转角度,设置竖屏拍摄时传90即可上传照(图)片文件至服务器。
public static boolean uploadFile(String file_name)
file_name
文件保存在本地的全路径注意,这里返回true并不代表文件上传成功, 此函数被调用后将马上返回,上传成功后通过回调通知应用,相应的回调接口参考AHandler.onUploadFileStart和AHandler.onUploadFileEnd。直播云暂不支持该功能,该功能适用于独立视频服务器。
上传视频文件,服务器支持边传边播,即无需等待视频上传结束,在上传过程中即可以直播的形式来播放。此函数用于上传离线拍摄的视频或者是拍传过程中发生网络断线的视频文件,在461版本新增task_opaque参数。
public static boolean uploadVideoFile(String file_name, boolean is_resume, String task_opaque)
file_name
文件保存在本地的全路径is_resume
是否是续传文件,core并不知道此文件是否是此前上传一半失败的文件,如果此参数为false,系统总是将此文件当成一个新的文件来对待,如果此值为true,则系统会尝试断点续传task_opaque
透传字段(透传给业务服务器),不需要时传null即可。例如,在上传离线视频文件时可通过该字段添加相关视频信息透传给业务服务器