解决方案 »
- android刷机后用adb连接,显示有root权限,而手机端却无法获取Root权限
- JNI 多次调用CallStaticVoidMethod 死机 ,请教!
- 怎么调用citrix receiver~~~~~
- 请好心人发一个旧版本的android sdk
- Paint.setTextSize与TextView.setTextSize传入的单位一致否?
- 我的ubuntu上常用快捷键不好用
- android菜鸟求教eclipse创建avd问题
- 安卓新手开发问题,前辈SOS
- 如何在android上实现PDF的下划线、批注功能???
- android 修改数据库数据后listview刷新cursor不移动
- 关于Android的书籍
- Android 1.6 apidemos 报好多错
.c文件开始定义全局的变量:
int portNum=NULL;//端口
char ipAdress=NULL;//IP地址
char u_name=NULL;//摄像头用户名
char pwd=NULL;//密码
.c里面调用如下:
JNIEXPORT jint JNICALL Java_com_handlerun_view_VView_LoginCam
(JNIEnv *env,jobject obj,jstring username,jstring password)
{ pwd =(char*)(*env)->GetStringUTFChars(env,password, NULL);
u_name=(char*)(*env)->GetStringUTFChars(env,username, NULL);
/**
char um="admin";
char pd="123456";
int a=strcmp(um,u_name);
int b=strcmp(pd,password);
if(a==0&&b==0)
{
return 0;
}else{
return 1;
}
*/
}
顺便说下传IP和prot端口的函数Connectiondvs,(这个函数也在.c文件里面)代码如下:
JNIEXPORT jint JNICALL Java_com_handlerun_view_VView_Connectiondvs
(JNIEnv *env, jobject obj, jstring ip, jint port)
{
ipAdress=(char*)(*env)->GetStringUTFChars(env,ip, NULL); portNum=++port;//HTTP端口加1是tcp端口 return 1;
}
在java层调用这个Connectiondvs不报错,但是LoginCam()就报错。错误我会在下面给出,就是空指针。
package com.handlerun.view;import java.nio.ByteBuffer;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Bitmap.Config;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;public class H264Android extends Activity { VView vv;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
vv = new VView(this);
setContentView(vv);
}
// Menu item Ids
public static final int PLAY_ID = Menu.FIRST;
public static final int EXIT_ID = Menu.FIRST + 1; @Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
menu.add(0, PLAY_ID, 0, R.string.play);
menu.add(0, EXIT_ID, 1, R.string.exit); return true;
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case PLAY_ID:
{
String file = "/sdcard/free.264";
vv.PlayVideo(file);
return true;
}
case EXIT_ID:
{
finish();
return true;
}
}
return super.onOptionsItemSelected(item);
}}class VView extends View implements Runnable{
Bitmap mBitQQ = null;
Paint mPaint = null;
Bitmap mSCBitmap = null;
Matrix matrix = new Matrix();
byte [] mPixel = new byte[288*352*2];
ByteBuffer buffer = ByteBuffer.wrap( mPixel );
Bitmap VideoBit = Bitmap.createBitmap(352, 288, Config.RGB_565);
VView v = this;
int mTrans=0x0F0F0F0F;
public native int InitDecoder();
public native int UninitDecoder();
public native int DecoderNal(byte[] in, int insize, byte[] out);
public native void LiveVideo(byte[] out);
public native int getSequence(byte[] out);
public native int Connectiondvs(String ip,int port);
//public native int Login(String username,String password);
public native int LoginCam(String username,String password);
public native int StopLive();
static
{
System.loadLibrary("H264Android");
}
/**
* 构造函数
*/
public VView(Context context) {
super(context);
setFocusable(true);
int i = mPixel.length;
for(i=0; i<mPixel.length; i++)
{
mPixel[i]=(byte)0x00;
}
}
/**
* 播放视频
* @param file
*/
public void PlayVideo(String file)
{
String uName="admin";
String pWd="123456";
int connect=Connectiondvs("192.168.1.170",5014);
System.out.println("connect+++"+connect);
int lo=LoginCam(uName, pWd);
System.out.println("login+++"+lo);
if(lo==1&&connect==1){
new Thread(this).start();
new Thread(new Video()).start();
}
}
@Override protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
VideoBit.copyPixelsFromBuffer(buffer);//makeBuffer(data565, N));
canvas.drawBitmap(VideoBit, 0, 0, null);
} public void updateUI()
{
postInvalidate();
} public void run()
{
byte[] index ={0};
int getIndex = 0;
int beforeIndex = 0;
while (!Thread.currentThread().isInterrupted())
{
getIndex = getSequence(index);
//System.out.println("getIndex++++"+getIndex);
if(getIndex!=0&&getIndex!=beforeIndex)
{
System.out.println(" #################################### ");
//运行测试内容
long t1= System.currentTimeMillis();
updateUI();
long t2= System.currentTimeMillis();
// System.out.println("******** tiem " + (t2-t1));
beforeIndex = getIndex ;
}
}
}
public void sayHello()
{
System.out.println("****************#####################################################");
}
class Video implements Runnable{
public void run() {
// TODO Auto-generated method stub
LiveVideo(mPixel);
}
}
}