HEXMEET APP SDK 开发者手册 (Android版)

HEXMEET APP SDK 开发者手册 (Android版)

Version 2.1, 2018年12⽉

概述

HEXMEET APP SDK 是⼀款视频会议软终端开发套件,开发者可以利⽤本SDK开发出具有清晰流畅 的⾳视频体验和⾼清内容协作的⾳视频会议终端APP。HEXMEET APP SDK 具备强⼤的⽹络适应 性,和独特的⾳视频抗⽹络丢包算法,配合HEXMEET 平台使⽤,可以保证在30%⽹络丢包环境下 视频依然清晰流畅,即使⽹络丢包⾼达50%,依然可以保证⾳频通畅。 HEXMEET APP SDK 提供了丰富,⽽且简单易⽤的API 接⼝。开发者不需要掌握丰富的⾳视频和信 令相关知识,也可以使⽤本SDK 开发出专业的视频会议软终端APP。 本⽂档详细介绍了SDK 的各项功能,以及它们的使⽤⽅法。

快速开始

使⽤ HEXMEET APP SDK Android 版

推荐使⽤AndroidStudio 3.1 或以上版本进⾏开发

HEXMEET APP SDK Android 版软件包包含如下⽂件:

文件 描述
HEXMEET-SDKANDROID/jar/ HexmeetSdkLib.jar 以 jar 包形式提供的HEXMEET SDK,包含SDK所使⽤的所有的类和接⼝⽂件,但是不包含原⽣库⽂件(.so⽂件),需要与下⾯jniLibs⽬录下的原⽣库⼀起使⽤。
HEXMEET-SDKANDROD/jar/ jniLibs/ 原⽣库(.so)所在⽂件夹,所有的原⽣库都包含在jniLibs⽂件⽬录下, 需要与HexmeetSdkLib.jar库⼀起使⽤。
HEXMEET-SDKANDROID/aar/ HexmeetSdkLib.aar 以aar包形式提供的HEXMEET SDK,这种类型的库包括所有的类⽂件,接⼝⽂件,资源⽂件,原⽣库⽂件等。
sample/ hexmeet/ HEXMEET SDK 的示例应⽤

使⽤HEXMEET APP SDK时,根据不同形式库使⽤⽅式需要在⼯程中做不同的设置:

1. jar 包形式:

文件 描述
添加SDK库⽂件HexmeetSdkLib.jar 示例代码⽬录sample/hexmeet/hexmeetsample/libs
添加SDK原⽣库⽂件夹jniLibs 将整个⽂件夹拷⻉到示例代码⽬录sample/hexmeet/hexmeetsample/src/main/
修改build.gradle dependencies段添加compile files('libs/HexmeetSdkLib.jar')
添加hexmeet_default.conf,添加hexmeet_factory.conf,添加rootca.pem,添加background.jpg,添加background_calling.jpg,添加hexmeetsdk.lic 将这6个⽂件放置在⼯程raw⽬录下,其中两个背景⽂件⽤户可以⾃定义,license⽂件需要⽤户向中创申请,其他⽂件保持不变(⽂件名和内容),除了license⽂件之外其他资源⽂件需要在创建 SDK 实例之前通过HexmeetSdkBuilderprepareEssentialFileRes 函数设置到 SDK 模块。

2. aar 形式:

文件 描述
添加SDK库⽂件hexmeetsdklibrelease.aar 示例代码⽬录sample/hexmeet/hexmeetsample/libs
修改build.gradle dependencies段添加compile files('libs/HexmeetSdkLib.jar')
添加hexmeet_default.conf,添加hexmeet_factory.conf,添加rootca.pem,添加background.jpg,添加background_calling.jpg,添加hexmeetsdk.lic 将这6个⽂件放置在⼯程raw⽬录下,其中两个背景⽂件⽤户可以⾃定义,license⽂件需要⽤户向中创申请,其他⽂件保持不变(⽂件名和内容),除了license⽂件之外其他资源⽂件需要在创建 SDK 实例之前通过HexmeetSdkBuilderprepareEssentialFileRes 函数设置到 SDK 模块。

⽆论使⽤上⾯哪种形式的 SDK,请参照 sample ⼯程中的 manifest ⽂件在⼯程添加必要的权限设置和监听必要的⼴播:

<receiver android:name="com.hexmeet.sdk.PhoneStateChangedReceiver" >
     <intent-filter>
    	 <action android:name="android.intent.action.PHONE_STATE" />
     </intent-filter>
</receiver> 

