KalayRN(简中版)

RN版本


Android API

<p>[TOC]</p> <h1>一、IOTCamera</h1> <h2>1.1 初始化接口、静态API</h2> <h3>TK_initIOTC</h3> <pre><code class="language-java">/** * IOTC初始化 * &amp;lt;p&amp;gt; * 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()</code></pre> <pre><code class="language-java">示例: Camera.TK_initIOTCWithLicenseKey(context, privateKey, sdkLicensekey, new TK_Listener());</code></pre> <pre><code>备注:假如app应用使用的Android SDK是大于27(即使用9.0以上的SDK)则需要在AndroidManifest.xml的application里添加参数android:usesCleartextTraffic=&amp;quot;true&amp;quot; 否则会初始化不成功; 例如: &amp;lt;application android:icon=&amp;quot;@mipmap/ic_launcher&amp;quot; android:label=&amp;quot;@string/app_name&amp;quot; android:roundIcon=&amp;quot;@mipmap/ic_launcher&amp;quot; android:usesCleartextTraffic=&amp;quot;true&amp;quot; android:theme=&amp;quot;@style/AppTheme&amp;quot;&amp;gt; &amp;lt;/application&amp;gt;</code></pre> <p>&gt; 注:调用TK_initIOTC时返回-10000, 是因为privateKey无效导致,遇到该问题时建议:</p> <ul> <li>确认当前项目使用的包名与privateKey是否与TUTK提供的一致,如不一致,请修改为TUTK提供的包名与privateKey重新运行;</li> <li>如需更改包名与privateKey,请联系商务或者技术支持人员。</li> </ul> <h3>TK_unInitIOTC</h3> <pre><code class="language-java">/** * IOTC反初始化 */ public synchronized static int TK_unInitIOTC(); /** * RN封装方法 */ @ReactMethod public void RN_uninitIOTC()</code></pre> <pre><code class="language-java">示例: Camera.TK_unInitIOTC();</code></pre> <h3>TK_setMasterRegion</h3> <pre><code class="language-java">/** * P2P分区分流 * &amp;lt;p&amp;gt; * 需要在{@link #TK_initIOTC}之前进行调用 * * @param region 0:全部;1:大中华地区;2:欧洲;3:美洲。 */ public static void TK_setMasterRegion(int region); /** * RN封装方法 */ @ReactMethod public void RN_setMasterRegion(int region)</code></pre> <pre><code class="language-java">示例: Camera.TK_setMasterRegion(1);</code></pre> <h3>TK_getIOTCameraVersion</h3> <pre><code class="language-java">/** * 获取IOTCamera版本号 */ public static String TK_getIOTCameraVersion();</code></pre> <pre><code class="language-java">示例: Camera.TK_getIOTCameraVersion();</code></pre> <h3>TK_getIOTCAPIsVerion</h3> <pre><code class="language-java">/** * 返回IOTCAPI的版本号 */ public static String TK_getIOTCAPIsVerion();</code></pre> <pre><code class="language-java">示例: Camera.TK_getIOTCAPIsVerion();</code></pre> <h3>TK_getAVAPIsVersion</h3> <pre><code class="language-java">/** * 返回AVAPI的版本号 */config { storeFile file('/Volumes/Transcend/TUTK资料/tutk.keystore') storePassword '123456' keyAlias = 'ipcamp' keyPassword '123456' } public static String TK_getAVAPIsVersion();</code></pre> <pre><code class="language-java">示例: Camera.TK_getAVAPIsVersion();</code></pre> <h3>TK_LanSearch</h3> <pre><code class="language-java">/** * 本地搜索设备 * * @param timeoutMs 搜索超时时间 * @return 本地网络下搜索到的设备信息 */ public static st_LanSearchInfo[] TK_LanSearch(int timeoutMs); /** * RN封装方法 */ @ReactMethod public st_LanSearchInfo[] TK_LanSearch(int timeout)</code></pre> <pre><code class="language-java">示例: st_LanSearchInfo[] arrResp = Camera.TK_LanSearch(2000); if (arrResp != null) { for (st_LanSearchInfo info : arrResp) { Log.i(TAG, &amp;quot;uid: &amp;quot; + new String(info.UID) + &amp;quot; ip:&amp;quot; + new String(info.IP)); } }</code></pre> <h3>TK_setMaxCameraLimit</h3> <pre><code class="language-java">/** * 设置最大camera数量,默认是4 * &amp;lt;p&amp;gt; * 需要在{@link #TK_initIOTC}之前进行调用 */ public static void TK_setMaxCameraLimit(int limit);</code></pre> <pre><code class="language-java">示例: Camera.TK_setMaxCameraLimit(4);</code></pre> <h2>1.2 回调接口</h2> <h3>1.2.1 P2P回调接口</h3> <h4>TK_registerIOTCListener</h4> <pre><code class="language-java">/** * 注册IOTC回调 */ public boolean TK_registerIOTCListener(InterfaceCtrl.SimpleIRegisterIOTCListener listener); /** * 注销IOTC回调 */ public boolean TK_unregisterIOTCListener(InterfaceCtrl.SimpleIRegisterIOTCListener listener);</code></pre> <pre><code class="language-java">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, &amp;quot; receiveSessionInfo-----resultCode:&amp;quot;+resultCode); WritableMap wm = Arguments.createMap(); wm.putInt(&amp;quot;state&amp;quot;,resultCode); sendEventToUi(mContext,&amp;quot;receiveSessionInfo&amp;quot;, 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(&amp;quot;avChannel&amp;quot;,avChannel); wm.putInt(&amp;quot;state&amp;quot;,resultCode); sendEventToUi(mContext,&amp;quot;receiveChannelInfo&amp;quot;, 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(&amp;quot;channel&amp;quot;,channel); wm.putInt(&amp;quot;format&amp;quot;,format); wm.putInt(&amp;quot;sample&amp;quot;,sample); sendEventToUi(mContext,&amp;quot;IOTYPE_USER_IPCAM_GETAUDIOOUTFORMAT_RESP&amp;quot;, 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(&amp;quot;avChannel&amp;quot;,avChannel); wm.putInt(&amp;quot;state&amp;quot;,ret); sendEventToUi(mContext,&amp;quot;retStartChannel&amp;quot;, 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(&amp;quot;avChannel&amp;quot;,avChannel); wm.putBoolean(&amp;quot;state&amp;quot;,ret); sendEventToUi(mContext,&amp;quot;retStartListen&amp;quot;, 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(&amp;quot;resultCode&amp;quot;,resultCode); sendEventToUi(mContext,&amp;quot;debugSessionInfo&amp;quot;, 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(&amp;quot;avChannel&amp;quot;,avChannel); wm.putInt(&amp;quot;resultCode&amp;quot;,resultCode); sendEventToUi(mContext,&amp;quot;debugChannelInfo&amp;quot;, 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); }</code></pre> <pre><code class="language-java">示例: Camera camera = new Camera(); camera.TK_registerIOTCListener(new SimpleIRegisterIOTCListener());</code></pre> <table> <thead> <tr> <th>resultCode 连线结果</th> <th>定义</th> </tr> </thead> <tbody> <tr> <td>CONNECTION_STATE_CONNECTING = 1</td> <td>连线中</td> </tr> <tr> <td>CONNECTION_STATE_CONNECTED = 2</td> <td>连线成功</td> </tr> <tr> <td>CONNECTION_STATE_DISCONNECTED = 3</td> <td>断线</td> </tr> <tr> <td>CONNECTION_STATE_UNKNOWN_DEVICE = 4</td> <td>未知设备</td> </tr> <tr> <td>CONNECTION_STATE_WRONG_PASSWORD = 5</td> <td>密码错误</td> </tr> <tr> <td>CONNECTION_STATE_TIMEOUT = 6</td> <td>连线超时</td> </tr> <tr> <td>CONNECTION_STATE_UNSUPPORTED = 7</td> <td>设备不支持连线</td> </tr> <tr> <td>CONNECTION_STATE_CONNECT_FAILED = 8</td> <td>连线失败</td> </tr> <tr> <td>CONNECTION_STATE_UNKNOWN_LICENSE = 9</td> <td>设备uid未在license中</td> </tr> <tr> <td>CONNECTION_STATE_SLEEP = 10</td> <td>设备睡眠状态</td> </tr> <tr> <td>CONNECTION_STATE_DEVICE_MAX_SESSION = 11</td> <td>超过设备最大连线数</td> </tr> <tr> <td>CONNECTION_STATE_POOR_NETWORKSIGNA = 12</td> <td>网络信号差</td> </tr> <tr> <td>CONNECTION_STATE_WRONG_AUTH_KEY = 13</td> <td>AuthKey错误</td> </tr> </tbody> </table> <h3>1.2.2 音视频回调接口</h3> <h4>TK_registerMediaDataListener</h4> <pre><code class="language-java">/** * 注册音视频数据回调 */ public boolean TK_registerVideoDataListeners(InterfaceCtrl.SimpleIRegisterVideoDataListener listener); /** * 注销音视频数据回调 */ public boolean TK_unregisterVideoDataListeners(InterfaceCtrl.SimpleIRegisterVideoDataListener listener);</code></pre> <pre><code class="language-java">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); }</code></pre> <pre><code class="language-java">示例: Camera camera = new Camera(); camera.TK_registerVideoDataListeners(new SimpleIRegisterVideoDataListener());</code></pre> <h2>1.3 连线处理</h2> <h3>1.3.1 P2P</h3> <h4>TK_connect</h4> <pre><code class="language-java">/** * 连线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)</code></pre> <pre><code class="language-java">示例: 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) { //连线成功 } } });</code></pre> <h3>1.3.2 共有</h3> <h4>TK_disconnect</h4> <pre><code class="language-java">/** * 断线Device,同时断开内部所有AV通道 */ public abstract void TK_disconnect(); /** * RN封装方法 */ @ReactMethod public void RN_disconnect( )</code></pre> <pre><code class="language-java">示例: camera.TK_disconnect();</code></pre> <h4>TK_start</h4> <pre><code class="language-java">/** * 连线AV通道 * &amp;lt;p&amp;gt; * 1、SecurityMode加密模式会优先使用上次连线成功后的方式,默认为AUTO(2) * 2、AuthType认证方式默认为PASSWORD(0)方式 * &amp;lt;p&amp;gt; * 1、需要先调用{@link #TK_connect} * 2、连线结果使用{@link #TK_registerIOTCListener}进行获取 * * @param avChannel 一般为0 * @see InterfaceCtrl.IOTCListener#receiveChannelInfo */ public abstract void TK_start(int avChannel); /** * 连线AV通道 * &amp;lt;p&amp;gt; * 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)</code></pre> <pre><code class="language-java">示例: 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通道成功 } } });</code></pre> <h4>TK_stop</h4> <pre><code class="language-java">/** * 断线AV通道 * * @param avChannel 一般为0 */ public abstract void TK_stop(int avChannel); /** * RN封装方法 */ @ReactMethod public void RN_stop(int avChannel)</code></pre> <pre><code class="language-java">示例: camera.TK_stop(Camera.DEFAULT_AV_CHANNEL);</code></pre> <h4>TK_setDtls</h4> <pre><code class="language-java">/** * 重置DTLS连接方式为Auto * @param uid * @param avChannel */ public abstract void TK_setDtls(String uid,int avChannel);</code></pre> <h4>TK_changeAuthKey</h4> <pre><code class="language-java">/** * 修改AuthKey,返回修改后的AuthKey * &amp;lt;p&amp;gt; * 需要在{@link #TK_start}成功后进行调用 * * @param avChannel 一般为0 */ public abstract String TK_changeAuthKey(int avChannel);</code></pre> <pre><code class="language-java">示例: Camera camera = new Camera(); camera.TK_connect(uid, authKey); camera.TK_start(Camera.DEFAULT_AV_CHANNEL, password, &amp;quot;admin&amp;quot;, 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); } } });</code></pre> <h4>TK_isSessionConnected</h4> <pre><code class="language-java">/** * Device是否连线 * */ public abstract boolean TK_isSessionConnected(); /** * RN封装方法 */ @ReactMethod public boolean RN_isSessionConnected()</code></pre> <pre><code class="language-java">示例: camera.TK_isSessionConnected();</code></pre> <h4>TK_isChannelConnected</h4> <pre><code class="language-java">/** * AV通道是否连线 * * @param avChannel 一般为0 */ public abstract boolean TK_isChannelConnected(int avChannel); /** * RN封装方法 */ @ReactMethod public boolean RN_isChannelConnected(int avChannel)</code></pre> <pre><code class="language-java">示例: camera.TK_isChannelConnected();</code></pre> <h4>TK_getAVChannelCount</h4> <pre><code class="language-java">/** * 获取已经开启的AV通道数 */ public abstract int TK_getAVChannelCount();</code></pre> <pre><code class="language-java">示例: camera.TK_getAVChannelCount();</code></pre> <h4>TK_getServiceTypeOfChannel</h4> <pre><code class="language-java">/** * 获取相应通道ServiceTYpe * * @param avChannel 一般为0 * @return 返回ServiceTYpe */ public abstract long TK_getServiceTypeOfChannel(int avChannel); /** * RN封装方法 */ @ReactMethod public boolean RN_getAudioInSupportOfChannel(int avChannel)</code></pre> <pre><code class="language-java">示例: camera.TK_getServiceTypeOfChannel(Camera.DEFAULT_AV_CHANNEL);</code></pre> <h2>1.4 视频处理接口</h2> <h3>TK_startShow</h3> <pre><code class="language-java">/** * 开启视频接收和解码 * 内部开始接收视频数据以及开始解码视频数据 * 视频数据的回调:硬解回调receiveFrameDataForMediaCodec 和软解回调receiveFrameData * (onReceiveVideoData回调decodeAfter返回null) * * @param avChannel 一般默认为0 * @param sendStartCommand 是否发送0x1ff * @param runSoftwareDecode 是否软解码(true为软解码 false为硬解码) * @param isDropFrame 是否丢掉P帧 */ public abstract void TK_startShow(int avChannel, boolean sendStartCommand, boolean runSoftwareDecode, boolean isDropFrame); /** * RN封装方法 */ @ReactMethod public void RN_startShow(int avChannel,boolean runSoftwareDecode ,boolean isDropFrame) /** * 开始视频接收和解码YUV数据(onReceiveVideoData回调decodeAfter返回YUV数据) * * @param avChannel 一般默认为0 * @param sendStartCommand 是否发送0x1ff * @param runSoftwareDecode 是否软解码(true为软解码 false为硬解码) * @param isDropFrame 是否软解码(true为软解码 false为硬解码) */ public abstract void TK_startShowWithYUV(int avChannel, boolean sendStartCommand, boolean runSoftwareDecode, boolean isDropFrame); /** * 开始视频接收和解码RGB数据(onReceiveVideoData回调decodeAfter返回RGB数据) * * @param avChannel 一般默认为0 * @paramsendStartCommand 是否发送0x1ff * @param runSoftwareDecode 是否软解码(true为软解码 false为硬解码) * @param isDropFrame 是否软解码(true为软解码 false为硬解码) */ public abstract void TK_startShowWithRGB(int avChannel, boolean sendStartCommand, boolean runSoftwareDecode, boolean isDropFrame);</code></pre> <pre><code class="language-java">示例: camera.TK_startShow(Camera.DEFAULT_AV_CHANNEL, true, false, false);</code></pre> <h3>TK_stopShow</h3> <pre><code class="language-java">/** * 停止所有AV通道的视频接收、解码、播放 */ public abstract void TK_stopShow(); /** * 停止指令通道的视频接收、解码、播放 * @param avChannel 停止显示的Channel * @param sendStopCommand 是否发送0x1ff */ public abstract void TK_stopShow(int avChannel, boolean sendStopCommand); /** * RN封装方法 */ @ReactMethod public void RN_stopShow(int avChannel)</code></pre> <pre><code class="language-java">示例: camera.TK_stopShow();</code></pre> <h3>TK_getVideoCodecId</h3> <pre><code class="language-java">/** * 获取当前视频格式 * &amp;lt;p&amp;gt; * 在出图后,可使用本Api获取视频格式 * &amp;lt;p&amp;gt; * 对应格式如下: * {@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); /** * RN封装方法 */ @ReactMethod public int RN_startSoundToDevice(int avChannel)</code></pre> <pre><code class="language-java">示例: camera.TK_getVideoCodecId(Camera.DEFAULT_AV_CHANNEL);</code></pre> <h2>1.5 音频处理接口</h2> <h3>TK_startSoundToDevice</h3> <pre><code class="language-java"> /** * 开始音频采集、编码、发送 * &amp;lt;p&amp;gt; * 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)</code></pre> <pre><code class="language-java">示例: camera.TK_startSoundToDevice(Camera.DEFAULT_AV_CHANNEL);</code></pre> <h3>TK_stopSoundToDevice</h3> <pre><code class="language-java">/** * 停止音频采集、编码、发送 * * @param avChannel 一般为0 */ public abstract void TK_stopSoundToDevice(int avChannel); /** * RN封装方法 */ @ReactMethod public void RN_stopSoundToDevice(int avChannel)</code></pre> <pre><code class="language-java">示例: camera.TK_stopSoundToDevice(Camera.DEFAULT_AV_CHANNEL);</code></pre> <h3>TK_startSoundToPhone</h3> <pre><code class="language-java">/** * 开始接收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)</code></pre> <pre><code class="language-java">示例: camera.TK_startSoundToPhone(Camera.DEFAULT_AV_CHANNEL);</code></pre> <h3>TK_stopSoundToPhone</h3> <pre><code class="language-java">/** * 停止音频接收、解码、播放 * * @param avChannel 一般为0 */ public abstract void TK_stopSoundToPhone(int avChannel); /** * RN封装方法 */ @ReactMethod public void RN_stopSoundToPhone(int avChannel)</code></pre> <pre><code class="language-java">示例: camera.TK_stopSoundToPhone(Camera.DEFAULT_AV_CHANNEL);</code></pre> <h3>TK_sendAudio</h3> <pre><code class="language-java">/** * 发送回音消除后的音频数据,一般用于第三方回音消除功能 * * @param avChannel 通道号 * @param bytes audio数据 * @param length audio数据长度 */ public abstract void TK_sendAudioData(int avChannel, byte[] bytes, int length);</code></pre> <h3>TK_setAudioSpeakFormats</h3> <pre><code class="language-java">/** * 设置音频对讲格式、采样率等 * &amp;lt;p&amp;gt; * 使用 {@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);</code></pre> <pre><code class="language-java">示例: camera.TK_setAudioSpeakFormats(Camera.DEFAULT_AV_CHANNEL, AVFrame.AUDIO_CODEC_G711A, AVFrame.AUDIO_SAMPLE_8K, AVFrame.AUDIO_CHANNEL_MONO, AVFrame.AUDIO_DATABITS_16);</code></pre> <h3>TK_setAudioInputCodecId</h3> <pre><code class="language-java">/** * 设置音频对讲格式 * &amp;lt;p&amp;gt; * 使用 {@link #TK_startSoundToDevice} 将采用本Api的配置 * &amp;lt;p&amp;gt; * 对应格式如下: * {@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); /** * RN封装方法 */ @ReactMethod public void RN_setAudioInputCodecId(int channel, int audioformat)</code></pre> <pre><code class="language-java">示例: camera.TK_setAudioSpeakFormats(Camera.DEFAULT_AV_CHANNEL, AVFrame.AUDIO_CODEC_G711A, AVFrame.AUDIO_SAMPLE_8K, AVFrame.AUDIO_CHANNEL_MONO, AVFrame.AUDIO_DATABITS_16);</code></pre> <h3>TK_getAudioInputCodecId</h3> <pre><code class="language-java">/** * 获取音频对讲格式 * &amp;lt;p&amp;gt; * 对应格式如下: * {@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); /** * RN封装方法 */ @ReactMethod public int RN_getAudioInputCodecId( int channel)</code></pre> <pre><code class="language-java">示例: camera.TK_getAudioInputCodecId(Camera.DEFAULT_AV_CHANNEL);</code></pre> <h3>TK_getAudioOutputCodecId</h3> <pre><code class="language-java">/** * 获取音频监听格式 * &amp;lt;p&amp;gt; * 对应格式如下: * {@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); /** * RN封装方法 */ @ReactMethod public int RN_getAudioOutputCodecId( int channel) </code></pre> <pre><code class="language-java">示例: camera.TK_getAudioOutputCodecId(Camera.DEFAULT_AV_CHANNEL);</code></pre> <h3>TK_setSoundToPhonePlaySource</h3> <pre><code class="language-java">/** * 设置音频监听的播放源,可以用来适配耳机功能 * &amp;lt;p&amp;gt; * 使用 {@link #TK_startSoundToPhone} 将采用本Api的配置 * * @param audioStreamType 音频播放源,默认为STREAM_VOICE_CALL * {@link android.media.AudioManager#STREAM_VOICE_CALL} * {@link android.media.AudioManager#STREAM_SYSTEM} * {@link android.media.AudioManager#STREAM_RING} * {@link android.media.AudioManager#STREAM_MUSIC} * {@link android.media.AudioManager#STREAM_ALARM} * {@link android.media.AudioManager#STREAM_NOTIFICATION} */ public static void TK_setSoundToPhonePlaySource(int audioStreamType) /** * RN封装方法 */ @ReactMethod public void RN_setSoundToPhonePlaySource( int audioStreamType) </code></pre> <pre><code class="language-java">示例: Camera.TK_setSoundToPhonePlaySource(audioStreamType);</code></pre> <h3>TK_setSoundToPhonePlaySource</h3> <pre><code class="language-java">/** * 设置音频对讲的采集源及采集音频增益,可以用来适配耳机功能 * &amp;lt;p&amp;gt; * 使用 {@link #TK_startSoundToDevice} 将采用本Api的配置 * * @param audioSource 音频采集源,默认为VOICE_COMMUNICATION * {@link android.media.MediaRecorder.AudioSource#MIC} * {@link android.media.MediaRecorder.AudioSource#VOICE_UPLINK} * {@link android.media.MediaRecorder.AudioSource#VOICE_DOWNLINK} * {@link android.media.MediaRecorder.AudioSource#VOICE_CALL} * {@link android.media.MediaRecorder.AudioSource#CAMCORDER} * {@link android.media.MediaRecorder.AudioSource#VOICE_RECOGNITION} * {@link android.media.MediaRecorder.AudioSource#VOICE_COMMUNICATION} * @param audioSpeakGain 音频增益,默认为2f */ public static void TK_setSoundToDeviceCaptureSource(int audioSource, float audioSpeakGain) /** * RN封装方法 */ @ReactMethod public void RN_setSoundToDeviceCaptureSource(int audioSource, float audioSpeakGain) </code></pre> <pre><code class="language-java">示例: Camera.TK_setSoundToDeviceCaptureSource(audioSource,audioSpeakGain);</code></pre> <h2>1.6 录像与截图</h2> <h3>TK_startRecording</h3> <pre><code class="language-java">/** * 开始录像 * 内部开始录像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)</code></pre> <pre><code class="language-java">示例: camera.TK_startRecording(path,true,Camera.DEFAULT_AV_CHANNEL, 0); /** * RN封装方法 */ @ReactMethod public boolean RN_startRecordingForChannel(int channel)</code></pre> <h3>TK_stopRecording</h3> <pre><code class="language-java">/** * 停止录像 */ public abstract boolean TK_stopRecording(int channel); /** * RN封装方法 */ @ReactMethod public boolean RN_stopRecording(int channel)</code></pre> <pre><code class="language-java">示例: camera.TK_stopRecording(Camera.DEFAULT_AV_CHANNEL);</code></pre> <h3>TK_snapshot</h3> <pre><code class="language-java">/** * 视频截图 (截图成功后在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);</code></pre> <pre><code class="language-java">示例: camera.TK_snapshot(Camera.DEFAULT_AV_CHANNEL, path); camera.TK_setSnapshotByCurrentBitmap(Camera.DEFAULT_AV_CHANNEL, path,0);</code></pre> <h2>1.7 指令发送</h2> <h3>1.7.1 P2P</h3> <h4>TK_sendIOCtrlToChannel</h4> <pre><code class="language-java">/** * 发送命令到Device * * @param avChannel 一般为0 * @param type command 类型 * @param data command 数据 */ public abstract void TK_sendIOCtrlToChannel(int avChannel, int type, byte[] data); /** * RN封装方法 */ @ReactMethod public boolean RN_sendIOCtrlToChannel(int avChannel, int type, byte[] data)</code></pre> <pre><code class="language-java">示例: camera.TK_sendIOCtrlToChannel(Camera.DEFAULT_AV_CHANNEL, 0x1ff, new byte[]{0, 0, 0, 0});</code></pre> <h4>TK_sendJsonCtrlToChannel</h4> <pre><code class="language-java">/** * 发送json字串给设备 * * @param avChannel 通道:一般为0 * @param jsonRequest 发送的json字串 * @param jsonResponse 设备回复的字串 * @param timeoutSec 超时时间 */ public abstract void TK_sendJsonIOCtrlToChannel(int avChannel, String jsonRequest, String[] jsonResponse, int timeoutSec);</code></pre> <pre><code class="language-java">示例: camera.TK_sendJsonIOCtrlToChannel(Camera.DEFAULT_AV_CHANNEL, jsonRequest, 2);</code></pre> <h4>TK_removeAllCmd</h4> <pre><code class="language-java">/** * 清除command队列 */ public abstract void TK_removeAllCmd();</code></pre> <pre><code class="language-java">示例: camera.TK_removeAllCmd();</code></pre> <h1>二、VideoMonitor(播放器)</h1> <h2>2.1 Method</h2> <h3>TK_attachCamera</h3> <pre><code class="language-java">/** * 为播放器绑定Camera实例 * * @param camera Camera实例 * @param avChannel 一般为0 */ public void TK_attachCamera(Camera camera, int avChannel)</code></pre> <pre><code class="language-java">示例: videoMonitor.TK_attachCamera(camera, Camera.DEFAULT_AV_CHANNEL);</code></pre> <h3>TK_deattachCamera</h3> <pre><code class="language-java">/** * 播放器解绑Camera */ public void TK_deattachCamera()</code></pre> <pre><code class="language-java">示例: videoMonitor.TK_deattachCamera();</code></pre> <h2>2.2 回调接口</h2> <h3>TK_setMonitorListener</h3> <pre><code class="language-java">/** * 播放器状态监听 */ public void TK_setMonitorListener(InterfaceCtrl.SimpleMonitorListener listener)</code></pre> <pre><code class="language-java">public class SimpleMonitorListener { /** * 播放器的点击事件 */ void onClick(); /** * 播放器已准备好出图 * * @param channel 一般为0 * @param isSoftwareDecode 是否软解码 */ void onReady(int channel, boolean isSoftwareDecode); /** * 播放器缩放的倍数传递给UI层 * * @param scaleLevel 缩放的倍数 */ void onScale(float scaleLevel); }</code></pre> <pre><code class="language-java">示例: videoMonitor.TK_setMonitorListener(new InterfaceCtrl.SimpleMonitorListener());</code></pre>

页面列表

ITEM_HTML