KalayRN(简中版)

RN版本


Android API

[TOC]

一、IOTCamera

1.1 初始化接口、静态API

TK_initIOTC

/**
 * IOTC初始化
 * <p>
 * Error:
 * -1004 sdkLicenseKey无效
 * -10000 privateKey无效
 * -10003 privateKey过期
 *
 * @param context       上下文
 * @param privateKey    初始化的Key值
 * @param sdkLicenseKey SDK初始化的Key值
 * @param listener      初始化回调
 */
public synchronized static void TK_initIOTCWithLicenseKey(Context context, String privateKey, String sdkLicenseKey, TK_Listener listener);

/**
 *  RN封装方法
 */
 @ReactMethod
public void RN_initIOTC()
示例:
Camera.TK_initIOTCWithLicenseKey(context, privateKey, sdkLicensekey, new TK_Listener());
备注:假如app应用使用的Android SDK是大于27(即使用9.0以上的SDK)则需要在AndroidManifest.xml的application里添加参数android:usesCleartextTraffic="true"
否则会初始化不成功;
例如:
<application
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher"
    android:usesCleartextTraffic="true"
    android:theme="@style/AppTheme">
</application>

> 注:调用TK_initIOTC时返回-10000, 是因为privateKey无效导致,遇到该问题时建议:

  • 确认当前项目使用的包名与privateKey是否与TUTK提供的一致,如不一致,请修改为TUTK提供的包名与privateKey重新运行;
  • 如需更改包名与privateKey,请联系商务或者技术支持人员。

TK_unInitIOTC

/**
 * IOTC反初始化
 */
public synchronized static int TK_unInitIOTC();

/**
 *  RN封装方法
 */
 @ReactMethod
public void RN_uninitIOTC()
示例:
Camera.TK_unInitIOTC();

TK_setMasterRegion

/**
 * P2P分区分流
 * <p>
 * 需要在{@link #TK_initIOTC}之前进行调用
 *
 * @param region 0:全部;1:大中华地区;2:欧洲;3:美洲。
 */
public static void TK_setMasterRegion(int region);

/**
 *  RN封装方法
 */
 @ReactMethod
 public void RN_setMasterRegion(int region)
示例:
Camera.TK_setMasterRegion(1);

TK_getIOTCameraVersion

/**
 * 获取IOTCamera版本号
 */
public static String TK_getIOTCameraVersion();
示例:
Camera.TK_getIOTCameraVersion();

TK_getIOTCAPIsVerion

/**
 * 返回IOTCAPI的版本号
 */
public static String TK_getIOTCAPIsVerion();
示例:
Camera.TK_getIOTCAPIsVerion();

TK_getAVAPIsVersion

/**
 * 返回AVAPI的版本号
 */
public static String TK_getAVAPIsVersion();
示例:
Camera.TK_getAVAPIsVersion();

TK_LanSearch

/**
 * 本地搜索设备
 *
 * @param timeoutMs 搜索超时时间
 * @return 本地网络下搜索到的设备信息
 */
public static st_LanSearchInfo[] TK_LanSearch(int timeoutMs);

/**
 *  RN封装方法
 */
 @ReactMethod
public  st_LanSearchInfo[] TK_LanSearch(int timeout)
示例:
st_LanSearchInfo[] arrResp = Camera.TK_LanSearch(2000);
if (arrResp != null) {
   for (st_LanSearchInfo info : arrResp) {
      Log.i(TAG, "uid: " + new String(info.UID) + " ip:" + new String(info.IP));
   }
}

TK_setMaxCameraLimit

/**
 * 设置最大camera数量,默认是4
 * <p>
 * 需要在{@link #TK_initIOTC}之前进行调用
 */
public static void TK_setMaxCameraLimit(int limit);
示例:
Camera.TK_setMaxCameraLimit(4);

1.2 回调接口

1.2.1 P2P回调接口

TK_registerIOTCListener

/**
 * 注册IOTC回调
 */
public boolean TK_registerIOTCListener(InterfaceCtrl.SimpleIRegisterIOTCListener listener);

/**
 * 注销IOTC回调
 */
public boolean TK_unregisterIOTCListener(InterfaceCtrl.SimpleIRegisterIOTCListener listener);
public class SimpleIRegisterIOTCListener {