⽆论使⽤上⾯哪种⽅式,请参照 sample ⼯程中 build.gradle 配置⽂件。

示例代码

API 参考

接⼝定义

  1. IHexmeetSdkApi HexMeet SDK 最重要的接⼝⽂件,包含了⼏乎所有的 API 函数声明,该接⼝实例通过调 ⽤ HexmeetSdkBuilder 函数 buildHexmeetApiInstance ⽣成,该实例为全局唯⼀。
public interface IHexmeetSdkApi {
     void activeHexmeetSdk(String serverAddr, String uuid,
     IActiveSdkCallback callback);
     boolean isHexmeetSdkEnabled();
     void addHexmeetSdkListener(final HexmeetSdkListener listener);
     void removeHexmeetSdkListener(HexmeetSdkListener listener);
     void registerSip(String userName,
     String userPasswd,
     String sipServer,
     String displayName,
     HexmeetTransportType transType);
     void unregisterSip();
     void setUserAgent(String userAgent, String version);
     HexmeetRegistrationState getSipRegistrationState();
     void placeCall(String callNum, boolean isVideoCall);
     void hangupCall();
     boolean answerCall(boolean isVideoEnabled);
     boolean isIncomingCallReceived();
     boolean hasOngoingCall();
     boolean isCurrentCallVideoEnabled();
     boolean isReceivingContent();
     boolean hasOngoingTelephoneCall();
     HexmeetFarendUserInfo getFarendInfo();
     float getCurrentCallQuality();
     HexmeetMediaStaticInfo getCallMediaStatics();
     void setCallRate(int callRate);
     void enableLogCollection(boolean enable);
     String getSdkLogPath();
     void updateNetworkReachability();
     void switchCamera(HexmeetCameraOperationType type);
     void setDeviceRotation(int rotation);
     boolean isLocalVideoMuted();
     void muteLocalVideo(boolean mute);
     void saveUserIcon(Bitmap userIcon);
     int EVENT_START = 1;
     int EVENT_STOP = 0;
     HexmeetAudioRouteType setAudioRoute(HexmeetAudioRouteEventType
     event, int value);
     HexmeetAudioRouteType getCurrentAudioRoute();
     boolean isSpeakerOn();
     SurfaceView createVideoView(Context context);
     void setRemoteVideoView(SurfaceView view);
     void setLocalVideoView(SurfaceView view);
     void setContentVideoView(SurfaceView view);
     void setDummyPrevieView(SurfaceView view);
     boolean zoomVideo(float factor,
     float cx,
     float cy,
     HexmeetStreamType streamType);
     void reloadVideoDevices();
}
  1. HexmeetSdkListener

SDK 监听器类,客户程序需要继承该类来实现⾃⼰的监听逻辑,并通 addHexmeetSdkListener将其设置SDK, 当 SDK 模块有状态变化时,通过该监听器上报给客户程序,主要包括 SDK 全局状态,注册状态和呼叫状态等。

public class HexmeetSdkListener {
       public void globalState();
       public void registrationState(HexmeetRegistrationState state);
       public void callState(HexmeetCallState state, HexmeetReason reason);
  } 
  1. IActiveSdkCallback HEXMEET APP SDK激活结果回调接⼝,在使⽤activeHexmeetSdk函数激活SDK时,需要提供·IActiveSdkCallback·实例对象作为参数,当SDK激活结果返回时调⽤该实例的回调函数·onActiveSdkResponse·。
public interface IActiveSdkCallback {
  	 	void onActiveSdkResponse(boolean isSuccess, String reason);
  } 
  1. HexmeetSdkBuilder

该类通过函数 buildHexmeetApiInstance 创建 IHexmeetSdkApi 全局单例,客户程序需要在使⽤该单例来引⽤除本类(HexmeetSdkBuilder)之外的所有的API, 该实例在创建过程中可能会出现异常,客户程序需要捕获该异常

public class HexmeetSdkBuilder {
       public IHexmeetSdkApi buildHexmeetApiInstance(Context context) throws
       HexmeetException;
       public void destroyHexmeetApiInstance()
       public void prepareEssentialFileRes(int defaultConfigRes,
       int factoryConigRes,
       int rootcaRes,
       int videoMuteBgRes,
       int videoMuteBgIncallingRes);
  }
  1. MediaStaticInfo 该类型表示⼀个通话中所有媒体流(发送⾳频流,接收⾳频流,发送视频流,接收视频流,接收双流视频流)的数据统计,具体包括编解码器, 速率, 总数据包数,累计丢包数, 丢弃包数, 超时包数, 坏包数,丢包率,分辨率等
