天天看點

dmrJNI

HELLO, need to modify:

#include <jni.h>
#include "PltUPnP.h"
//#include "PltMediaRenderer.h"
#include "dmrJNI.h"
#include "HoperunMediaRenderer.h"

NPT_SET_LOCAL_LOGGER("platinum.media.renderer")

#define LISTEN_TYPE_NEXT	1
 #define LISTEN_TYPE_PAUSE	3
 #define LISTEN_TYPE_PLAY	5
 #define LISTEN_TYPE_PREVIOUS	7
 #define LISTEN_TYPE_SEEK	9
 #define LISTEN_TYPE_STOP	11
 #define LISTEN_TYPE_SETAVTRANSPORTURI	13
 #define LISTEN_TYPE_SETVOLUME	15
 #define LISTEN_TYPE_SETMUTE	17
static PLT_UPnP upnp;
static PLT_DeviceHostReference device;
static bool deviceAdded = false;

// 由于這個是全局存在,是以,同時這裡限制了,一個apk裡面,隻能有一個render,否則就會引起混亂
static jobject player = NULL;
JavaVM*   gJavaVM;
JNIEnv*   gJniEnv;
jclass clazz;
jmethodID postEventMethodID;
//------------
extern "C" {
    JNIEXPORT int JNICALL Java_com_hoperun_renderer_PlayerDNRControl_deviceStart(JNIEnv *env, jobject obj);
    JNIEXPORT int JNICALL Java_com_hoperun_renderer_PlayerDNRControl_deviceStop(JNIEnv *env, jobject obj);
    //JNIEXPORT void JNICALL Java_com_hoperun_renderer_DMR_nativesetup(JNIEnv *env, jobject obj, jobject param);
   JNIEXPORT void JNICALL Java_com_hoperun_renderer_PlayerDNRControl_nativesetup(JNIEnv *env, jobject obj, jobject param);
};

// 其實這個函數就是為了儲存this指針,留其他地方調用
JNIEXPORT  void JNICALL Java_com_hoperun_renderer_PlayerDNRControl_nativesetup(JNIEnv *env, jobject obj, jobject param)
{
	NPT_LogManager::GetDefault().Configure("plist:.level=INFO;.handlers=ConsoleHandler;.ConsoleHandler.colors=off;.ConsoleHandler.filter=42");
	NPT_LOG_INFO("baojinyu .-----nativesetup-----1");	
	player = param;
	//JavaVM*   javaVM;
	env->GetJavaVM(&gJavaVM);
	NPT_LOG_INFO("baojinyu .-----nativesetup-----2");		
    gJniEnv=env;
    clazz = gJniEnv->FindClass("com/hoperun/renderer/PlayerDNRControl");
    NPT_LOG_INFO("baojinyu .-----nativesetup-----3");	
    postEventMethodID = gJniEnv->GetStaticMethodID(clazz, "postEvent", "(Ljava/lang/Object;ILjava/lang/String)V");
    NPT_LOG_INFO("baojinyu .-----nativesetup-----4");	
}

// 1. 添加一個頭檔案,聲明 void notify(int listenerType),并include在本檔案頭部
// 2. 這樣其他函數include這個頭檔案,就可以調用notify這個函數,來向java調用函數
/**
 * listenerType:
 * OnNext---1
 * OnPause---3
 * OnPlay---5
 * OnPrevious---7
 * OnSeek------9
 * OnStop ------11
 * OnSetAVTransportURI----13
 * OnSetVolume------15
 * OnSetMute------17
 * */
void notify(int listenerType,const char* arg1,const char* arg2)
{	
	NPT_LOG_INFO("baojinyu .-----notify-1");
	if(player == NULL) 
	{
		NPT_LOG_INFO("baojinyu-----player == NULL!\n ");
		return;
	}
	
	//jclass clazz = gJniEnv->FindClass("com/hoperun/renderer/PlayerDNRControl");
	
	NPT_LOG_INFO("baojinyu .-----notify-2");
	
	
	//jmethodID postEventMethodID = gJniEnv->GetStaticMethodID(clazz, "postEvent", "(Ljava/lang/Object;ILjava/lang/String)V");
	
	if(postEventMethodID)
	{		
		//将uri轉換後傳給java		
		jstring jarg1 = gJniEnv->NewStringUTF(arg1);
		jstring jarg2 = gJniEnv->NewStringUTF(arg2);
		NPT_LOG_INFO("baojinyu .-----notify-3");
		gJniEnv->CallStaticVoidMethod(clazz, postEventMethodID,player,listenerType,jarg1,jarg2);
		NPT_LOG_INFO("baojinyu .-----notify-4");
	}
}

//dmc調用dmr的時候,調用notify

/**
 * 啟動DMR裝置
 * */
JNIEXPORT int JNICALL Java_com_hoperun_renderer_PlayerDNRControl_deviceStart(JNIEnv *env, jobject obj)
{
	// setup Neptune logging
    NPT_LogManager::GetDefault().Configure("plist:.level=INFO;.handlers=ConsoleHandler;.ConsoleHandler.colors=off;.ConsoleHandler.filter=42");
	NPT_LOG_INFO("baojinyu------------enter start()\n");
	/* for DLNA faster testing */
	PLT_Constants::GetInstance().SetDefaultDeviceLease(300.);
	
	device = new Hoperun_MediaRenderer("Renderer",
                                true,
                                "555666");
    
    upnp.AddDevice(device);
    NPT_LOG_INFO("baojinyu------------upnp.AddDevice success\n");
    
    NPT_CHECK_SEVERE(upnp.Start());
    NPT_LOG_INFO("baojinyu------------NPT_CHECK upnp.Start success\n");
    deviceAdded = true;
    
	return 0;	
}

/**
 * 停止DMR裝置
 * 
 * */

JNIEXPORT int JNICALL Java_com_hoperun_renderer_PlayerDNRControl_deviceStop(JNIEnv *env, jobject obj)
{
	upnp.RemoveDevice(device);
	deviceAdded = false;
	NPT_LOG_INFO("baojinyu-------------------->render stop1.\n");
	upnp.Stop();	
	NPT_LOG_INFO("baojinyu-------------------->render stop2.\n");
	return 0;	
}