  /**
 * 软解码数据回调(当调用MyCamera.TK_startShow(软解)时,IOTCamera层从此方法上抛视频解码信息)
 *
 * @param camera
 * @param avChannel   AV通道
 * @param videoWidth  解码后Video的宽
 * @param videoHeight 解码后Video的高
 * @param isIframe    当前frame是否I帧
 */
public void receiveFrameData(final Camera camera, final int avChannel, final int videoWidth, final int videoHeight, boolean isIframe);

/**
 * 硬解码数据回调(当调用MyCamera.TK_startShow(硬解)时,IOTCamera层从此方法上抛视频解码信息)
 *
 * @param camera
 * @param avChannel   AV通道
 * @param buf         接收到的Video数据
 * @param length      接收到的Video数据长度
 * @param pFrmNo      接收到的Video数据的序号
 * @param pFrmInfoBuf 接收到的Video数据头信息
 * @param isIframe    是否I帧
 * @param codecId     Codec ID (编码解码类型)
 */
public void receiveFrameDataForMediaCodec(final Camera camera, final int avChannel, final byte[] buf, final int length, int pFrmNo, byte[] pFrmInfoBuf, boolean isIframe, int codecId);

/**
 * 接收到的帧信息回调(当调用MyCamera.TK_startShow时,IOTCamera层从此方法上抛视频观看信息)
 *
 * @param camera
 * @param avChannel            AV通道
 * @param bitRate              音视频的比特率
 * @param frameRate            解码的VideoFPS
 * @param onlineNm             在线人数
 * @param frameCount           接收到的帧总数
 * @param incompleteFrameCount 丢失帧的总数
 */
public void receiveFrameInfo(final Camera camera, final int avChannel, final long bitRate, final int frameRate, final int onlineNm, final int frameCount,
                             final int incompleteFrameCount);

/**
 * IOTC连接信息回调(当调用MyCamera.TK_connect时,IOTCamera层从此方法上抛连线返回值)
 *
 * @param camera
 * @param resultCode IOTC连接返回码(Camera定义的返回码)
 */
 public void receiveSessionInfo(final Camera camera, final int resultCode);

示例:在Android层解析然后上抛到RN层,上层监听DeviceEventEmitter的receiveSessionInfo
 public void receiveSessionInfo(final Camera camera, final int resultCode){
   LogUtils.I(TAG, "  receiveSessionInfo-----resultCode:"+resultCode);
    WritableMap wm = Arguments.createMap();
    wm.putInt("state",resultCode);
    sendEventToUi(mContext,"receiveSessionInfo", wm);
 }

/**
 * AV连接信息回调(当调用MyCamera.TK_start时,IOTCamera层从此方法上抛创建通道返回值)
 *
 * @param camera
 * @param avChannel  av通道
 * @param resultCode AV连接返回码(Camera定义的返回码)
 */
public void receiveChannelInfo(final Camera camera, final int avChannel, final int resultCode);

示例:在Android层解析然后上抛到RN层,上层监听DeviceEventEmitter的receiveChannelInfo
public void receiveChannelInfo(final Camera camera, final int avChannel, final int resultCode){
    WritableMap wm = Arguments.createMap();
    wm.putInt("avChannel",avChannel);
    wm.putInt("state",resultCode);
    sendEventToUi(mContext,"receiveChannelInfo", wm);
    if (resultCode == Camera.CONNECTION_STATE_CONNECTED){
       //连接成功后询问设备的音频格式
       mCamera.TK_sendIOCtrlToChannel(channel, AVIOCTRLDEFs.IOTYPE_USER_IPCAM_GETAUDIOOUTFORMAT_REQ,
        AVIOCTRLDEFs.SMsgAVIoctrlGetAudioOutFormatReq.parseContent(channel));
    }
}

/**
 * 接收信息回调(当收到设备发过来的信息,IOTCamera层从此方法上抛信息)
 *
 * @param camera
 * @param avChannel       av通道
 * @param avIOCtrlMsgType 接收到的信息类型
 * @param data            接收到的信息
 */
public void receiveIOCtrlData(final Camera camera, final int avChannel, final int avIOCtrlMsgType, final byte[] data);

示例:在Android层解析然后上抛到RN层,上层监听DeviceEventEmitter的IOTYPE_USER_IPCAM_GETAUDIOOUTFORMAT_RESP
public void receiveIOCtrlData(final Camera camera, final int avChannel, final int avIOCtrlMsgType, final byte[] data){
   if(avIOCtrlMsgType == AVIOCTRLDEFs.IOTYPE_USER_IPCAM_GETAUDIOOUTFORMAT_RESP){
     int channel = Packet.byteArrayToInt_Little(data, 0);
    int format = Packet.byteArrayToInt_Little(data, 4);
    int sample = data[8];
    //发送事件,IOTYPE_USER_IPCAM_GETAUDIOOUTFORMAT_RESP
    WritableMap wm = Arguments.createMap();
    wm.putInt("channel",channel);
    wm.putInt("format",format);
    wm.putInt("sample",sample);
    sendEventToUi(mContext,"IOTYPE_USER_IPCAM_GETAUDIOOUTFORMAT_RESP", wm);
   }
}

/**
 * 通道建立回调方法(当调用MyCamera.TK_startSoundToDevice时,IOTCamera层从此方法上抛返回值)
 *
 * @param camera
 * @param avChannel av通道
 * @param ret       av通道建立返回码(SDK底层返回码)
 */
public void retStartChannel(final Camera camera, final int avChannel, final int ret);

示例:在Android层解析然后上抛到RN层,上层监听DeviceEventEmitter的retStartChannel
public void retStartChannel(final Camera camera, final int avChannel, final int ret){
    WritableMap wm = Arguments.createMap();
    wm.putInt("avChannel",avChannel);
    wm.putInt("state",ret);
    sendEventToUi(mContext,"retStartChannel", wm);
}

/**
 * 监听音频解码结果回调方法(当调用MyCamera.TK_startSoundToPhone时,IOTCamera层从此方法上抛音频解码返回值)
 *
 * @param camera
 * @param avChannel av通道
 * @param ret       是否音频解码
 */
public void retStartListen(final Camera camera, final int avChannel, final Boolean ret);

示例:在Android层解析然后上抛到RN层,上层监听DeviceEventEmitter的retStartListen
public void retStartListen(final Camera camera, final int avChannel, final Boolean ret){
    WritableMap wm = Arguments.createMap();
    wm.putInt("avChannel",avChannel);
    wm.putBoolean("state",ret);
    sendEventToUi(mContext,"retStartListen", wm);
}

/**
 * IOTC连接信息回调 (当调用MyCamera.TK_connect时,SDK底层从此方法上抛连线返回值)
 *
 * @param camera
 * @param resultCode IOTC连接返回码(SDK底层返回码)
 */
public void debugSessionInfo(final Camera camera, final int resultCode);

示例:在Android层解析然后上抛到RN层,上层监听DeviceEventEmitter的debugSessionInfo
public void debugSessionInfo(final Camera camera, final int resultCode){
    WritableMap wm = Arguments.createMap();
    wm.putInt("resultCode",resultCode);
    sendEventToUi(mContext,"debugSessionInfo", wm);
}

/**
 * AV连接信息回调 (当调用MyCamera.TK_start时,SDK底层从此方法上抛创建通道返回值)
 *
 * @param camera
 * @param avChannel  av通道
 * @param resultCode AV连接返回码(SDK底层返回码)
 */
public void debugChannelInfo(final Camera camera, final int avChannel, final int resultCode);

示例:在Android层解析然后上抛到RN层,上层监听DeviceEventEmitter的debugChannelInfo
public void debugChannelInfo(final Camera camera, final int avChannel, final int resultCode){
    WritableMap wm = Arguments.createMap();
    wm.putInt("avChannel",avChannel);
    wm.putInt("resultCode",resultCode);
    sendEventToUi(mContext,"debugChannelInfo", wm);
}

/**
 * 发送数据的回调 (当调用MyCamera.TK_sendIOCtrlToChannel时,SDK底层从此方法上抛)
 *
 * @param camera
 * @param avChannel       av通道
 * @param avIOCtrlMsgType 发送信息的类型
 * @param result          发送信息的返回码
 * @param data            发送信息的数据
 */
public void debugIOCtrlData(final Camera camera, final int avChannel, final int avIOCtrlMsgType, final int result, final byte[] data);

/**
 * 发送数据的回调 (当调用MyCamera.TK_sendJsonIOCtrlToChannel时,SDK底层从此方法上抛)
 *
 * @param camera
 * @param avChannel    av通道
 * @param jsonRequest  发送的json数据
 * @param jsonResponse 设备返回的内容
 * @param timeoutSec   超时时间
 * @param result       发送信息的返回码
 */
void receiveJsonIOCtrlData(final Camera camera, final int avChannel, final String jsonRequest,
                           final String[] jsonResponse, final int timeoutSec, int result);
}
示例:
Camera camera = new Camera();
camera.TK_registerIOTCListener(new SimpleIRegisterIOTCListener());
resultCode 连线结果 定义
CONNECTION_STATE_CONNECTING = 1 连线中
CONNECTION_STATE_CONNECTED = 2 连线成功
CONNECTION_STATE_DISCONNECTED = 3 断线
CONNECTION_STATE_UNKNOWN_DEVICE = 4 未知设备
CONNECTION_STATE_WRONG_PASSWORD = 5 密码错误
CONNECTION_STATE_TIMEOUT = 6 连线超时
CONNECTION_STATE_UNSUPPORTED = 7 设备不支持连线
CONNECTION_STATE_CONNECT_FAILED = 8 连线失败
CONNECTION_STATE_UNKNOWN_LICENSE = 9 设备uid未在license中
CONNECTION_STATE_SLEEP = 10 设备睡眠状态
CONNECTION_STATE_DEVICE_MAX_SESSION = 11 超过设备最大连线数
CONNECTION_STATE_POOR_NETWORKSIGNA = 12 网络信号差
CONNECTION_STATE_WRONG_AUTH_KEY = 13 AuthKey错误

