#include #include #include "baresip/BaresipObj.h" JavaListener *javaListener; BaresipObj *baresipObj; JavaVM *jvm; JNIEXPORT jint JNI_OnLoad(JavaVM *vm,void *reserved){ LOGD("JNI_Onload"); jvm =vm; return JNI_VERSION_1_6; } //// extern "C" JNIEXPORT jstring JNICALL Java_lilin_com_MyCApi_stringFromJNI( JNIEnv *env, jobject /* this */) { std::string hello = "Hello from C++1"; return env->NewStringUTF(hello.c_str()); }extern "C" JNIEXPORT void JNICALL Java_lilin_com_MyCApi_bareStart(JNIEnv *env, jobject instance) { if( javaListener== nullptr ){ javaListener = new JavaListener(jvm,env,env->NewGlobalRef(instance) ); } baresipObj = new BaresipObj(javaListener); baresipObj->startbaresip(); }extern "C" JNIEXPORT void JNICALL Java_lilin_com_MyCApi_bareStop(JNIEnv *env, jobject instance) { LOGE("end.."); if(baresipObj!= nullptr){ baresipObj->stopbaresip(); } } extern "C" JNIEXPORT void JNICALL Java_lilin_com_MyCApi_barejie(JNIEnv *env, jobject instance) { LOGE("jieting"); if(baresipObj!= nullptr&&baresipObj->baresipstate==1){ baresipObj->baresipjie(); } } extern "C" JNIEXPORT void JNICALL Java_lilin_com_MyCApi_baregua(JNIEnv *env, jobject instance) { if(baresipObj!= nullptr&&baresipObj->baresipstate==1){ baresipObj->baresipgua(); } } extern "C" JNIEXPORT void JNICALL Java_lilin_com_MyCApi_barecall(JNIEnv *env, jobject instance, jstring num_) { const char *sipadr = env->GetStringUTFChars(num_, 0); if(baresipObj!= nullptr&&baresipObj->baresipstate==1){ int err=baresipObj->baresipcall(sipadr); LOGE("呼叫return=%d",err); } env->ReleaseStringUTFChars(num_, sipadr); } extern "C" JNIEXPORT void JNICALL Java_lilin_com_MyCApi_barecallv(JNIEnv *env, jobject instance, jstring num_) { const char *sipadr = env->GetStringUTFChars(num_, 0); if(baresipObj!= nullptr&&baresipObj->baresipstate==1){ int err=baresipObj->baresipcallv(sipadr); LOGE("呼叫vreturn=%d",err); } env->ReleaseStringUTFChars(num_, sipadr); } extern "C" JNIEXPORT jint JNICALL Java_lilin_com_MyCApi_bareIsReg(JNIEnv *env, jobject instance) { int state=0; if(baresipObj!= nullptr&&baresipObj->baresipstate==1){ state=baresipObj->bareisreg(); } return state; } extern "C" JNIEXPORT void JNICALL Java_lilin_com_MyCApi_baresendvdata(JNIEnv *env, jobject instance, jbyteArray data_,jint w, jint h) { jbyte *bytes = env->GetByteArrayElements(data_, NULL); if(baresipObj->frameQueue!=NULL) { static int nexttps = 0; AVFrame *avFrame = av_frame_alloc(); int picture_size = av_image_get_buffer_size(AV_PIX_FMT_YUV420P, w, h, 1); uint8_t *buffers = (uint8_t *) av_malloc(picture_size); av_image_fill_arrays(avFrame->data, avFrame->linesize, buffers, AV_PIX_FMT_YUV420P, w, h, 1); int size = w * h; memcpy(avFrame->data[0], bytes, size); //Y for (int j = 0; j < size / 4; j++) { *(avFrame->data[2] + j) = *(bytes + size + j * 2); // V *(avFrame->data[1] + j) = *(bytes + size + j * 2 + 1); //U } //raote avFrame->format = AV_PIX_FMT_YUV420P; avFrame->width=w;avFrame->height=h; if (nexttps == 0) { avFrame->pts = 0; } else { avFrame->pts = nexttps; } nexttps = avFrame->pts + 1000000LL * 1 / 25; { AVRational base; base.num = 1; base.den = 1000000LL;//帧率 AVRational base1; base1.num = 1; base1.den = 25;//帧率 //转换回去去压缩器的时基 avFrame->pts = av_rescale_q(avFrame->pts, base, base1); } //LOGE("====%lld", avFrame->pts); baresipObj->frameQueue->putAvFrame(avFrame); } env->ReleaseByteArrayElements(data_, bytes, 0); } extern "C" JNIEXPORT void JNICALL Java_lilin_com_MyCApi_barereg(JNIEnv *env, jobject instance, jstring sipaddress_) { const char *sipaddress = env->GetStringUTFChars(sipaddress_, 0); if(baresipObj!= nullptr&&baresipObj->baresipstate==1){ baresipObj->baresipreg( sipaddress ); } env->ReleaseStringUTFChars(sipaddress_, sipaddress); }