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

工程源文件三个:

1、MonitorCameraInfo.java(监控点信息类)

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

3、VideoShowActivity(主activity)

布局文件一个:

activity_main.xml

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

下面是源代码:

1、MonitorCameraInfo.java

package com.sjrs08.HCNetSDK.Player.demo;

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、Sjrs08SurfaceView.java

package com.sjrs08.HCNetSDK.Player.demo;

import org.MediaPlayer.PlayM4.Player;

import android.content.Context;

import android.util.AttributeSet;

import android.view.MotionEvent;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

import com.hikvision.netsdk.ExceptionCallBack;

import com.hikvision.netsdk.HCNetSDK;

import com.hikvision.netsdk.NET_DVR_CLIENTINFO;

import com.hikvision.netsdk.NET_DVR_DEVICEINFO_V30;

import com.hikvision.netsdk.RealPlayCallBack;

public class Sjrs08SurfaceView extends SurfaceView implements

SurfaceHolder.Callback {

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 = this.getHolder();

}

public void surfaceDestroyed(SurfaceHolder paramSurfaceHolder) {

}

public void setMonitorInfo(MonitorCameraInfo setMonitorInfo) {

this.cameraInfo = setMonitorInfo;

}

/**

* 时间如水2013-7-10

* 功能:暂定播放

* flag 1/暂停 0/恢复

*/

public void pausePaly(int flag) {

myPlayer.pause(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) {

myPlayer.stop(playPort);

myPlayer.closeStream(playPort);

myPlayer.freePort(playPort);

playPort = -1;

destroyDrawingCache();

}

} catch (Exception e) {

e.printStackTrace();

} finally {

}

}