1.2.2 音视频回调接口

TK_registerMediaDataListener

/**
 * 注册音视频数据回调
 */
public boolean TK_registerVideoDataListeners(InterfaceCtrl.SimpleIRegisterVideoDataListener listener);

/**
 * 注销音视频数据回调
 */
public boolean TK_unregisterVideoDataListeners(InterfaceCtrl.SimpleIRegisterVideoDataListener listener);
public class SimpleIRegisterVideoDataListener {

/**
 * Video数据回调 (调用TK_startShow后才有数据返回)
 *
 * @param camera
 * @param avChannel    av通道 一般为0
 * @param decodeBefore 解码前的数据
 * @param decodeAfter  解码后的数据(如果是硬解则此数据为null)yuv
 * @param timestamp    当前数据的时间戳
 * @param isIFrame     是否I帧
 */
void onReceiveVideoData(Camera camera, int avChannel, byte[] decodeBefore, byte[] decodeAfter, long timestamp, boolean isIFrame);

/**
 * 开启接收视频数据而不解码的回调(只有调用TK_startRecvFrame才有数据返回)
 *
 * @param camera
 * @param avChannel        av通道 一般为0
 * @param frameNum         当前接收视频帧的序号
 * @param timeStamp        当前接收视频帧的时间戳
 * @param isIFrame         是否I帧
 * @param receiveVideoData Video裸数据
 */
void onRecvVideoFrame(Camera camera, int avChannel, int frameNum, long timeStamp, boolean isIFrame, byte[] receiveVideoData);

/**
 * 开启接收音频数据而不解码的回调 (只有调用TK_startRecvAudio才有数据返回)
 *
 * @param camera
 * @param avChannel        av通道 一般为0
 * @param frameNum         当前接收音频帧的序号
 * @param timeStamp        当前接收音频帧的时间戳
 * @param receiveAudioData 当前接收音频数据
 */
void onRecvAudioData(Camera camera, int avChannel, int frameNum, long timeStamp, byte[] receiveAudioData);
}
示例:
Camera camera = new Camera();
camera.TK_registerVideoDataListeners(new SimpleIRegisterVideoDataListener());