public class HexmeetMediaStaticInfo {
       private MediaStaticEntity localAudio;
       private MediaStaticEntity remoteAudio;
       private MediaStaticEntity localVideo;
       private MediaStaticEntity remoteVideo;
       private MediaStaticEntity remoteContent;
       static public class MediaStaticEntity {
           private String codecName;
           private String rate; //kbps
           private String totalPackageNumber;
           private String LostPackageNumber;
           private String discardedPackageNumber;
           private String packageTimeoutNumber;
           private String badPackageNumber;
           private String packageLossRate;
           private String resolution;
       }
  } 

枚举和常量定义

出于提⾼效率的考虑,在 Android 中所有的枚举(Enum)类型都会被类(Class)代替,在HexmeetSdk 中,所有的枚举也都是以 Class 的形式实现。

  1. HexmeetTransportType 该类型表示注册 SIP 服务时可以选取的传输协议,包括 TCP, UDP, TLS 等。
public class HexmeetTransportType {
       static public HexmeetTransportType TransportUdpstatic public HexmeetTransportType TransportTcpstatic public HexmeetTransportType TransportTlspublic static HexmeetTransportType fromInt(int value)public String toString()public int toInt()}
  1. 媒体类型 该类型表示所有可能的媒体数据类型,⽬前主要使⽤的是 Audio,Video,Conent 三种类型
public class HexmeetStreamType {
       static public final HexmeetStreamType Audiostatic public final HexmeetStreamType Videostatic public final HexmeetStreamType Text//未使⽤
       static public final HexmeetStreamType Bfcp//未使⽤
       static public final HexmeetStreamType Contentstatic public final HexmeetStreamType Unknown//未使⽤
       public static HexmeetStreamType fromInt(int value) ;
       public String toString();
       public int toInt();
  }
  1. 注册状态类型 该类型表示所有注册状态。
public class HexmeetRegistrationState {
     public static HexmeetRegistrationState RegistrationNonepublic static HexmeetRegistrationState RegistrationProgresspublic static HexmeetRegistrationState RegistrationOkpublic static HexmeetRegistrationState RegistrationClearedpublic static HexmeetRegistrationState RegistrationFailedpublic static HexmeetRegistrationState fromInt(int value)public String toString()public int toInt()}
RegistrationNone:由于条件不具备没有发起任何注册, ⽐如⽹络问题,注册被禁⽌等。
RegistrationProgress:正在进⾏注册
RegistrationOk:注册成功
RegistrationCleared:注册成功注销
RegistrationFailed:注册失败

public class HexmeetCallState {
     public final static HexmeetCallState Idlepublic final static HexmeetCallState IncomingReceivedpublic final static HexmeetCallState OutgoingInitpublic final static HexmeetCallState OutgoingProgresspublic final static HexmeetCallState OutgoingRingingpublic final static HexmeetCallState Connectedpublic final static HexmeetCallState StreamsRunningpublic final static HexmeetCallState Errorpublic final static HexmeetCallState CallEndpublic static HexmeetCallState fromInt(int value)public String toString()public int toInt()}

/*
Idle:表示空闲状态,没有任何呼叫。
IncomingReceived:有新的呼叫呼⼊,客户程序需要显示对应来电界⾯。
OutgoingInit:中间状态,表示正在发起呼叫, 客户程序显示正在呼出界⾯。
OutgoingProgress:中间状态,表示发起的呼叫正在处理中,客户程序显示正在呼出界⾯。
OutgoingRinging:表示对⽅已振铃, 客户程序可以显示正在呼出界⾯。
Connected:表示信令层呼叫已连接成功,客户程序可以显示通话界⾯。
StreamsRunning:表示呼叫媒体层已经连接成功,开发发送/接收媒体流,客户程序可以显示通话界⾯。
Error:呼叫出错。
CallEnd:呼叫结束。
*/
  1. 通话失败原因 该类表示所有呼叫失败的原因,通过 SDK 监听器 callState 回调返回给客户程序,客户程序只需要关⼼必要的失败原因,⽐如 Declined,Busy, NotAnswered 等。