/**

* 时间如水2013-7-10

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

public void startPlay() {

try {

// 实例化播放API

myPlayer = Player.getInstance();

// 实例化海康威视android sdk

videoCtr = new HCNetSDK();

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

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

// 设置连接超时时长

videoCtr.NET_DVR_SetConnectTime(60000);

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

NET_DVR_DEVICEINFO_V30 deviceInfo = new NET_DVR_DEVICEINFO_V30();

// 登录服务器

userId = videoCtr.NET_DVR_Login_V30(cameraInfo.serverip,

cameraInfo.serverport, cameraInfo.username,

cameraInfo.userpwd, deviceInfo);

System.out.println("下面是设备信息************************");

System.out.println("通道开始=" + deviceInfo.byStartChan);

System.out.println("通道个数=" + deviceInfo.byChanNum);

System.out.println("设备类型=" + deviceInfo.byDVRType);

System.out.println("ip通道个数=" + deviceInfo.byIPChanNum);

byte[] sbbyte = deviceInfo.sSerialNumber;

String sNo = "";

for (int i = 0; i < sbbyte.length; i++) {

sNo += String.valueOf(sbbyte[i]);

}

System.out.println("设备序列号=" + sNo);

System.out.println("************************");

NET_DVR_CLIENTINFO clientInfo = new NET_DVR_CLIENTINFO();

clientInfo.lChannel = cameraInfo.channel;

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

clientInfo.sMultiCastIP = null;

int playFlag = videoCtr.NET_DVR_RealPlay_V30(userId, clientInfo,

mRealPlayCallBack, false);

System.out.println("playFlag=" + playFlag);

System.out.println("GetLastError="

+ videoCtr.NET_DVR_GetLastError());

} catch (Exception e) {

e.printStackTrace();

stopPlay();

}

}

private ExceptionCallBack mExceptionCallBack = new ExceptionCallBack() {

@Override

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

// TODO Auto-generated method stub

System.out.println("异常回掉函数运行!");

}

};

private RealPlayCallBack mRealPlayCallBack = new RealPlayCallBack() {

@Override

public void fRealDataCallBack(int lRealHandle, int dataType,

byte[] paramArrayOfByte, int byteLen) {

// TODO Auto-generated method stub

// System.out.println("playFlag=" + playFlag + ",dataType=" +

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

if (playPort == -1)

return;

switch (dataType) {

case 1: // 头数据

if (myPlayer.openStream(playPort, paramArrayOfByte, byteLen,

1024 * 1024)) {

if (myPlayer.setStreamOpenMode(playPort, 1)) {

if (myPlayer.play(playPort, holder)) {

playFlag = true;

} else {

playError(3);

}

} else {

playError(2);

}

} else {

playError(1);

}

break;

case 4:

if (playFlag

&& myPlayer.inputData(playPort, paramArrayOfByte,

byteLen)) {

playFlag = true;

} else {

playError(4);

playFlag = false;

}

}

}

};

private void playError(int step) {

switch (step) {

case 1:

System.out.println("openStream error,step=" + step);

break;

case 2:

System.out.println("setStreamOpenMode error,step=" + step);

break;

case 3:

System.out.println("play error,step=" + step);

break;

case 4:

System.out.println("inputData error,step=" + step);

break;

}

stopPlay();

}

}

3、VideoShowActivity

package com.sjrs08.HCNetSDK.Player.demo;

import android.app.Activity;

import android.os.Bundle;

public class VideoShowActivity extends Activity {

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

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

nowSjrs08SurfaceView = (Sjrs08SurfaceView) findViewById(R.id.video_0);

}

@Override

protected void onResume() {

super.onResume();

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

MonitorCameraInfo cameraInfo = new MonitorCameraInfo();

cameraInfo.serverip = "192.168.0.100";

cameraInfo.serverport = 8000;

cameraInfo.username = "ceshiadmin";

cameraInfo.userpwd = "123456";

cameraInfo.channel = 1;

cameraInfo.describe = "测试点";

nowSjrs08SurfaceView.setMonitorInfo(cameraInfo);

nowSjrs08SurfaceView.startPlay(); //开始实时预览

}

}

@Override

protected void onPause() {

super.onPause();

if (nowSjrs08SurfaceView.playFlag) {

nowSjrs08SurfaceView.stopPlay(); //停止实时预览

}

}

}

4、activity_main.xml

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent" >

android:id="@+id/video_0"

android:layout_width="400dp"

android:layout_height="300dp"

android:layout_alignParentLeft="true" />

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

  1. micropython驱动lcd触摸屏_Micropython之萝卜狗远程门禁控制系统

    原标题:Micropython之萝卜狗远程门禁控制系统 * 本文作者:_橙子 ゝ,本文属FreeBuf原创奖励计划,未经许可禁止转载 当代社会,我们进公司需要门禁卡,出入小区需要门禁卡,门禁系统又称出 ...

  2. 51单片机ESP8266WIFI远程门禁密码锁可修改密码APP开锁查看密码

    实践制作DIY- GC003-WIFI远程门禁密码 一.功能说明:   基于51单片机设计-WIFI远程门禁密码锁 二.功能介绍:  1.基于STC89C52RC,有一个LCD1602显示器显示信息, ...

  3. Python 调用中控门禁并包装成webservice供移动设备调用。

    前段时间做了个小试验,用Python 调用中控门禁并包装成webservice供移动设备调用. 移动端用的是泛微的OA企业微信端. 实现手机远程开门效果,拿着手机,走到哪,哪的门就自动开了,很屌的样子 ...

  4. python人脸识别门禁_树莓派人脸识别门禁系统图文教程

    前面发布了人脸识别门禁系统的系列视频教程,现在补上图文版,方便查看指令和代码,这篇文章也是对之前的文章的更新与完善. 本系统中树莓派调用百度智能云人脸识别API,实现人脸识别门禁,主要分为三个模块来实 ...

  5. python人脸识别门禁系统毕设_树莓派人脸识别门禁系统代码以及代码分析——opencv拍照调用FACE++处理...

    树莓派人脸识别门禁系统的总体设计 硬件包括:树莓派3B.电源模块.转5V降压模块.触摸感应传感器模块.声光报警模块和驱动模块. 由此设计出的人脸识别门禁系统总体结构框图如下: 总体结构框图 程序运行时 ...

  6. 海康网络摄像头忘记密码_不要忘记网络性能

    海康网络摄像头忘记密码 Amazon released a famous statement in the late 2000s stating that every hundred millisec ...

  7. micropython远程升级_Micropython之萝卜狗远程门禁控制系统

    严正声明:本文仅限于技术讨论与分享,严禁用于非法用途 当代社会,我们进公司需要门禁卡,出入小区需要门禁卡,门禁系统又称出入管理控制系统(ACCESS CONTROL SYSTEM), 是一种管理人员进 ...

  8. 人脸识别门禁_门禁人脸识别系统铜陵县门禁人脸识别系统哪家好

    门禁人脸识别系统铜陵县门禁人脸识别系统哪家好 工地 1.建筑工地使用人脸识别门禁考勤机解决问题:工人刷脸出入,刷脸考勤,杜绝虚假考勤,提高考勤效率,工人工种分组,实名制管理. 2.人脸识别测温一体机用 ...

  9. 人脸识别门禁_小区人脸识别门禁或取代传统门禁刷卡方式

    可以说,社区是一个人口聚集的小型社会.首先社区的人流量很大,进出是十分频繁.其次,社区的大门以及各处进出口是业主与访客.外来人员等进进出出最关键的通道.因此,每个社区都会有一套成型的门禁系统,常见的是 ...

  10. java tcp门禁_门禁控制器的TCP/IP协议功能

    原标题:门禁控制器的TCP/IP协议功能 门禁控制器的TCP/IP协议功能 Linux支持多种不同的网络协议,TCP/IP是Linux系统中最健壮.速度最快和最可靠的部分.TCP/IP协议包括了各个层 ...

最新文章

  1. 用oracle存储过程取一张表里的数据放入其他表 游标取值
  2. linux 发行版 suse opensuse 区别
  3. Servlet学习一
  4. 微软.Net Core 3.0 预览版7发布:大幅减少 SDK 空间大小
  5. 互换性与技术测量教材pdf_【检验】临床生物化学检验技术(第6版)人民卫生出版社【电子教材PDF】【人卫教材电子版】...
  6. 家长必看 父母须知孩子社交圈九要点(组图)
  7. OpenJudge NOI 1.5 37:雇佣兵
  8. Magento教程 1:免费购物车系统,轻松建立Magento第一步!
  9. 男人有钱还是没钱,只需要关注他这三点,就明白了
  10. 数据建模的的参考工具EZDML
  11. DB2 SqlCode对照表
  12. python在经济学的应用_『经济学在读研究生学习python可以用来做什么』python经济应用教程...
  13. 计算机固态硬盘装系统,固态硬盘如何装系统
  14. 投影仪怎么看电视直播?安装这些软件带你共享2022世界杯盛宴
  15. 订阅号如何获取用户openid
  16. HEVC码率控制代码分析
  17. Android studio 设置豆绿色
  18. Latex-加通讯作者的小信封标记
  19. Linux常用过滤命令之grep命令的使用
  20. ios设备苹果手机 js时间字符串转时间戳后显示错误NAN

热门文章

  1. Win10 微软拼音添加小鹤双拼
  2. DHCP配置实验(包括接口模式、全局模式和中继模式)
  3. 光猫超级帐号密码,重置光猫获取超级帐号密码
  4. 二叉排序树和二叉平衡树
  5. 腾讯云服务器申请自助退款流程(图文教程)
  6. Python如何设置对数log坐标系的range
  7. 深度学习入门资料整理
  8. 获取火山无水印视频方法
  9. 微信小程序 button按钮 image图片
  10. 解决谷歌导入Vue开发工具没反应的问题