1.3 连线处理

1.3.1 P2P

TK_connect

/**
 * 连线Device
 * IOTCAPIs 连接. 内部调用IOTC_Connect_ByUID_Parallel连线至UID,建立IOTC Session
 * 以及开启线程不断进行IOTC_Session_Check查询与Device之间的连线
 *
 * @param uid 20位uid序列号
 */
public abstract void TK_connect(String uid,String viewAccount, String viewPasswd);

/**
 * 连线Device
 * IOTCAPIs 连接. 内部调用IOTC_Connect_ByUIDEx连线至UID,建立IOTC Session
 * 以及开启线程不断进行IOTC_Session_Check查询与Device之间的连线
 *
 * @param uid 20位uid序列号
 * @param viewAccount 设备账号
 * @param viewPasswd 设备密码
 * @param authKey 连线认证的Key
 */
public abstract void TK_connect(String uid,String viewAccount, String viewPasswd, String authKey);

/**
 *  RN封装方法
 */
 @ReactMethod
public void RN_connect(String uid,String viewAccount,String viewPasswd,String authKey)
示例:
Camera camera = new Camera();
camera.TK_connect(uid, authKey);
camera.TK_registerIOTCListener(new InterfaceCtrl.SimpleIOTCListener() {
   @Override
   public void receiveSessionInfo(Camera camera, int resultCode) {
      if (resultCode == Camera.CONNECTION_STATE_CONNECTED) {
         //连线成功
      }
   }
});

1.3.2 共有

TK_disconnect

/**
 * 断线Device,同时断开内部所有AV通道
 */
public abstract void TK_disconnect();

/**
 *  RN封装方法
 */
 @ReactMethod
 public void RN_disconnect( )
示例:
camera.TK_disconnect();

TK_start

/**
 * 连线AV通道
 * <p>
 * 1、SecurityMode加密模式会优先使用上次连线成功后的方式,默认为AUTO(2)
 * 2、AuthType认证方式默认为PASSWORD(0)方式
 * <p>
 * 1、需要先调用{@link #TK_connect}
 * 2、连线结果使用{@link #TK_registerIOTCListener}进行获取
 *
 * @param avChannel 一般为0
 * @see InterfaceCtrl.IOTCListener#receiveChannelInfo
 */
public abstract void TK_start(int avChannel);

/**
 * 连线AV通道
 * <p>
 * 1、需要先调用{@link #TK_connect}
 * 2、连线结果使用{@link #TK_registerIOTCListener}进行获取
 *
 * @param avChannel 一般为0
 * @param authType 0:AV_AUTH_PASSWORD 1:AV_AUTH_TOKEN
 */