public class HexmeetReason {
       static public HexmeetReason Nonestatic public HexmeetReason NoResponsestatic public HexmeetReason BadCredentialsstatic public HexmeetReason Declinedstatic public HexmeetReason NotFoundstatic public HexmeetReason NotAnsweredstatic public HexmeetReason Busystatic public HexmeetReason Media//未使⽤
       static public HexmeetReason IOErrorstatic public HexmeetReason DoNotDisturbstatic public HexmeetReason Unauthorizedstatic public HexmeetReason NotAcceptablestatic public HexmeetReason NoMatch//未使⽤
       static public HexmeetReason MovedPermanently//未使⽤
       static public HexmeetReason Gone//未使⽤
       static public HexmeetReason TemporarilyUnavailable//未使⽤
       static public HexmeetReason AddressIncomplete//未使⽤
       static public HexmeetReason NotImplemented//未使⽤
       static public HexmeetReason BadGatewaystatic public HexmeetReason ServerTimeoutstatic public HexmeetReason Unknownpublic static HexmeetReason fromInt(int value)public String toString()public int toInt()}
  1. 呼叫状态 该类型表示所有的呼叫状态。

  2. 摄像头操作类型 包括三种模式,可以设置前置摄像,后置摄像头或者交替。

public class HexmeetCameraOperationType {
     static public HexmeetCameraOperationType FrontCamerastatic public HexmeetCameraOperationType BackCamerastatic public HexmeetCameraOperationType Alternatepublic static HexmeetCameraOperationType fromInt(int value)public String toString()public int toInt()}
FrontCamera: 前置摄像头
BackCamera: 后置摄像头
Alternate: 前后摄像头切换
  1. 语⾳路径设置场景 语⾳路径设置场景,SDK 提供了⼀些场景的语⾳路径设置,⽤户可以根据场景去设置语⾳路径,通过 IHexmeetApi setAudioRoute 函数来设置路径,具体使⽤⽅法请参照 sample 程序。
public class HexmeetAudioRouteEventType {
     static public final HexmeetAudioRouteEventType HEADSET_PLUG_EVENT;
     static public final HexmeetAudioRouteEventType BLUETOOTH_CONNECTION_EVENT;
     static public final HexmeetAudioRouteEventType CONVERSATION_EVENT;
     static public final HexmeetAudioRouteEventType INCOMING_RING_EVENT;
     static public final HexmeetAudioRouteEventType UI_SPEAKERLABEL_EVENT;
     public static HexmeetAudioRouteEventType fromInt(int value)public String toString()public int toInt()}
HEADSET_PLUG_EVENT:当插⼊/拔出⽿机时,需要设置的⾳频路径事件
BLUETOOTH_CONNECTION_EVENT:当连接/断开蓝⽛⽿机时需要设置的⾳频路径事件
CONVERSATION_EVENT:呼叫接通以后转⼊通话中⻚⾯时需要设置的⾳频路径事件
INCOMING_RING_EVENT:当有来电时需要设置的⾳频路径事件
UI_SPEAKERLABEL_EVENT:当⽤户在通话中⻚⾯打开/关闭扬声器时需要设置的⾳频路径事件
  1. 语⾳路径模式
public class HexmeetAudioRouteType {
        static public final HexmeetAudioRouteType ROUTE_TO_SPEAKER;
        static public final HexmeetAudioRouteType ROUTE_TO_RECEIVER;
        static public final HexmeetAudioRouteType ROUTE_TO_WIREDHEADSET;
        static public final HexmeetAudioRouteType ROUTE_TO_BLUETOOTH;
        public static HexmeetAudioRouteType fromInt(int value)public static HexmeetAudioRouteType fromString(String string)public String toString()public int toInt()}

API 列表

在调⽤API调⽤之前,需要通过 HexmeetBuilder buildHexmeetApiInstance 类⽅法所取得 IHexmeetSdkApi 类型的实例,并将该实例存为 APP 全局可访问,通过该实例访问 SDK API。

