Files
gb28181/GB28181Device/android/native.cpp
2024-12-15 20:42:32 +08:00

91 lines
3.9 KiB
C++

#include "sys_inc.h"
#include "gb28181.h"
#include "live_video.h"
#include "live_audio.h"
#include "gb28181_cfg.h"
#include "native.h"
extern GB28181_CFG g_gb28181_cfg;
JNIEXPORT jint JNICALL Java_com_happytime_lcc_Gb28181Device_gb28181Start(JNIEnv * env, jclass this, jstring server_ip, jint server_port, jstring server_id, jstring server_domain, jstring password, jstring device_id, jstring device_name, jstring channel_id, jstring channel_name, jint protocol, jint reg_expires, jint heartbeat_interval, jint heartbeat_count, jint log_enable, jint log_level)
{
const char * p_server_ip = (*env)->GetStringUTFChars(env, server_ip, 0);
const char * p_server_id = (*env)->GetStringUTFChars(env, server_id, 0);
const char * p_server_domain = (*env)->GetStringUTFChars(env, server_domain, 0);
const char * p_password = (*env)->GetStringUTFChars(env, password, 0);
const char * p_device_id = (*env)->GetStringUTFChars(env, device_id, 0);
const char * p_device_name = (*env)->GetStringUTFChars(env, device_name, 0);
const char * p_channel_id = (*env)->GetStringUTFChars(env, channel_id, 0);
const char * p_channel_name = (*env)->GetStringUTFChars(env, channel_name, 0);
memset(&g_gb28181_cfg, 0, sizeof(g_gb28181_cfg));
strncpy(g_gb28181_cfg.server_ip, p_server_ip, sizeof(g_gb28181_cfg.server_ip)-1);
strncpy(g_gb28181_cfg.server_id, p_server_id, sizeof(g_gb28181_cfg.server_id)-1);
strncpy(g_gb28181_cfg.server_domain, p_server_domain, sizeof(g_gb28181_cfg.server_domain)-1);
strncpy(g_gb28181_cfg.password, p_password, sizeof(g_gb28181_cfg.password)-1);
strncpy(g_gb28181_cfg.device_id, p_device_id, sizeof(g_gb28181_cfg.device_id)-1);
strncpy(g_gb28181_cfg.device_name, p_device_name, sizeof(g_gb28181_cfg.device_name)-1);
g_gb28181_cfg.channel_nums = 1;
strncpy(g_gb28181_cfg.channels[0].cid, p_channel_id, sizeof(g_gb28181_cfg.channels[0].cid)-1);
strncpy(g_gb28181_cfg.channels[0].cname, p_channel_name, sizeof(g_gb28181_cfg.channels[0].cname)-1);
strcpy(g_gb28181_cfg.channels[0].media_url, "live");
g_gb28181_cfg.server_port = server_port;
g_gb28181_cfg.local_port = 0;
g_gb28181_cfg.protocol = protocol;
g_gb28181_cfg.media_protocol = 1;
g_gb28181_cfg.reg_expires = reg_expires;
g_gb28181_cfg.heartbeat_interval = heartbeat_interval;
g_gb28181_cfg.heartbeat_count = heartbeat_count;
g_gb28181_cfg.log_enable = log_enable;
g_gb28181_cfg.log_level = log_level;
g_gb28181_cfg.media_base_port = 19000;
if (g_gb28181_cfg.log_enable)
{
log_init("/sdcard/gb28181device.log");
log_set_level(g_gb28181_cfg.log_level);
}
else
{
log_close();
}
int ret = gb28181_start1();
(*env)->ReleaseStringChars(env, server_ip, p_server_ip);
(*env)->ReleaseStringChars(env, server_id, p_server_id);
(*env)->ReleaseStringChars(env, server_domain, p_server_domain);
(*env)->ReleaseStringChars(env, password, p_password);
(*env)->ReleaseStringChars(env, device_id, p_device_id);
(*env)->ReleaseStringChars(env, device_name, p_device_name);
(*env)->ReleaseStringChars(env, channel_id, p_channel_id);
(*env)->ReleaseStringChars(env, channel_name, p_channel_name);
return ret;
}
JNIEXPORT void JNICALL Java_com_happytime_lcc_Gb28181Device_gb28181Stop(JNIEnv * env, jclass this)
{
gb28181_stop();
}
JNIEXPORT void JNICALL Java_com_happytime_lcc_Gb28181Device_sendVideoData(JNIEnv * env, jclass this, jint devid, jbyteArray data, jint len)
{
jbyte * p_data = (*env)->GetByteArrayElements(env, data, NULL);
media_live_put_video(devid, p_data, len);
(*env)->ReleaseByteArrayElements(env, data, p_data, 0);
}
JNIEXPORT void JNICALL Java_com_happytime_lcc_Gb28181Device_sendAudioData(JNIEnv * env, jclass this, jint devid, jbyteArray data, jint len)
{
jbyte * p_data = (*env)->GetByteArrayElements(env, data, NULL);
media_live_put_audio(devid, p_data, len, 0);
(*env)->ReleaseByteArrayElements(env, data, p_data, 0);
}