public abstract void TK_start(int avChannel,int authType);

/**
 *  RN封装方法
 */
 @ReactMethod
 public void RN_start(int avChannel)
示例:
Camera camera = new Camera();
camera.TK_connect(uid, authKey);
camera.TK_start(Camera.DEFAULT_AV_CHANNEL,Camera.AV_AUTH_PASSWORD);
cameraTK_registerIOTCListener(new InterfaceCtrl.SimpleIOTCListener() {
   @Override
   public void receiveSessionInfo(Camera camera, int resultCode) {
      if (resultCode == Camera.CONNECTION_STATE_CONNECTED) {
         //连线成功
      }
   }

   @Override
   public void receiveChannelInfo(Camera camera, int avChannel, int resultCode) {
      if (resultCode == Camera.CONNECTION_STATE_CONNECTED) {
         //连线av通道成功
      }
   }
});

TK_stop

/**
 * 断线AV通道
 *
 * @param avChannel 一般为0
 */
public abstract void TK_stop(int avChannel);

/**
 *  RN封装方法
 */
 @ReactMethod
 public void RN_stop(int avChannel)
示例:
camera.TK_stop(Camera.DEFAULT_AV_CHANNEL);

TK_setDtls

/**
 * 重置DTLS连接方式为Auto
 * @param uid
 * @param avChannel
 */
public abstract void TK_setDtls(String uid,int avChannel);

TK_changeAuthKey

/**
 * 修改AuthKey,返回修改后的AuthKey
 * <p>
 * 需要在{@link #TK_start}成功后进行调用
 *
 * @param avChannel 一般为0
 */
public abstract String TK_changeAuthKey(int avChannel);
示例:
Camera camera = new Camera();
camera.TK_connect(uid, authKey);
camera.TK_start(Camera.DEFAULT_AV_CHANNEL, password, "admin", Camera.AuthType.PASSWORD, Camera.SecurityMode.AUTO);
cameraTK_registerIOTCListener(new InterfaceCtrl.SimpleIOTCListener() {
   @Override
   public void receiveSessionInfo(Camera camera, int resultCode) {
      if (resultCode == Camera.CONNECTION_STATE_CONNECTED) {
         //连线成功
      }
   }

   @Override
   public void receiveChannelInfo(Camera camera, int avChannel, int resultCode) {
      if (resultCode == Camera.CONNECTION_STATE_CONNECTED) {
         //连线av通道成功,修改authKey
         camera.TK_changeAuthKey(avChannel);
      }
   }
});

TK_isSessionConnected

/**
 * Device是否连线
 *
 */
public abstract boolean TK_isSessionConnected();
示例:
camera.TK_isSessionConnected();

TK_isChannelConnected

/**
 * AV通道是否连线
 *
 * @param avChannel 一般为0
 */
public abstract boolean TK_isChannelConnected(int avChannel);
示例:
camera.TK_isChannelConnected();

TK_getAVChannelCount

/**
 * 获取已经开启的AV通道数
 */
public abstract int TK_getAVChannelCount();
示例:
camera.TK_getAVChannelCount();

TK_getServiceTypeOfChannel

/**
 * 获取相应通道ServiceTYpe
 *
 * @param avChannel 一般为0
 * @return 返回ServiceTYpe
 */
public abstract long TK_getServiceTypeOfChannel(int avChannel);
示例:
camera.TK_getServiceTypeOfChannel(Camera.DEFAULT_AV_CHANNEL);

1.4 视频处理接口

TK_startShow

/**
 * 开启视频接收和解码
 * 内部开始接收视频数据以及开始解码视频数据
 * 视频数据的回调:硬解回调receiveFrameDataForMediaCodec  和软解回调receiveFrameData
 * (onReceiveVideoData回调decodeAfter返回null)
 *
 * @param avChannel         一般默认为0
 * @param clearBuf          是否清除Buff
 * @param runSoftwareDecode 是否软解码(true为软解码 false为硬解码)
 * @param isDropFrame       是否丢掉P帧
 */
public abstract void TK_startShow(int avChannel, boolean clearBuf, boolean runSoftwareDecode, boolean isDropFrame);
/**
 *  RN封装方法
 */
 @ReactMethod
 public void RN_startShow(int avChannel,boolean runSoftwareDecode ,boolean isDropFrame)

/**
 * 开始视频接收和解码YUV数据(onReceiveVideoData回调decodeAfter返回YUV数据)
 *
 * @param avChannel   一般默认为0
 * @param clearBuf    是否清除Buff
 * @param runSoftwareDecode 是否软解码(true为软解码 false为硬解码)
 * @param isDropFrame 是否软解码(true为软解码 false为硬解码)
 */
public abstract void TK_startShowWithYUV(int avChannel, boolean clearBuf, boolean runSoftwareDecode, boolean isDropFrame);