方法 描述
buildHexmeetApiInstance 创建 IHexmeetApi 实例
destroyHexmeetApiInstance 销毁 IHexmeetApi 实例
activeHexmeetSdk 激活HEXMEET APP SDK
isHexmeetSdkEnabled 获取HEXMEET APP SDK激活状态
prepareEssentialFileRes 准备必要的资源⽂件
addHexmeetSdkListener 设置 SDK 监听器
removeHexmeetSdkListener 删除 SDK 监听器
registerSip 注册 SIP 服务
unregisterSip 取消 SIP 注册
setUserAgent 设置 SIP 信令⽤户显示的 User Agent 域的值
getSipRegistrationState 获取 SIP 注册状态
placeCall 发起呼叫
hangupCall 结束呼叫
answerCall 接受呼叫
isIncomingCallReceived 判断是否有正在呼⼊的呼叫
hasOngoingCall 判断是否有进⾏中的呼叫
isCurrentCallVideoEnabled 判断呼叫是否⽀持视频
isReceivingContent 判断是否有双流
hasOngoingTelephoneCall 判断是否有进⾏中的 2G/3G 呼叫
getFarendInfo 获取呼叫对⽅信息
getCurrentCallQuality 获取当前呼叫质量等级
getCallMediaStatics 获取当前呼叫媒体统计信息
setCallTimeout 设置呼叫超时时间
setCallRate 设置呼叫速率
enableLogCollection 启⽤⽇志
getSdkLogPath 获取⽇志⽂件路径
updateNetworkReachability ⽹络变化时,回调 SDK 函数
switchCamera 设置摄像头
setDeviceRotation 设置设备⽅向
isLocalVideoMuted 判断本地视频是否关闭
muteLocalVideo 关闭本地视频
saveUserIcon 设置⽤户图像
isMicMuted 判断⻨克⻛是否关闭
muteMic 关闭⻨克⻛
setAudioRoute 处理语⾳路径
getCurrentAudioRoute 获取当前语⾳路径
isSpeakerOn 判断扬声器是否已打开
createVideoView 创建视频窗⼝
setRemoteVideoView 设置远端视频窗⼝
setLocalVideoView 设置本地视频窗⼝
setContentVideoView 设置双流视频窗⼝
setDummyPrevieView 设置本地空窗⼝
zoomVideo 缩放视频窗⼝
reloadVideoDevices 从新加载视频采集设备

API详解

buildHexmeetApiInstance

HexMeet SDK 初始化⽅法,该⽅法加载⾳频、视频、信令等核⼼模块,并加载硬件设备驱动等,为 ⾳视频呼叫做初始化⼯作。该⽅法需要在 APP 启动阶段调⽤,确保之后的⾳视频成功使⽤,该⽅法 返回 IHexmeetSdkApi 全局单例。

声明

public IHexmeetSdkApi buildHexmeetApiInstance(Context context) throws HexmeetException

参数

传入 context 程序上下⽂, ⽤来引⽤系统资源
传出

返回值 IHexmeetSdkApi, 全局 IHexmeetSdkApi 实例

示例

HexmeetSdkBuilder mSdkBuilder = new HexmeetSdkBuilder();

mSdkBuilder.prepareEssentialFileRes(R.raw.hexmeet_default,
                                R.raw.hexmeet_factory,
                                R.raw.rootca,
                                R.raw.background,
                                R.raw.background_calling);

try {
    mHexmeetSdkInstance = mSdkBuilder.buildHexmeetApiInstance(this);
}catch (HexmeetException e) {
    log.error("create mHexmeetSdkInstance failed");
    log.error(e.toString());
    return;
}

destroyHexmeetApiInstance

HexMeet SDK 销毁⽅法,该⽅法会释放⾳视频软硬件资源等,需要在 APP 退出时调⽤,防⽌内存 泄漏等问题。

声明

public void destroyHexmeetApiInstance()

参数

传入 ()
传出 ()

返回值

activeHexmeetSdk

只有在激活sdk以后才能正常使⽤所提供的功能,⽤户需要将从 SDK 提供商申请 license ⽂件,并 将该⽂件引⼊到⼯程资源 raw ⽬录下,之后调⽤该函数激活 HEXMEET APP SDK。

声明

public void activeHexmeetSdk(String serverAddr, String sdkLicense, IActiveSdkCallback callback)

参数

传⼊ serverAddr license验证服务器地址
sdkLicense 从license⽂件中读取的内容
callback 验证结果回调接⼝
传出

返回值

需要实现如下接口

public interface IActiveSdkCallback {
    void onActiveSdkResponse(boolean var1, String var2);
}

示例

public class SDKActivationService extends ContextWrapper implements IActiveSdkCallback
{

   private static SDKActivationService instance = new 	
   										SDKActivationService(App.getContext());

   public static SDKActivationService getInstance()
   {
      return instance;
   }
    ...
    public void activateHexMeetSDK()
   {

      String sdklic = readLicenseUuid();
      String ucmserver = RuntimeData.getUcmServer();
      App.mHexmeetSdkInstance.activeHexmeetSdk(ucmserver, sdklic, this);
   }
   
   public void onActiveSdkResponse(boolean isSuccess, String reason) {
      if (isSuccess) {
         showToast(App.getContext(), " SDK 激活成功");
         RuntimeData.registerSip();
      } else {
         showToast(App.getContext(), " SDK 激活失败:" + reason);
      }
   }
   
