海康sdk远程门禁_海康威视远程监控Android端SDK调用示例

时间:2025-02-14 18:17:22

上一篇文章写了《海康威视远程监控Android端APP开发初探》,闲来又整理了一下demo,现在把demo工程的源码发上来,大家一起学习:

工程源文件三个:

1、(监控点信息类)

2、(继承自SurfaceView,用来播放视频并显示)

3、VideoShowActivity(主activity)

布局文件一个:

activity_main.xml

中只需定义一项网络访问的权限:

下面是源代码

1、

package com.;

public class MonitorCameraInfo {

public String serverip = "";

public int serverport = 0;

public String username = "";

public String userpwd = "";

public int channel = 0;

public String describe = "";

public MonitorCameraInfo() {

}

}

2、

package com.;

import .;

import ;

import ;

import ;

import ;

import ;

import ;

import ;

import .NET_DVR_CLIENTINFO;

import .NET_DVR_DEVICEINFO_V30;

import ;

public class Sjrs08SurfaceView extends SurfaceView implements

{

private HCNetSDK videoCtr; //网络库sdk

private Player myPlayer = null; //播放库sdk

private int playPort = -1; //播放端口

public boolean playFlag = false; //播放标志

private int userId = -1; //登录帐号id

private MonitorCameraInfo cameraInfo = null; //监控点信息

private SurfaceHolder holder = null;

public Sjrs08SurfaceView(Context paramContext) {

super(paramContext);

initSurfaceView();

}

public Sjrs08SurfaceView(Context paramContext,

AttributeSet paramAttributeSet) {

super(paramContext, paramAttributeSet);

initSurfaceView();

}

public Sjrs08SurfaceView(Context paramContext,

AttributeSet paramAttributeSet, int paramInt) {

super(paramContext, paramAttributeSet);

initSurfaceView();

}

private void initSurfaceView() {

getHolder().addCallback(this);

}

public boolean onDown(MotionEvent paramMotionEvent) {

return false;

}

public boolean onFling(MotionEvent paramMotionEvent1,

MotionEvent paramMotionEvent2, float paramFloat1, float paramFloat2) {

return false;

}

public void onLongPress(MotionEvent paramMotionEvent) {

}

public boolean onScroll(MotionEvent paramMotionEvent1,

MotionEvent paramMotionEvent2, float paramFloat1, float paramFloat2) {

return false;

}

public void onShowPress(MotionEvent paramMotionEvent) {

}

public boolean onSingleTapUp(MotionEvent paramMotionEvent) {

return false;

}

public void surfaceChanged(SurfaceHolder paramSurfaceHolder, int paramInt1,

int paramInt2, int paramInt3) {

}

public void surfaceCreated(SurfaceHolder paramSurfaceHolder) {

holder = ();

}

public void surfaceDestroyed(SurfaceHolder paramSurfaceHolder) {

}

public void setMonitorInfo(MonitorCameraInfo setMonitorInfo) {

= setMonitorInfo;

}

/**

* 时间如水2013-7-10

* 功能:暂定播放

* flag 1/暂停 0/恢复

*/

public void pausePaly(int flag) {

(playPort, flag);

}

public void stopPlay() {

try {

playFlag = false;

videoCtr.NET_DVR_StopRealPlay(playPort);

videoCtr.NET_DVR_Logout_V30(userId);

userId = -1;

videoCtr.NET_DVR_Cleanup();

if (myPlayer != null) {

(playPort);

(playPort);

(playPort);

playPort = -1;

destroyDrawingCache();

}

} catch (Exception e) {

();

} finally {

}

}

/**

* 时间如水2013-7-10

* 功能:开始实时预览*/

public void startPlay() {

try {

// 实例化播放API

myPlayer = ();

// 实例化海康威视android sdk

videoCtr = new HCNetSDK();

videoCtr.NET_DVR_Init(); //初始化海康威视android sdk

videoCtr.NET_DVR_SetExceptionCallBack(mExceptionCallBack); //设置错误回掉函数

// 设置连接超时时长

videoCtr.NET_DVR_SetConnectTime(60000);

playPort = (); //获取空闲播放端口

NET_DVR_DEVICEINFO_V30 deviceInfo = new NET_DVR_DEVICEINFO_V30();

// 登录服务器

userId = videoCtr.NET_DVR_Login_V30(,

, ,

, deviceInfo);

("下面是设备信息************************");

("通道开始=" + );

("通道个数=" + );

("设备类型=" + );

("ip通道个数=" + );

byte[] sbbyte = ;

String sNo = "";

for (int i = 0; i < ; i++) {

sNo += (sbbyte[i]);

}

("设备序列号=" + sNo);

("************************");

NET_DVR_CLIENTINFO clientInfo = new NET_DVR_CLIENTINFO();

= ;

= 0x80000000; // 子码流,保证图像实时性

= null;

int playFlag = videoCtr.NET_DVR_RealPlay_V30(userId, clientInfo,

mRealPlayCallBack, false);

("playFlag=" + playFlag);

("GetLastError="

+ videoCtr.NET_DVR_GetLastError());

} catch (Exception e) {

();

stopPlay();

}

}

private ExceptionCallBack mExceptionCallBack = new ExceptionCallBack() {

@Override

public void fExceptionCallBack(int arg0, int arg1, int arg2) {

// TODO Auto-generated method stub

("异常回掉函数运行!");

}

};

private RealPlayCallBack mRealPlayCallBack = new RealPlayCallBack() {

@Override

public void fRealDataCallBack(int lRealHandle, int dataType,

byte[] paramArrayOfByte, int byteLen) {

// TODO Auto-generated method stub

// ("playFlag=" + playFlag + ",dataType=" +

// dataType + ",大小=" + byteLen + "字节,playPort=" + playPort);

if (playPort == -1)

return;

switch (dataType) {

case 1: // 头数据

if ((playPort, paramArrayOfByte, byteLen,

1024 * 1024)) {

if ((playPort, 1)) {

if ((playPort, holder)) {

playFlag = true;

} else {

playError(3);

}

} else {

playError(2);

}

} else {

playError(1);

}

break;

case 4:

if (playFlag

&& (playPort, paramArrayOfByte,

byteLen)) {

playFlag = true;

} else {

playError(4);

playFlag = false;

}

}

}

};

private void playError(int step) {

switch (step) {

case 1:

("openStream error,step=" + step);

break;

case 2:

("setStreamOpenMode error,step=" + step);

break;

case 3:

("play error,step=" + step);

break;

case 4:

("inputData error,step=" + step);

break;

}

stopPlay();

}

}

3、VideoShowActivity

package com.;

import ;

import ;

public class VideoShowActivity extends Activity {

Sjrs08SurfaceView nowSjrs08SurfaceView; //SurfaceView对象,用来显示视频

@Override

protected void onCreate(Bundle savedInstanceState) {

(savedInstanceState);

setContentView(.activity_main);

nowSjrs08SurfaceView = (Sjrs08SurfaceView) findViewById(.video_0);

}

@Override

protected void onResume() {

();

if (!) { //如果没有在播放的话

MonitorCameraInfo cameraInfo = new MonitorCameraInfo();

= "192.168.0.100";

= 8000;

= "ceshiadmin";

= "123456";

= 1;

= "测试点";

(cameraInfo);

(); //开始实时预览

}

}

@Override

protected void onPause() {

();

if () {

(); //停止实时预览

}

}

}

4、activity_main.xml

xmlns:tools="/tools"

android:layout_width="match_parent"

android:layout_height="match_parent" >

android:

android:layout_width="400dp"

android:layout_height="300dp"

android:layout_alignParentLeft="true" />