/**
 * 开始视频接收和解码RGB数据(onReceiveVideoData回调decodeAfter返回RGB数据)
 *
 * @param avChannel   一般默认为0
 * @param clearBuf    是否清除Buff
 * @param runSoftwareDecode 是否软解码(true为软解码 false为硬解码)
 * @param isDropFrame 是否软解码(true为软解码 false为硬解码)
 */
public abstract void TK_startShowWithRGB(int avChannel, boolean clearBuf, boolean runSoftwareDecode, boolean isDropFrame);
示例:
camera.TK_startShow(Camera.DEFAULT_AV_CHANNEL, true, false, false);

TK_stopShow

/**
 * 停止所有AV通道的视频接收、解码、播放
 */
public abstract void TK_stopShow();

/**
 * 停止指令通道的视频接收、解码、播放
 *
 * @param avChannel 需要停止的Channel
 */
public abstract void TK_stopShow(int avChannel);

/**
 *  RN封装方法
 */
 @ReactMethod
 public void RN_stopShow(int avChannel)
示例:
camera.TK_stopShow();

TK_getVideoCodecId

/**
 * 获取当前视频格式
 * <p>
 * 在出图后,可使用本Api获取视频格式
 * <p>
 * 对应格式如下:
 * {@link com.tutk.IOTC.AVFrame#VIDEO_CODEC_MPEG4} 76
 * {@link com.tutk.IOTC.AVFrame#VIDEO_CODEC_H263} 77
 * {@link com.tutk.IOTC.AVFrame#VIDEO_CODEC_H264} 78
 * {@link com.tutk.IOTC.AVFrame#VIDEO_CODEC_MJPEG} 79
 * {@link com.tutk.IOTC.AVFrame#VIDEO_CODEC_HEVC} 80
 * {@link com.tutk.IOTC.AVFrame#VIDEO_CODEC_VP8} 81
 * {@link com.tutk.IOTC.AVFrame#VIDEO_CODEC_VP9} 82
 *
 * @param channel 一般为0
 * @return 返回视频格式
 */
int TK_getVideoCodecId(int channel);
示例:
camera.TK_getVideoCodecId(Camera.DEFAULT_AV_CHANNEL);

1.5 音频处理接口

TK_startSoundToDevice


/**
 * 开始音频采集、编码、发送
 * <p>
 * 1、使用 {@link #TK_registerMediaDataListener} 获取音频数据
 * 2、使用 {@link #TK_registerIOTCListener} 获取是否音频对讲成功
 *
 * @param avChannel   一般为0
 * @param isResend    是否开启Resend机制
 */
void TK_startSoundToDevice(int avChannel, boolean isResend);

/**
 *  RN封装方法
 */
 @ReactMethod
 public void RN_startSoundToDevice(int avChannel,boolean isResend)
示例:
camera.TK_startSoundToDevice(Camera.DEFAULT_AV_CHANNEL);

TK_stopSoundToDevice

/**
 * 停止音频采集、编码、发送
 *
 * @param avChannel 一般为0
 */
public abstract void TK_stopSoundToDevice(int avChannel);
/**
 *  RN封装方法
 */
 @ReactMethod
 public void RN_stopSoundToDevice(int avChannel)
示例:
camera.TK_stopSoundToDevice(Camera.DEFAULT_AV_CHANNEL);

TK_startSoundToPhone

/**
 * 开始接收Device端的音频数据
 * 内部开始接收Device的音频和开始解码音频数据
 *
 * @param avChannel   一般为0
 * @param isListening 是否监听(是否解码音频)
 */
public abstract void TK_startSoundToPhone(int avChannel, boolean isListening);
/**
 *  RN封装方法
 */
 @ReactMethod
 public void RN_startSoundToPhone(int avChannel, boolean isListening)
示例:
camera.TK_startSoundToPhone(Camera.DEFAULT_AV_CHANNEL);

TK_stopSoundToPhone

/**
 * 停止音频接收、解码、播放
 *
 * @param avChannel 一般为0
 */
public abstract void TK_stopSoundToPhone(int avChannel);
/**
 *  RN封装方法
 */
 @ReactMethod
 public void RN_stopSoundToPhone(int avChannel)
示例:
camera.TK_stopSoundToPhone(Camera.DEFAULT_AV_CHANNEL);

TK_startAcousticEchoCanceler

/**
 * 开启消回音功能
 * <p>
 * 开启后,在双向语音时会进行回音消除
 */
public abstract void TK_startAcousticEchoCanceler();
示例:
camera.TK_startAcousticEchoCanceler();

TK_stopAcousticEchoCanceler

/**
 * 停止消回音功能
 */
public abstract void TK_stopAcousticEchoCanceler();
示例:
camera.TK_stopAcousticEchoCanceler();

TK_setAcousticEchoCancelerDelaySize