   private String readLicenseUuid() {

      InputStream inputStream = getResources().openRawResource(R.raw.hexmeetsdk);
      ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
      try {
         int i = inputStream.read();
         while (i != -1) {
            byteArrayOutputStream.write(i);
            i = inputStream.read();
         }
         inputStream.close();

      } catch (IOException e) {
         e.printStackTrace();
      }

      String licenseContent = byteArrayOutputStream.toString();
      String lines[] = licenseContent.split("\\r?\\n");
      for(int i=0; i<lines.length; i++) {
         String line = lines[i];
         if (line.contains("sdklic")) {
            return line.split(":")[1];
         }
      }
      return null;
   }
}

在使用 SDK 呼叫功能前,需要完成 SDK 激活,比如在完成SDK创建之后

HexmeetSdkBuilder mSdkBuilder = new HexmeetSdkBuilder();

mSdkBuilder.prepareEssentialFileRes(R.raw.hexmeet_default,
                                R.raw.hexmeet_factory,
                                R.raw.rootca,
                                R.raw.background,
                                R.raw.background_calling);

try {
    mHexmeetSdkInstance = mSdkBuilder.buildHexmeetApiInstance(this);
}catch (HexmeetException e) {
    log.error("create mHexmeetSdkInstance failed");
    log.error(e.toString());
    return;
}

...
    
RuntimeData.setUcmServer("172.40.0.2:8443");
SDKActivationService.getInstance().activateHexMeetSDK();   

isHexmeetSdkEnabled

获取HEXMEET APP SDK激活状态

声明

boolean  isHexmeetSdkEnabled()

参数

传入
传出

返回值

boolean - HEXMEET APP SDK 是否已经激活

prepareEssentialFileRes

该函数⽤来在创建 IHexmeetSdkApi 实例之前设置必要的资源⽂件,必须在 buildHexmeetApiInstance 之前调⽤,并确保所有资源⽂件存在且有效。

声明

public void prepareEssentialFileRes(int defaultConfigRes,
                                    int factoryConigRes,
                                    int rootcaRes,
                                    int videoMuteBgRes,
                                    int videoMuteBgIncallingRes)

参数

传⼊ defaultConfigRes 默认配置⽂件资源 ID(随 SDK 包提供)
factoryConfigRes ⼯⼚配置⽂件资源 ID(随 SDK 包提供)
rootcaRes 认证⽂件资源 ID(随 SDK 包提供)
videoMuteBgRes 关闭本地摄像头后,发送给对⽅的背景图资源 ID(⽤户可⾃定义)
videoMuteBgIncallingRes 在有电信电话的情况下,发送给对⽅的背景图资源 ID(⽤户可⾃定)
传出

返回值

addHexmeetSdkListener

APP 注册监听器到 SDK ,当 SDK 有事件需要通知上层 APP 时,通过该监听器回调到 APP 处理程 序,通常使⽤在上报呼叫状态和注册状态等。

声明

void addHexmeetSdkListener(final HexmeetSdkListener listener)

参数

传入 listener SDK 监听器
传出

返回值

removeHexmeetSdkListener

删除监听器,当 APP 不再需要监听 SDK 事件时,需要删除对应的监听器。

声明

void removeHexmeetManagerListener(final HexmeetSdkListener listener)

参数

传入 listener SDK 监听器
传出

返回值

registerSip

注册到SIP 服务器,当sdk没有激活时,调⽤该函数会失败,并且会抛出异常。

声明

void registerSip(String userName,
                             String userPasswd,
                             String sipServer,
                             String displayName,
                             HexmeetTransportType transType) throws HexmeetException;

参数

传入 userName SIP ⽤户名称
userPasswd SIP ⽤户密码
sipServer SIP 服务器地址
displayName SIP 显示名
transType SIP 注册协议:TCP、UDP、TLS
传出

返回值

unregisterSip

注销当前SIP 注册

声明

-(void)unregisterSip;

参数

传入
传出

返回值

setUserAgent

设置 SIP 信令⽤户显示的 User Agent 域的值, 例如 HexMeet EasyVideo Android/V2.0.1.3745

声明

void setUserAgent(String userAgent, String version)

参数

传入 userAgent ⽤户代理名称
version 应⽤版本号
传出

返回值

getSipRegistrationState

获取终端 SIP 注册状态

声明

HexmeetRegistrationState getSipRegistrationState()

参数

传入
传出

返回值

HexmeetRegistrationState, 注册状态, 请参照该类型定义。

placeCall

主动呼出,输⼊参数 enableVideo 值为 true 时, 以视频通话⽅式呼出,为 false 时,以⾳频⽅式呼 出。当sdk没有激活时,调⽤该函数会失败,并且会抛出异常。

