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 配置⽂件。
示例代码
- 示例代码下载地址 GitHub (opens new window)
API 参考
接⼝定义
- 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();
}
- HexmeetSdkListener
SDK 监听器类,客户程序需要继承该类来实现⾃⼰的监听逻辑,并通 addHexmeetSdkListener将其设置SDK, 当 SDK 模块有状态变化时,通过该监听器上报给客户程序,主要包括 SDK 全局状态,注册状态和呼叫状态等。
public class HexmeetSdkListener {
public void globalState();
public void registrationState(HexmeetRegistrationState state);
public void callState(HexmeetCallState state, HexmeetReason reason);
}
- IActiveSdkCallback HEXMEET APP SDK激活结果回调接⼝,在使⽤activeHexmeetSdk函数激活SDK时,需要提供·IActiveSdkCallback·实例对象作为参数,当SDK激活结果返回时调⽤该实例的回调函数·onActiveSdkResponse·。
public interface IActiveSdkCallback {
void onActiveSdkResponse(boolean isSuccess, String reason);
}
- 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);
}
- 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 的形式实现。
- HexmeetTransportType 该类型表示注册 SIP 服务时可以选取的传输协议,包括 TCP, UDP, TLS 等。
public class HexmeetTransportType {
static public HexmeetTransportType TransportUdp;
static public HexmeetTransportType TransportTcp;
static public HexmeetTransportType TransportTls;
public static HexmeetTransportType fromInt(int value);
public String toString();
public int toInt();
}
- 媒体类型 该类型表示所有可能的媒体数据类型,⽬前主要使⽤的是 Audio,Video,Conent 三种类型
public class HexmeetStreamType {
static public final HexmeetStreamType Audio;
static public final HexmeetStreamType Video;
static public final HexmeetStreamType Text; //未使⽤
static public final HexmeetStreamType Bfcp; //未使⽤
static public final HexmeetStreamType Content;
static public final HexmeetStreamType Unknown;//未使⽤
public static HexmeetStreamType fromInt(int value) ;
public String toString();
public int toInt();
}
- 注册状态类型 该类型表示所有注册状态。
public class HexmeetRegistrationState {
public static HexmeetRegistrationState RegistrationNone;
public static HexmeetRegistrationState RegistrationProgress;
public static HexmeetRegistrationState RegistrationOk;
public static HexmeetRegistrationState RegistrationCleared;
public static HexmeetRegistrationState RegistrationFailed;
public static HexmeetRegistrationState fromInt(int value);
public String toString();
public int toInt();
}
RegistrationNone:由于条件不具备没有发起任何注册, ⽐如⽹络问题,注册被禁⽌等。
RegistrationProgress:正在进⾏注册
RegistrationOk:注册成功
RegistrationCleared:注册成功注销
RegistrationFailed:注册失败
public class HexmeetCallState {
public final static HexmeetCallState Idle;
public final static HexmeetCallState IncomingReceived;
public final static HexmeetCallState OutgoingInit;
public final static HexmeetCallState OutgoingProgress;
public final static HexmeetCallState OutgoingRinging;
public final static HexmeetCallState Connected;
public final static HexmeetCallState StreamsRunning;
public final static HexmeetCallState Error;
public final static HexmeetCallState CallEnd;
public static HexmeetCallState fromInt(int value);
public String toString() ;
public int toInt() ;
}
/*
Idle:表示空闲状态,没有任何呼叫。
IncomingReceived:有新的呼叫呼⼊,客户程序需要显示对应来电界⾯。
OutgoingInit:中间状态,表示正在发起呼叫, 客户程序显示正在呼出界⾯。
OutgoingProgress:中间状态,表示发起的呼叫正在处理中,客户程序显示正在呼出界⾯。
OutgoingRinging:表示对⽅已振铃, 客户程序可以显示正在呼出界⾯。
Connected:表示信令层呼叫已连接成功,客户程序可以显示通话界⾯。
StreamsRunning:表示呼叫媒体层已经连接成功,开发发送/接收媒体流,客户程序可以显示通话界⾯。
Error:呼叫出错。
CallEnd:呼叫结束。
*/
- 通话失败原因 该类表示所有呼叫失败的原因,通过 SDK 监听器 callState 回调返回给客户程序,客户程序只需要关⼼必要的失败原因,⽐如 Declined,Busy, NotAnswered 等。
public class HexmeetReason {
static public HexmeetReason None;
static public HexmeetReason NoResponse;
static public HexmeetReason BadCredentials;
static public HexmeetReason Declined;
static public HexmeetReason NotFound;
static public HexmeetReason NotAnswered;
static public HexmeetReason Busy;
static public HexmeetReason Media; //未使⽤
static public HexmeetReason IOError;
static public HexmeetReason DoNotDisturb;
static public HexmeetReason Unauthorized;
static public HexmeetReason NotAcceptable;
static 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 BadGateway;
static public HexmeetReason ServerTimeout;
static public HexmeetReason Unknown;
public static HexmeetReason fromInt(int value);
public String toString();
public int toInt();
}
呼叫状态 该类型表示所有的呼叫状态。
摄像头操作类型 包括三种模式,可以设置前置摄像,后置摄像头或者交替。
public class HexmeetCameraOperationType {
static public HexmeetCameraOperationType FrontCamera;
static public HexmeetCameraOperationType BackCamera;
static public HexmeetCameraOperationType Alternate;
public static HexmeetCameraOperationType fromInt(int value);
public String toString();
public int toInt();
}
FrontCamera: 前置摄像头
BackCamera: 后置摄像头
Alternate: 前后摄像头切换
- 语⾳路径设置场景 语⾳路径设置场景,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:当⽤户在通话中⻚⾯打开/关闭扬声器时需要设置的⾳频路径事件
- 语⾳路径模式
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()
参数
传入 | 无 | |
---|---|---|
传出 | 无 |
返回值 boolean true 有 false 没有
hasOngoingCall
判断是否有进⾏中的呼叫
声明
boolean hasOngoingCall()
参数
传入 | 无 | |
---|---|---|
传出 | 无 |
返回值 boolean true 有 false 没有
isCurrentCallVideoEnabled
判断当前呼叫是否⽀持视频
声明
boolean isCurrentCallVideoEnabled()
参数
传入 | 无 | |
---|---|---|
传出 | 无 |
返回值 boolean true 有 false 没有
isReceivingContent
当呼叫状态发⽣变化时,判断是否是收到了双流视频, ⼀般在收到呼叫状态为 HexmeetCallState.StreamsRunning 调⽤判断是否为双流。
声明
boolean isReceivingContent()
参数
传入 | 无 | |
---|---|---|
传出 | 无 |
返回值 boolean true 有 false 没有
hasOngoingTelephoneCall
判断是否存正在进⾏中的电信电话,如果存在,客户程序需要调⽤ muteLocalVideo 关闭本地视频
声明
boolean hasOngoingTelephoneCall()
参数
传入 | 无 | |
---|---|---|
传出 | 无 |
返回值 boolean true 有 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 | |
---|---|---|
传出 | 无 |
返回值
boolean true 有 false 没有
muteLocalVideo
摄影镜头控制⽅法,可以打开、关闭摄像头,通话中如果关闭摄像头,将向远端发送背景图
声明
void muteLocalVideo(boolean mute)
参数
传入 | (boolean)mute | true— 将本地视频关闭。 false — 将本地视频打开。 |
---|---|---|
传出 | 无 |
返回值
无
saveUserIcon
设置⽤户的头像,当在通话中并且本地视频关闭时, SDK 会将头像和背景图⽚合成,作为视频流发 送给远端
声明
void saveUserIcon(Bitmap userIcon)
参数
传入 | Bitmap userIcon | ⽤户图像图标 |
---|---|---|
传出 | 无 |
返回值
无
isMicMuted
获取⻨克⻛状态,当返回 true 表示关闭,反之表示打开
声明
boolean isMicMuted()
参数
传入 | 无 | |
---|---|---|
传出 | 无 |
返回值
boolean true 有 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()
参数
传入 | 无 | |
---|---|---|
传出 | 无 |
返回值
boolean true 扬声器打开 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()
参数
传入 | 无 | |
---|---|---|
传出 | 无 |
返回值
无