/**
 * 设置消噪,消回音的参数
 * <p>
 * 若在某些特定机型上,回音消除效果不好,可使用本Api进行调整
 *
 * @param aecDelaySize 消回音参数 2-50
 * @param nrDelaySize  降噪参数 2-50
 */
public abstract void TK_setAcousticEchoCancelerDelaySize(int aecDelaySize, int nrDelaySize);
示例:
camera.TK_setAcousticEchoCancelerDelaySize(2, 50);
示例:
camera.TK_startSoundToPhone(Camera.DEFAULT_AV_CHANNEL);
camera.TK_stopSoundToDevice(Camera.DEFAULT_AV_CHANNEL);

TK_sendAudio

/**
 * 发送回音消除后的音频数据,一般用于第三方回音消除功能
 *
 * @param avChannel 通道号
 * @param bytes     audio数据
 * @param length    audio数据长度
 */
public abstract void TK_sendAudioData(int avChannel, byte[] bytes, int length);

TK_setAudioSpeakFormats

/**
 * 设置音频对讲格式、采样率等
 * <p>
 * 使用 {@link #TK_startSoundToDevice} 将采用本Api的配置
 *
 * @param channel         一般为0
 * @param audioSpeakCodec 音频编码格式
 *                        {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_AAC_RAW} 134
 *                        {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_AAC_ADTS} 135
 *                        {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_AAC_LATM} 136
 *                        {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_G711U} 137
 *                        {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_G711A} 138
 *                        {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_ADPCM} 139
 *                        {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_PCM} 140
 *                        {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_SPEEX} 141
 *                        {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_MP3} 142
 *                        {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_G726} 143
 * @param audioSampleRate 采样率
 *                        {@link com.tutk.IOTC.AVFrame#AUDIO_SAMPLE_8K} 8000
 *                        {@link com.tutk.IOTC.AVFrame#AUDIO_SAMPLE_16K} 16000
 * @param channelConfig   音频通道配置
 *                        {@link com.tutk.IOTC.AVFrame#AUDIO_CHANNEL_MONO} 0
 *                        {@link com.tutk.IOTC.AVFrame#AUDIO_CHANNEL_STERO} 1
 * @param audioDataBits   PCM数据位
 *                        {@link com.tutk.IOTC.AVFrame#AUDIO_DATABITS_8} 0
 *                        {@link com.tutk.IOTC.AVFrame#AUDIO_DATABITS_16} 1
 */
void TK_setAudioSpeakFormats(int channel, int audioSpeakCodec, int audioSampleRate, int channelConfig, int audioDataBits);
示例:
camera.TK_setAudioSpeakFormats(Camera.DEFAULT_AV_CHANNEL, AVFrame.AUDIO_CODEC_G711A, AVFrame.AUDIO_SAMPLE_8K, AVFrame.AUDIO_CHANNEL_MONO, AVFrame.AUDIO_DATABITS_16);

TK_setAudioInputCodecId

/**
 * 设置音频对讲格式
 * <p>
 * 使用 {@link #TK_startSoundToDevice} 将采用本Api的配置
 * <p>
 * 对应格式如下:
 * {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_AAC_RAW} 134
 * {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_AAC_ADTS} 135
 * {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_AAC_LATM} 136
 * {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_G711U} 137
 * {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_G711A} 138
 * {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_ADPCM} 139
 * {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_PCM} 140
 *
 * @param channel     一般为0
 * @param audioFormat 音频格式
 */
void TK_setAudioInputCodecId(int channel, int audioFormat);
示例:
camera.TK_setAudioSpeakFormats(Camera.DEFAULT_AV_CHANNEL, AVFrame.AUDIO_CODEC_G711A, AVFrame.AUDIO_SAMPLE_8K, AVFrame.AUDIO_CHANNEL_MONO, AVFrame.AUDIO_DATABITS_16);

TK_getAudioInputCodecId

/**
 * 获取音频对讲格式
 * <p>
 * 对应格式如下:
 * {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_AAC_RAW} 134
 * {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_AAC_ADTS} 135
 * {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_AAC_LATM} 136
 * {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_G711U} 137
 * {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_G711A} 138
 * {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_ADPCM} 139
 * {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_PCM} 140
 *
 * @param channel 一般为0
 * @return 返回音频格式
 */
int TK_getAudioInputCodecId(int channel);
示例:
camera.TK_getAudioInputCodecId(Camera.DEFAULT_AV_CHANNEL);

TK_getAudioOutputCodecId

/**
 * 获取音频监听格式
 * <p>
 * 对应格式如下:
 * {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_AAC_RAW} 134
 * {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_AAC_ADTS} 135
 * {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_AAC_LATM} 136
 * {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_G711U} 137
 * {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_G711A} 138
 * {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_ADPCM} 139
 * {@link com.tutk.IOTC.AVFrame#AUDIO_CODEC_PCM} 140
 *
 * @param channel 一般为0
 * @return 返回音频格式
 */