声明

void placeCall(String callNum, boolean isVideoCall) throws HexmeetException

参数

传入 callNum 呼叫对⽅地址
isVideoCall 是否为视频呼叫
传出

返回值

hangupCall

主动挂断通话

声明

void hangupCall()

参数

传入
传出

返回值

answerCall

应答呼⼊的⾳视频通话,输⼊参数 enableVideo 值为 true 时,将以视频通话的⽅式接听,为 false 时,将以⾳频通话的⽅式接听。

声明

boolean answerCall(boolean isVideoEnabled)

参数

传入 isVideoEnabled 是否打以视频⽅式接听
传出

返回值

boolean, 表示是否接听成功。

isIncomingCallReceived

判断是否是收到了新的呼叫。

声明

boolean isIncomingCallReceived()

参数

传入
传出

返回值 booleantrue 有false 没有

hasOngoingCall

判断是否有进⾏中的呼叫

声明

boolean hasOngoingCall()

参数

传入
传出

返回值 booleantrue 有false 没有

isCurrentCallVideoEnabled

判断当前呼叫是否⽀持视频

声明

boolean isCurrentCallVideoEnabled()

参数

传入
传出

返回值 booleantrue 有false 没有

isReceivingContent

当呼叫状态发⽣变化时,判断是否是收到了双流视频, ⼀般在收到呼叫状态为 HexmeetCallState.StreamsRunning 调⽤判断是否为双流。

声明

boolean isReceivingContent()

参数

传入
传出

返回值 booleantrue 有false 没有

hasOngoingTelephoneCall

判断是否存正在进⾏中的电信电话,如果存在,客户程序需要调⽤ muteLocalVideo 关闭本地视频

声明

boolean hasOngoingTelephoneCall()

参数

传入
传出

返回值 booleantrue 有false 没有

getFarendInfo

获取通话中远端信息, 包括 SIP 号码和显示名

声明

HexmeetFarendUserInfo getFarendInfo()

参数

传入
传出

返回值 ​ HexmeetFarendUserInfo displayName 显示名称 ​ callNumber 呼叫号码

getCurrentCallQuality

获取当前通话质量等级。该⽅法通过检查⽹络丢包情况等统计数据,给出当前通话的质量等级评价

声明

float getCurrentCallQuality()

参数

传入
传出

返回值

float 当前通话的质量等级,获取⽹络质量,从弱到强分为5个级别, level<1, 2<level<3,3<level<4, level>4

getCallMediaStatics

获取当前通话媒体统计信息

声明

HexmeetMediaStaticInfo getCallMediaStatics()

参数

传入
传出

返回值

HexmeetMediaStaticInfo 媒体统计信息对象,具体内容请参考统计信息结构体定义。

setCallRate

设置呼叫速率的⽅法,呼叫速率决定通话中⾳视频质量,⾼速率下将获得⾼的视频分辨率、帧率, 如果速率设定较低,则通话中的⾳视频质量将相应降低,最终结果也取决于与远端协商的结果。移 动平台最⼤设置为512。

声明

void setCallRate(int callRate)

参数

传入 (int) callRate 可能的值:128, 256, 384, 512
传出

返回值

enableLogCollection

打开 SDK ⽇志收集功能

声明

void enableLogCollection(boolean enable)

参数

传入 enable 是否打开⽇志收集功能
传出

返回值

getSdkLogPath

获取⽇志⽂件路径,⽅便下载或⽤邮件发送⽇志

声明

String getSdkLogPath()

参数

传入
传出

返回值

updateNetworkReachability

⽹路状态发⽣变化的时候需要回调的 SDK 函数

声明

void updateNetworkReachability()

参数

传入
传出

返回值

switchCamera

切换摄影镜头⽅法,指定摄影镜头:前镜头、后镜头、交替

声明

void switchCamera(HexmeetCameraOperationType type)

参数

传入 (HexmeetCameraOperationType)type 摄影镜头操作类型:前、后、交替。
传出

返回值

setDeviceRotation

设置设备⽅向,取值 0, 90, 180, 270

声明

void setDeviceRotation(int rotation)

参数

传入 (int)rotation 设备⽅向
传出

返回值

isLocalVideoMuted

判断是否存正在进⾏中的 2G/3G 电话

声明

boolean isLocalVideoMuted()

参数

传入 (int)rotation
传出

返回值

booleantrue 有false 没有

muteLocalVideo

摄影镜头控制⽅法,可以打开、关闭摄像头,通话中如果关闭摄像头,将向远端发送背景图

