---
title: 封装jni接口
description: "将视频流引擎客户端提供的C++接口封装成jni接口函数。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/2300/armnative/kunpengcpsvideo_16_0014.html
sourcePath: /source/zh/kunpengboostkithistory/2300/armnative/kunpengcpsvideo_16_0014.html
indexId: 1b6e9e327a53d5bf355320a468c48155531c689ec191cc3a06f457909388920577
---
# 封装jni接口

#### 场景介绍

将视频流引擎客户端提供的C++接口封装成jni接口函数。

将通信模块的设置IP地址和端口封装成jni接口函数。


#### 开发流程

1. 封装视频流引擎客户端C++接口函数。
2. 将通信模块的设置IP地址和端口封装成jni接口函数。
3. 新建一个视频流引擎客户端jni回调对象。


#### 编码实例

```
// 封装视频流引擎客户端C++接口函数
#define VIDEO_JNI(func) Java_com_huawei_videostream_cloudphoneui_engine_VideoWrapper_##func
JNIEXPORT jint JNICALL VIDEO_JNI(initialize)(JNIEnv* env, jclass cls);
JNIEXPORT jint JNICALL VIDEO_JNI(start)(JNIEnv* env, jclass cls, jobject surface, jint width, jint height, jfloat densityDpi);
JNIEXPORT void JNICALL VIDEO_JNI(stop)(JNIEnv* env, jclass cls);
JNIEXPORT jstring JNICALL VIDEO_JNI(getStatistics)(JNIEnv* env, jclass cls);
JNIEXPORT jint JNICALL VIDEO_JNI(recvData)(JNIEnv* env, jclass cls, jbyte type, jbyteArray jData, jint length);
// 以下为发送函数封装接口，用户可以根据需求封装不同的接口
JNIEXPORT jboolean JNICALL VIDEO_JNI(sendTouchEvent)(JNIEnv* env, jclass cls, jbyteArray jData, jint length);
JNIEXPORT jboolean JNICALL VIDEO_JNI(sendKeyEvent)(JNIEnv* env, jclass cls,jbyteArray jData, jint length);
// 封装视频流引擎回调事件
#define CB_JNI(func) Java_com_huawei_videostream_cloudphoneui_JniCallBack_##func
JNIEXPORT void JNICALL CB_JNI(setNativeCallback)(JNIEnv* env, jobject obj);
// 封装通信模块接口
#define NET_CONFIG_JNI(func) Java_com_huawei_videostream_cloudphoneui_NetConfig_##func
JNIEXPORT jboolean JNICALL NET_CONFIG_JNI(initialize)(JNIEnv* env, jclass cls);
// 设置通信模块的IP地址和端口
JNIEXPORT jboolean JNICALL NET_CONFIG_JNI(setNetConfig)(JNIEnv* env, jclass cls, jstring ip, jint port, jint type);
```