int TK_getAudioOutputCodecId(int channel);
示例:
camera.TK_getAudioOutputCodecId(Camera.DEFAULT_AV_CHANNEL);

1.6 录像与截图

TK_startRecording

/**
 * 开始录像
 * 内部开始录像channel的视频数据和音频数据
 *
 * @param path    录像保存地址
 * @param sync    设置为true则等待实际录像的开始
 * @param channel 一般为0
 * @param recordingTime 录像时长,单位为毫秒
 * @return
 */
public abstract boolean TK_startRecordingForChannel(String path, boolean sync, int channel, long recordingTime);
/**
 *  RN封装方法
 */
 @ReactMethod
 public boolean RN_startRecordingForChannel( int channel)
示例:
camera.TK_startRecording(path,true,Camera.DEFAULT_AV_CHANNEL, 0);
/**
 *  RN封装方法
 */
 @ReactMethod
 public boolean RN_stopRecording(int channel)

TK_stopRecording

/**
 * 停止录像
 */
public abstract boolean TK_stopRecording(int channel);
示例:
camera.TK_stopRecording(Camera.DEFAULT_AV_CHANNEL);

TK_snapshot

/**
 * 视频截图 (截图成功后在CameraListener回调OnSnapshotComplete)
 *
 * @param channel  一般为0
 * @param filePath 图片保存地址
 * @deprecated 在一定条件下有可能失败
 */
public abstract void TK_setSnapshot( int channel, String filePath);
/**
 *  RN封装方法
 */
 @ReactMethod
 public boolean RN_setSnapshot( int channel)

/**
 * 截图
 * @param channel       通道号
 * @param filePath      截图保存地址
 * @param bitmapPixels  0即代表默认 DEFAULT_BITMAP_PIXELS = 1200000
 * @return              根据给的bitmapPixels返回图像
 */
public abstract boolean TK_setSnapshotByCurrentBitmap( int channel, String filePath, long bitmapPixels);
示例:
camera.TK_snapshot(Camera.DEFAULT_AV_CHANNEL, path);
camera.TK_setSnapshotByCurrentBitmap(Camera.DEFAULT_AV_CHANNEL, path,0);

1.7 指令发送

1.7.1 P2P

TK_sendIOCtrlToChannel

/**
 * 发送命令到Device
 *
 * @param avChannel 一般为0
 * @param type      command 类型
 * @param data      command 数据
 */
public abstract void TK_sendIOCtrlToChannel(int avChannel, int type, byte[] data);
示例:
camera.TK_sendIOCtrlToChannel(Camera.DEFAULT_AV_CHANNEL, 0x1ff, new byte[]{0, 0, 0, 0});

TK_sendJsonCtrlToChannel

/**
 * 发送json字串给设备
 *
 * @param avChannel    通道:一般为0
 * @param jsonRequest  发送的json字串
 * @param jsonResponse 设备回复的字串
 * @param timeoutSec   超时时间
 */
public abstract void TK_sendJsonIOCtrlToChannel(int avChannel, String jsonRequest, String[] jsonResponse, int timeoutSec);
示例:
camera.TK_sendJsonIOCtrlToChannel(Camera.DEFAULT_AV_CHANNEL, jsonRequest, 2);

TK_removeAllCmd

/**
 * 清除command队列
 */
public abstract void TK_removeAllCmd();
示例:
camera.TK_removeAllCmd();

二、VideoMonitor(播放器)

2.1 Method

TK_attachCamera

/**
 * 为播放器绑定Camera实例
 *
 * @param camera    Camera实例
 * @param avChannel 一般为0
 */
public void TK_attachCamera(Camera camera, int avChannel)
示例:
videoMonitor.TK_attachCamera(camera, Camera.DEFAULT_AV_CHANNEL);

TK_deattachCamera

/**
 * 播放器解绑Camera
 */
public void TK_deattachCamera()
示例:
videoMonitor.TK_deattachCamera();

2.2 回调接口

TK_setMonitorListener

/**
 * 播放器状态监听
 */
public void TK_setMonitorListener(InterfaceCtrl.SimpleMonitorListener listener)
public class SimpleMonitorListener {

   /**
    * 播放器的点击事件
    */
   void onClick();

   /**
    * 播放器已准备好出图
    *
    * @param channel          一般为0
    * @param isSoftwareDecode 是否软解码
    */
   void onReady(int channel, boolean isSoftwareDecode);

   /**
    * 播放器缩放的倍数传递给UI层
    *
    * @param scaleLevel 缩放的倍数
    */
   void onScale(float scaleLevel);

}
示例:
videoMonitor.TK_setMonitorListener(new InterfaceCtrl.SimpleMonitorListener());

页面列表

ITEM_HTML