声明

void muteLocalVideo(boolean mute)

参数

传入 (boolean)mute true— 将本地视频关闭。
false — 将本地视频打开。
传出

返回值

saveUserIcon

设置⽤户的头像,当在通话中并且本地视频关闭时, SDK 会将头像和背景图⽚合成,作为视频流发 送给远端

声明

void saveUserIcon(Bitmap userIcon)

参数

传入 Bitmap userIcon ⽤户图像图标
传出

返回值

isMicMuted

获取⻨克⻛状态,当返回 true 表示关闭,反之表示打开

声明

boolean isMicMuted()

参数

传入
传出

返回值

booleantrue 有false 没有

muteMic

⻨克⻛控制⽅法,可以打开、关闭⻨克⻛

声明

void muteMic(boolean mute)

参数

传入 (boolean)mute true— 将⻨克⻛关闭。
false — 将⻨克⻛打开。
传出

返回值

setAudioRoute

处理⾳频路径设置事件,根据不同的场景设置不同的⾳频路径

声明

HexmeetAudioRouteType setAudioRoute(HexmeetAudioRouteEventType event, int value);

参数

传入 HexmeetAudioRouteEventTypeevent 处理的语⾳路径事件
int value 打开 EVENT_START
关闭 EVENT_STOP
传出

返回值

HexmeetAudioRouteType, 返回处理以后的语⾳路径

getCurrentAudioRoute

获取当前系统所使⽤的⾳频路径

声明

HexmeetAudioRouteType getCurrentAudioRoute()

参数

传入
传出

返回值

HexmeetAudioRouteType, 返回当前语⾳路径

isSpeakerOn

查询扬声器是否打开

声明

boolean isSpeakerOn()

参数

传入
传出

返回值

booleantrue 扬声器打开false 扬声器关闭

createVideoView

创建视频窗⼝,该函数可以⽤来创建本地视频窗⼝,远端视频窗⼝,远端双流窗⼝。

声明

SurfaceView createVideoView(Context context)

参数

传入
传出

返回值

SurfaceView 返回创建的视频窗⼝。

setLocalVideoView

设置本地视频显示窗⼝,需要在 HexMeet APP SDK 初始化完成后设置。应⽤层通过 createVideoView 创建视图对象,并通过该函数设置给 SDK,该窗⼝⼤⼩和位置由上层 UI 控制。

声明

void setLocalVideoView(SurfaceView view)

参数

传入 SurfaceView view 本地视频显示视图
传出

返回值

setRemoteVideoView

设置远端视频显示视图,同本地视频显示视图类似,由客户程序通过 createVideoView ⽣成视图对 象,在通过该函数设置给 SDK,该窗⼝⼤⼩和位置由上层程序控制。

声明

void setRemoteVideoView(SurfaceView view)

参数

传入 SurfaceView view 远端视频显示视图
传出

返回值

setContentVideoView

设置双流视频显示视图,同本地视频显示视图类似,由客户程序通过 createVideoView ⽣成视图对 象,并通过该函数设置给 SDK,该窗⼝⼤⼩和位置由上层 UI 控制。

声明

void setContentVideoView(SurfaceView view)

参数

传入 SurfaceView view 双流视频显示视图
传出

返回值

setDummyPrevieView

在安卓系统中,为了在开启摄像头后能持续输出采集数据,需要通过该接⼝设置给 SDK 层⼀个空 surfaceview,但是系统中并不使⽤这个 View 来显示任何视频,⼀般将该 Surface View 设置为⼀个 像素即可。

声明

void setDummyPrevieView(SurfaceView view)

参数

传入 SurfaceView view 空视图
传出

返回值

zoomVideo

当在视频通话中时,如⽤户在视频窗⼝上使⽤⼿势功能,可以使⽤该⽅法对所显示的视频做相应的 放⼤,缩⼩,移动。

声明

boolean zoomVideo(float factor, float cx, float cy, HexmeetStreamType streamType);

参数

传入 float factor 缩放⽐例
float cx 参考原点横轴坐标
float cy 参考原点纵轴坐标
HexmeetStreamType streamType 视频流类型:视频、双流

返回值

reloadVideoDevices

重新加载视频采集设备。应用启动后,如摄像头权限发生变化,需调用此方法,使得 SDK 可以更新视频采集设备变化。如果不调用此方法,可能导致 SDK 无法使用摄像头,从而采集不到本地视频。

声明

void reloadVideoDevices()

参数

传入
传出

返回值

上次更新: 12/14/2018, 11:28:41 AM