实例介绍
【实例简介】海康网络摄像头的Android端Demo; 可实现通过wifi实时读取并显示摄像头捕捉的画面;
【实例截图】
【核心代码】
/**
* <p>DemoActivity Class</p>
* @author zhuzhenlei 2014-7-17
* @version V1.0
* @modificationHistory
* @modify by user:
* @modify by reason:
*/
package com.test.demo;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import org.MediaPlayer.PlayM4.Player;
import android.app.Activity;
import android.content.Context;
import android.graphics.PixelFormat;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import com.hikvision.netsdk.COND_INT_PTR;
import com.hikvision.netsdk.ExceptionCallBack;
import com.hikvision.netsdk.HCNetSDK;
import com.hikvision.netsdk.INT_PTR;
import com.hikvision.netsdk.NET_DVR_CLIENTINFO;
import com.hikvision.netsdk.NET_DVR_COMPRESSIONCFG_V30;
import com.hikvision.netsdk.NET_DVR_COND_INT;
import com.hikvision.netsdk.NET_DVR_CONFIG;
import com.hikvision.netsdk.NET_DVR_DEVICEINFO_V30;
import com.hikvision.netsdk.NET_DVR_EZVIZ_USER_LOGIN_INFO;
import com.hikvision.netsdk.NET_DVR_OPEN_EZVIZ_USER_LOGIN_INFO;
import com.hikvision.netsdk.NET_DVR_PLAYBACK_INFO;
import com.hikvision.netsdk.NET_DVR_PREVIEWINFO;
import com.hikvision.netsdk.NET_DVR_SCREEM_FILE_DOWNLOAD_PARAM;
import com.hikvision.netsdk.NET_DVR_SCREEN_CONTROL_V41;
import com.hikvision.netsdk.NET_DVR_SCREEN_FILE_INFO;
import com.hikvision.netsdk.NET_DVR_SCREEN_RESPONSE_CMD;
import com.hikvision.netsdk.NET_DVR_TIME;
import com.hikvision.netsdk.NET_DVR_VIDEOWALLWINDOWPOSITION;
import com.hikvision.netsdk.NET_DVR_XML_CONFIG_INPUT;
import com.hikvision.netsdk.NET_DVR_XML_CONFIG_OUTPUT;
import com.hikvision.netsdk.NET_SDK_CALLBACK_TYPE;
import com.hikvision.netsdk.NET_SDK_DOWNLOAD_TYPE;
import com.hikvision.netsdk.PTZCommand;
import com.hikvision.netsdk.PlaybackCallBack;
import com.hikvision.netsdk.PlaybackControlCommand;
import com.hikvision.netsdk.RealPlayCallBack;
import com.hikvision.netsdk.RemoteConfigCallback;
/**
* <pre>
* ClassName DemoActivity Class
* </pre>
*
* @author zhuzhenlei
* @version V1.0
* @modificationHistory
*/
public class DemoActivity extends Activity implements Callback {
private Button m_oLoginBtn = null;
private Button m_oPreviewBtn = null;
private Button m_oPlaybackBtn = null;
private Button m_oParamCfgBtn = null;
private Button m_oCaptureBtn = null;
private Button m_oRecordBtn = null;
private Button m_oTalkBtn = null;
private Button m_oPTZBtn = null;
private Button m_oOtherBtn = null;
private SurfaceView m_osurfaceView = null;
private EditText m_oIPAddr = null;
private EditText m_oPort = null;
private EditText m_oUser = null;
private EditText m_oPsd = null;
private NET_DVR_DEVICEINFO_V30 m_oNetDvrDeviceInfoV30 = null;
private int m_iLogID = -1; // return by NET_DVR_Login_v30
private int m_iPlayID = -1; // return by NET_DVR_RealPlay_V30
private int m_iPlaybackID = -1; // return by NET_DVR_PlayBackByTime
private int m_iPort = -1; // play port
private int m_iStartChan = 0; // start channel no
private int m_iChanNum = 0; // channel number
private static PlaySurfaceView[] playView = new PlaySurfaceView[4];
private final String TAG = "DemoActivity";
private boolean m_bTalkOn = false;
private boolean m_bPTZL = false;
private boolean m_bMultiPlay = false;
private boolean m_bNeedDecode = true;
private boolean m_bSaveRealData = false;
private boolean m_bStopPlayback = false;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
CrashUtil crashUtil = CrashUtil.getInstance();
crashUtil.init(this);
setContentView(R.layout.main);
if (!initeSdk()) {
this.finish();
return;
}
if (!initeActivity()) {
this.finish();
return;
}
m_oIPAddr.setText("10.17.132.49");
m_oPort.setText("8000");
m_oUser.setText("admin");
m_oPsd.setText("hik12345");
}
// @Override
public void surfaceCreated(SurfaceHolder holder) {
m_osurfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT);
Log.i(TAG, "surface is created" m_iPort);
if (-1 == m_iPort) {
return;
}
Surface surface = holder.getSurface();
if (true == surface.isValid()) {
if (false == Player.getInstance()
.setVideoWindow(m_iPort, 0, holder)) {
Log.e(TAG, "Player setVideoWindow failed!");
}
}
}
// @Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
// @Override
public void surfaceDestroyed(SurfaceHolder holder) {
Log.i(TAG, "Player setVideoWindow release!" m_iPort);
if (-1 == m_iPort) {
return;
}
if (true == holder.getSurface().isValid()) {
if (false == Player.getInstance().setVideoWindow(m_iPort, 0, null)) {
Log.e(TAG, "Player setVideoWindow failed!");
}
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putInt("m_iPort", m_iPort);
super.onSaveInstanceState(outState);
Log.i(TAG, "onSaveInstanceState");
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
m_iPort = savedInstanceState.getInt("m_iPort");
super.onRestoreInstanceState(savedInstanceState);
Log.i(TAG, "onRestoreInstanceState");
}
/**
* @fn initeSdk
* @author zhuzhenlei
* @brief SDK init
* @param NULL
* [in]
* @param NULL
* [out]
* @return true - success;false - fail
*/
private boolean initeSdk() {
// init net sdk
if (!HCNetSDK.getInstance().NET_DVR_Init()) {
Log.e(TAG, "HCNetSDK init is failed!");
return false;
}
HCNetSDK.getInstance().NET_DVR_SetLogToFile(3, "/mnt/sdcard/sdklog/",
true);
return true;
}
// GUI init
private boolean initeActivity() {
findViews();
m_osurfaceView.getHolder().addCallback(this);
setListeners();
return true;
}
// get controller instance
private void findViews() {
m_oLoginBtn = (Button) findViewById(R.id.btn_Login);
m_oPreviewBtn = (Button) findViewById(R.id.btn_Preview);
m_oPlaybackBtn = (Button) findViewById(R.id.btn_Playback);
m_oParamCfgBtn = (Button) findViewById(R.id.btn_ParamCfg);
m_oCaptureBtn = (Button) findViewById(R.id.btn_Capture);
m_oRecordBtn = (Button) findViewById(R.id.btn_Record);
m_oTalkBtn = (Button) findViewById(R.id.btn_Talk);
m_oPTZBtn = (Button) findViewById(R.id.btn_PTZ);
m_oOtherBtn = (Button) findViewById(R.id.btn_OTHER);
m_osurfaceView = (SurfaceView) findViewById(R.id.Sur_Player);
m_oIPAddr = (EditText) findViewById(R.id.EDT_IPAddr);
m_oPort = (EditText) findViewById(R.id.EDT_Port);
m_oUser = (EditText) findViewById(R.id.EDT_User);
m_oPsd = (EditText) findViewById(R.id.EDT_Psd);
}
// listen
private void setListeners() {
m_oLoginBtn.setOnClickListener(Login_Listener);
m_oPreviewBtn.setOnClickListener(Preview_Listener);
m_oPlaybackBtn.setOnClickListener(Playback_Listener);
m_oParamCfgBtn.setOnClickListener(ParamCfg_Listener);
m_oCaptureBtn.setOnClickListener(Capture_Listener);
m_oRecordBtn.setOnClickListener(Record_Listener);
m_oTalkBtn.setOnClickListener(Talk_Listener);
m_oOtherBtn.setOnClickListener(OtherFunc_Listener);
m_oPTZBtn.setOnTouchListener(PTZ_Listener);
}
// ptz listener
private Button.OnTouchListener PTZ_Listener = new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
try {
if (m_iLogID < 0) {
Log.e(TAG, "please login on a device first");
return false;
}
if (event.getAction() == MotionEvent.ACTION_DOWN) {
if (m_bPTZL == false) {
if (!HCNetSDK.getInstance().NET_DVR_PTZControl_Other(
m_iLogID, m_iStartChan, PTZCommand.PAN_LEFT, 0)) {
Log.e(TAG,
"start PAN_LEFT failed with error code: "
HCNetSDK.getInstance()
.NET_DVR_GetLastError());
} else {
Log.i(TAG, "start PAN_LEFT succ");
}
} else {
if (!HCNetSDK.getInstance()
.NET_DVR_PTZControl_Other(m_iLogID,
m_iStartChan, PTZCommand.PAN_RIGHT, 0)) {
Log.e(TAG,
"start PAN_RIGHT failed with error code: "
HCNetSDK.getInstance()
.NET_DVR_GetLastError());
} else {
Log.i(TAG, "start PAN_RIGHT succ");
}
}
} else if (event.getAction() == MotionEvent.ACTION_UP) {
if (m_bPTZL == false) {
if (!HCNetSDK.getInstance().NET_DVR_PTZControl_Other(
m_iLogID, m_iStartChan, PTZCommand.PAN_LEFT, 1)) {
Log.e(TAG, "stop PAN_LEFT failed with error code: "
HCNetSDK.getInstance()
.NET_DVR_GetLastError());
} else {
Log.i(TAG, "stop PAN_LEFT succ");
}
m_bPTZL = true;
m_oPTZBtn.setText("PTZ(R)");
} else {
if (!HCNetSDK.getInstance()
.NET_DVR_PTZControl_Other(m_iLogID,
m_iStartChan, PTZCommand.PAN_RIGHT, 1)) {
Log.e(TAG,
"stop PAN_RIGHT failed with error code: "
HCNetSDK.getInstance()
.NET_DVR_GetLastError());
} else {
Log.i(TAG, "stop PAN_RIGHT succ");
}
m_bPTZL = false;
m_oPTZBtn.setText("PTZ(L)");
}
}
return true;
} catch (Exception err) {
Log.e(TAG, "error: " err.toString());
return false;
}
}
};
// preset listener
private Button.OnClickListener OtherFunc_Listener = new OnClickListener() {
public void onClick(View v) {
// PTZTest.TEST_PTZ(m_iPlayID, m_iLogID, m_iStartChan);
// ConfigTest.Test_ScreenConfig(m_iLogID, m_iStartChan);
// PTZTest.TEST_PTZ(m_iPlayID, m_iLogID, m_iStartChan);
/*
* try { //PictureTest.PicUpload(m_iLogID); } catch
* (InterruptedException e) { // TODO Auto-generated catch block
* e.printStackTrace(); }
*/
// PictureTest.BaseMap(m_iLogID);
// DecodeTest.PicPreview(m_iLogID);
// ManageTest.TEST_Manage(m_iLogID);
// AlarmTest.Test_SetupAlarm(m_iLogID);
// OtherFunction.TEST_OtherFunc(m_iPlayID, m_iLogID, m_iStartChan);
JNATest.TEST_Config(m_iPlayID, m_iLogID, m_iStartChan);
// ConfigTest.TEST_Config(m_iPlayID, m_iLogID, m_iStartChan);
// HttpTest.Test_HTTP();
// ScreenTest.TEST_Screen(m_iLogID);
}
};
// Talk listener
private Button.OnClickListener Talk_Listener = new Button.OnClickListener() {
public void onClick(View v) {
try {
if (m_bTalkOn == false) {
if (VoiceTalk.startVoiceTalk(m_iLogID) >= 0) {
m_bTalkOn = true;
m_oTalkBtn.setText("Stop");
}
} else {
if (VoiceTalk.stopVoiceTalk()) {
m_bTalkOn = false;
m_oTalkBtn.setText("Talk");
}
}
} catch (Exception err) {
Log.e(TAG, "error: " err.toString());
}
}
};
// record listener
private Button.OnClickListener Record_Listener = new Button.OnClickListener() {
public void onClick(View v) {
if (!m_bSaveRealData) {
if (!HCNetSDK.getInstance().NET_DVR_SaveRealData(m_iPlayID,
"/sdcard/test.mp4")) {
System.out.println("NET_DVR_SaveRealData failed! error: "
HCNetSDK.getInstance().NET_DVR_GetLastError());
return;
} else {
System.out.println("NET_DVR_SaveRealData succ!");
}
m_bSaveRealData = true;
} else {
if (!HCNetSDK.getInstance().NET_DVR_StopSaveRealData(m_iPlayID)) {
System.out
.println("NET_DVR_StopSaveRealData failed! error: "
HCNetSDK.getInstance()
.NET_DVR_GetLastError());
} else {
System.out.println("NET_DVR_StopSaveRealData succ!");
}
m_bSaveRealData = false;
}
}
};
// capture listener
private Button.OnClickListener Capture_Listener = new Button.OnClickListener() {
public void onClick(View v) {
try {
if (m_iPort < 0) {
Log.e(TAG, "please start preview first");
return;
}
Player.MPInteger stWidth = new Player.MPInteger();
Player.MPInteger stHeight = new Player.MPInteger();
if (!Player.getInstance().getPictureSize(m_iPort, stWidth,
stHeight)) {
Log.e(TAG, "getPictureSize failed with error code:"
Player.getInstance().getLastError(m_iPort));
return;
}
int nSize = 5 * stWidth.value * stHeight.value;
byte[] picBuf = new byte[nSize];
Player.MPInteger stSize = new Player.MPInteger();
if (!Player.getInstance()
.getBMP(m_iPort, picBuf, nSize, stSize)) {
Log.e(TAG, "getBMP failed with error code:"
Player.getInstance().getLastError(m_iPort));
return;
}
SimpleDateFormat sDateFormat = new SimpleDateFormat(
"yyyy-MM-dd-hh:mm:ss");
String date = sDateFormat.format(new java.util.Date());
FileOutputStream file = new FileOutputStream("/mnt/sdcard/"
date ".bmp");
file.write(picBuf, 0, stSize.value);
file.close();
} catch (Exception err) {
Log.e(TAG, "error: " err.toString());
}
}
};
// playback listener
private Button.OnClickListener Playback_Listener = new Button.OnClickListener() {
public void onClick(View v) {
try {
if (m_iLogID < 0) {
Log.e(TAG, "please login on a device first");
return;
}
if (m_iPlaybackID < 0) {
if (m_iPlayID >= 0) {
Log.i(TAG, "Please stop preview first");
return;
}
PlaybackCallBack fPlaybackCallBack = getPlayerbackPlayerCbf();
if (fPlaybackCallBack == null) {
Log.e(TAG, "fPlaybackCallBack object is failed!");
return;
}
NET_DVR_TIME struBegin = new NET_DVR_TIME();
NET_DVR_TIME struEnd = new NET_DVR_TIME();
struBegin.dwYear = 2016;
struBegin.dwMonth = 6;
struBegin.dwDay = 28;
struEnd.dwYear = 2016;
struEnd.dwMonth = 6;
struEnd.dwDay = 29;
m_iPlaybackID = HCNetSDK.getInstance()
.NET_DVR_PlayBackByTime(m_iLogID, m_iStartChan,
struBegin, struEnd);
if (m_iPlaybackID >= 0) {
if (!HCNetSDK.getInstance()
.NET_DVR_SetPlayDataCallBack(m_iPlaybackID,
fPlaybackCallBack)) {
Log.e(TAG, "Set playback callback failed!");
return;
}
NET_DVR_PLAYBACK_INFO struPlaybackInfo = null;
if (!HCNetSDK
.getInstance()
.NET_DVR_PlayBackControl_V40(
m_iPlaybackID,
PlaybackControlCommand.NET_DVR_PLAYSTART,
null, 0, struPlaybackInfo)) {
Log.e(TAG, "net sdk playback start failed!");
return;
}
m_bStopPlayback = false;
m_oPlaybackBtn.setText("Stop");
Thread thread = new Thread() {
public void run() {
int nProgress = -1;
while (true) {
nProgress = HCNetSDK.getInstance()
.NET_DVR_GetPlayBackPos(
m_iPlaybackID);
System.out
.println("NET_DVR_GetPlayBackPos:"
nProgress);
if (nProgress < 0 || nProgress >= 100) {
break;
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
};
thread.start();
} else {
Log.i(TAG,
"NET_DVR_PlayBackByTime failed, error code: "
HCNetSDK.getInstance()
.NET_DVR_GetLastError());
}
} else {
m_bStopPlayback = true;
if (!HCNetSDK.getInstance().NET_DVR_StopPlayBack(
m_iPlaybackID)) {
Log.e(TAG, "net sdk stop playback failed");
}
// player stop play
stopSinglePlayer();
m_oPlaybackBtn.setText("Playback");
m_iPlaybackID = -1;
}
} catch (Exception err) {
Log.e(TAG, "error: " err.toString());
}
}
};
/*
* private Button.OnClickListener Playback_Listener = new
* Button.OnClickListener() {
*
* public void onClick(View v) { try { if(m_iLogID < 0) {
* Log.e(TAG,"please login on a device first"); return ; } if(m_iPlaybackID
* < 0) { if(m_iPlayID >= 0 ) { Log.i(TAG, "Please stop preview first");
* return; } PlaybackCallBack fPlaybackCallBack = getPlayerbackPlayerCbf();
* if (fPlaybackCallBack == null) { Log.e(TAG,
* "fPlaybackCallBack object is failed!"); return; }
*
* m_iPlaybackID = HCNetSDK.getInstance().NET_DVR_PlayBackByName(m_iLogID,
* new String("ch0002_00010000459000200")); if(m_iPlaybackID >= 0) {
* if(!HCNetSDK.getInstance().NET_DVR_SetPlayDataCallBack(m_iPlaybackID,
* fPlaybackCallBack)) { Log.e(TAG, "Set playback callback failed!"); return
* ; } NET_DVR_PLAYBACK_INFO struPlaybackInfo = null ;
* if(!HCNetSDK.getInstance().NET_DVR_PlayBackControl_V40(m_iPlaybackID,
* PlaybackControlCommand.NET_DVR_PLAYSTART, null, 0, struPlaybackInfo)) {
* Log.e(TAG, "net sdk playback start failed!"); return ; } m_bStopPlayback
* = false; m_oPlaybackBtn.setText("Stop");
*
* Thread thread = new Thread() { public void run() { int nProgress = -1;
* while(true) { nProgress =
* HCNetSDK.getInstance().NET_DVR_GetPlayBackPos(m_iPlaybackID);
* System.out.println("NET_DVR_GetPlayBackPos:" nProgress); if(nProgress <
* 0 || nProgress >= 100) { break; } try { Thread.sleep(1000); } catch
* (InterruptedException e) { // TODO Auto-generated catch block
* e.printStackTrace(); }
*
* } } }; thread.start(); } else { Log.i(TAG,
* "NET_DVR_PlayBackByName failed, error code: "
* HCNetSDK.getInstance().NET_DVR_GetLastError()); } } else {
* m_bStopPlayback = true;
* if(!HCNetSDK.getInstance().NET_DVR_StopPlayBack(m_iPlaybackID)) {
* Log.e(TAG, "net sdk stop playback failed"); } // player stop play
* stopSinglePlayer(); m_oPlaybackBtn.setText("Playback"); m_iPlaybackID =
* -1; } } catch (Exception err) { Log.e(TAG, "error: " err.toString()); }
* } };
*/
// login listener
private Button.OnClickListener Login_Listener = new Button.OnClickListener() {
public void onClick(View v) {
try {
if (m_iLogID < 0) {
// login on the device
m_iLogID = loginDevice();
if (m_iLogID < 0) {
Log.e(TAG, "This device logins failed!");
return;
} else {
System.out.println("m_iLogID=" m_iLogID);
}
// get instance of exception callback and set
ExceptionCallBack oexceptionCbf = getExceptiongCbf();
if (oexceptionCbf == null) {
Log.e(TAG, "ExceptionCallBack object is failed!");
return;
}
if (!HCNetSDK.getInstance().NET_DVR_SetExceptionCallBack(
oexceptionCbf)) {
Log.e(TAG, "NET_DVR_SetExceptionCallBack is failed!");
return;
}
m_oLoginBtn.setText("Logout");
Log.i(TAG,
"Login sucess ****************************1***************************");
} else {
// whether we have logout
if (!HCNetSDK.getInstance().NET_DVR_Logout_V30(m_iLogID)) {
Log.e(TAG, " NET_DVR_Logout is failed!");
return;
}
m_oLoginBtn.setText("Login");
m_iLogID = -1;
}
} catch (Exception err) {
Log.e(TAG, "error: " err.toString());
}
}
};
// Preview listener
private Button.OnClickListener Preview_Listener = new Button.OnClickListener() {
public void onClick(View v) {
try {
((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE))
.hideSoftInputFromWindow(DemoActivity.this
.getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
if (m_iLogID < 0) {
Log.e(TAG, "please login on device first");
return;
}
if (m_bNeedDecode) {
if (m_iChanNum > 1)// preview more than a channel
{
if (!m_bMultiPlay) {
startMultiPreview();
m_bMultiPlay = true;
m_oPreviewBtn.setText("Stop");
} else {
stopMultiPreview();
m_bMultiPlay = false;
m_oPreviewBtn.setText("Preview");
}
} else // preivew a channel
{
if (m_iPlayID < 0) {
startSinglePreview();
} else {
stopSinglePreview();
m_oPreviewBtn.setText("Preview");
}
}
} else {
}
} catch (Exception err) {
Log.e(TAG, "error: " err.toString());
}
}
};
// configuration listener
private Button.OnClickListener ParamCfg_Listener = new Button.OnClickListener() {
public void onClick(View v) {
try {
paramCfg(m_iLogID);
} catch (Exception err) {
Log.e(TAG, "error: " err.toString());
}
}
};
private void startSinglePreview() {
if (m_iPlaybackID >= 0) {
Log.i(TAG, "Please stop palyback first");
return;
}
RealPlayCallBack fRealDataCallBack = getRealPlayerCbf();
if (fRealDataCallBack == null) {
Log.e(TAG, "fRealDataCallBack object is failed!");
return;
}
Log.i(TAG, "m_iStartChan:" m_iStartChan);
NET_DVR_PREVIEWINFO previewInfo = new NET_DVR_PREVIEWINFO();
previewInfo.lChannel = m_iStartChan;
previewInfo.dwStreamType = 0; // substream
previewInfo.bBlocked = 1;
// NET_DVR_CLIENTINFO struClienInfo = new NET_DVR_CLIENTINFO();
// struClienInfo.lChannel = m_iStartChan;
// struClienInfo.lLinkMode = 0;
// HCNetSDK start preview
m_iPlayID = HCNetSDK.getInstance().NET_DVR_RealPlay_V40(m_iLogID,
previewInfo, fRealDataCallBack);
// m_iPlayID = HCNetSDK.getInstance().NET_DVR_RealPlay_V30(m_iLogID,
// struClienInfo, fRealDataCallBack, false);
if (m_iPlayID < 0) {
Log.e(TAG, "NET_DVR_RealPlay is failed!Err:"
HCNetSDK.getInstance().NET_DVR_GetLastError());
return;
}
Log.i(TAG,
"NetSdk Play sucess ***********************3***************************");
m_oPreviewBtn.setText("Stop");
}
private void startMultiPreview() {
DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
int i = 0;
for (i = 0; i < 4; i ) {
if (playView[i] == null) {
playView[i] = new PlaySurfaceView(this);
playView[i].setParam(metric.widthPixels);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
FrameLayout.LayoutParams.WRAP_CONTENT,
FrameLayout.LayoutParams.WRAP_CONTENT);
params.bottomMargin = playView[i].getCurHeight() - (i / 2)
* playView[i].getCurHeight();
params.leftMargin = (i % 2) * playView[i].getCurWidth();
params.gravity = Gravity.BOTTOM | Gravity.LEFT;
addContentView(playView[i], params);
}
playView[i].startPreview(m_iLogID, m_iStartChan i);
}
m_iPlayID = playView[0].m_iPreviewHandle;
}
private void stopMultiPreview() {
int i = 0;
for (i = 0; i < 4; i ) {
playView[i].stopPreview();
}
m_iPlayID = -1;
}
/**
* @fn stopSinglePreview
* @author zhuzhenlei
* @brief stop preview
* @param NULL
* [in]
* @param NULL
* [out]
* @return NULL
*/
private void stopSinglePreview() {
if (m_iPlayID < 0) {
Log.e(TAG, "m_iPlayID < 0");
return;
}
// net sdk stop preview
if (!HCNetSDK.getInstance().NET_DVR_StopRealPlay(m_iPlayID)) {
Log.e(TAG, "StopRealPlay is failed!Err:"
HCNetSDK.getInstance().NET_DVR_GetLastError());
return;
}
m_iPlayID = -1;
stopSinglePlayer();
}
private void stopSinglePlayer() {
Player.getInstance().stopSound();
// player stop play
if (!Player.getInstance().stop(m_iPort)) {
Log.e(TAG, "stop is failed!");
return;
}
if (!Player.getInstance().closeStream(m_iPort)) {
Log.e(TAG, "closeStream is failed!");
return;
}
if (!Player.getInstance().freePort(m_iPort)) {
Log.e(TAG, "freePort is failed!" m_iPort);
return;
}
m_iPort = -1;
}
/**
* @fn loginNormalDevice
* @author zhuzhenlei
* @brief login on device
* @param NULL
* [in]
* @param NULL
* [out]
* @return login ID
*/
private int loginNormalDevice() {
// get instance
m_oNetDvrDeviceInfoV30 = new NET_DVR_DEVICEINFO_V30();
if (null == m_oNetDvrDeviceInfoV30) {
Log.e(TAG, "HKNetDvrDeviceInfoV30 new is failed!");
return -1;
}
String strIP = m_oIPAddr.getText().toString();
int nPort = Integer.parseInt(m_oPort.getText().toString());
String strUser = m_oUser.getText().toString();
String strPsd = m_oPsd.getText().toString();
// call NET_DVR_Login_v30 to login on, port 8000 as default
int iLogID = HCNetSDK.getInstance().NET_DVR_Login_V30(strIP, nPort,
strUser, strPsd, m_oNetDvrDeviceInfoV30);
if (iLogID < 0) {
Log.e(TAG, "NET_DVR_Login is failed!Err:"
HCNetSDK.getInstance().NET_DVR_GetLastError());
return -1;
}
if (m_oNetDvrDeviceInfoV30.byChanNum > 0) {
m_iStartChan = m_oNetDvrDeviceInfoV30.byStartChan;
m_iChanNum = m_oNetDvrDeviceInfoV30.byChanNum;
} else if (m_oNetDvrDeviceInfoV30.byIPChanNum > 0) {
m_iStartChan = m_oNetDvrDeviceInfoV30.byStartDChan;
m_iChanNum = m_oNetDvrDeviceInfoV30.byIPChanNum
m_oNetDvrDeviceInfoV30.byHighDChanNum * 256;
}
Log.i(TAG, "NET_DVR_Login is Successful!");
return iLogID;
}
public static void Test_XMLAbility(int iUserID) {
byte[] arrayOutBuf = new byte[64 * 1024];
INT_PTR intPtr = new INT_PTR();
String strInput = new String(
"<AlarmHostAbility version=\"2.0\"></AlarmHostAbility>");
byte[] arrayInBuf = new byte[8 * 1024];
arrayInBuf = strInput.getBytes();
if (!HCNetSDK.getInstance().NET_DVR_GetXMLAbility(iUserID,
HCNetSDK.DEVICE_ABILITY_INFO, arrayInBuf, strInput.length(),
arrayOutBuf, 64 * 1024, intPtr)) {
System.out.println("get DEVICE_ABILITY_INFO faild!" " err: "
HCNetSDK.getInstance().NET_DVR_GetLastError());
} else {
System.out.println("get DEVICE_ABILITY_INFO succ!");
}
}
/**
* @fn loginEzvizDevice
* @author liuyu6
* @brief login on ezviz device
* @param NULL
* [in]
* @param NULL
* [out]
* @return login ID
*/
private int loginEzvizDevice() {
return -1;
/*
* NET_DVR_OPEN_EZVIZ_USER_LOGIN_INFO struLoginInfo = new
* NET_DVR_OPEN_EZVIZ_USER_LOGIN_INFO(); NET_DVR_DEVICEINFO_V30
* struDeviceInfo = new NET_DVR_DEVICEINFO_V30();
*
* //String strInput = new String("pbsgp.p2papi.ezviz7.com"); String
* strInput = new String("open.ys7.com"); //String strInput = new
* String("pbdev.ys7.com"); //String strInput = new
* String("183.136.184.67"); byte[] byInput = strInput.getBytes();
* System.arraycopy(byInput, 0, struLoginInfo.sEzvizServerAddress, 0,
* byInput.length);
*
* struLoginInfo.wPort = 443;
*
* strInput = new
* String("at.43anfq0q9k8zt06vd0ppalfhc4bj177p-3k4ovrh4vu-105zgp6-jgt8edqst"
* ); byInput = strInput.getBytes(); System.arraycopy(byInput, 0,
* struLoginInfo.sAccessToken, 0, byInput.length);
*
* //strInput = new String("67a7daedd4654dc5be329f2289914859");
* //byInput = strInput.getBytes(); //System.arraycopy(byInput, 0,
* struLoginInfo.sSessionID, 0, byInput.length);
*
* //strInput = new String("ae1b9af9dcac4caeb88da6dbbf2dd8d5"); strInput
* = new String("com.hik.visualintercom"); byInput =
* strInput.getBytes(); System.arraycopy(byInput, 0,
* struLoginInfo.sAppID, 0, byInput.length);
*
* //strInput = new String("78313dadecd92bd11623638d57aa5128"); strInput
* = new String("226f102a99ad0e078504d380b9ddf760"); byInput =
* strInput.getBytes(); System.arraycopy(byInput, 0,
* struLoginInfo.sFeatureCode, 0, byInput.length);
*
* //strInput = new
* String("https://pbopen.ys7.com:443/api/device/transmission");
* strInput = new String("/api/device/transmission"); byInput =
* strInput.getBytes(); System.arraycopy(byInput, 0, struLoginInfo.sUrl,
* 0, byInput.length);
*
* strInput = new String("520247131"); byInput = strInput.getBytes();
* System.arraycopy(byInput, 0, struLoginInfo.sDeviceID, 0,
* byInput.length);
*
* strInput = new String("2"); byInput = strInput.getBytes();
* System.arraycopy(byInput, 0, struLoginInfo.sClientType, 0,
* byInput.length);
*
* strInput = new String("UNKNOWN"); byInput = strInput.getBytes();
* System.arraycopy(byInput, 0, struLoginInfo.sNetType, 0,
* byInput.length);
*
* strInput = new String("5.0.1"); byInput = strInput.getBytes();
* System.arraycopy(byInput, 0, struLoginInfo.sOsVersion, 0,
* byInput.length);
*
* strInput = new String("v.5.1.5.30"); byInput = strInput.getBytes();
* System.arraycopy(byInput, 0, struLoginInfo.sSdkVersion, 0,
* byInput.length);
*
* int iUserID = -1;
*
* iUserID =
* HCNetSDK.getInstance().NET_DVR_CreateOpenEzvizUser(struLoginInfo,
* struDeviceInfo);
*
* if (-1 == iUserID) { System.out.println("NET_DVR_CreateOpenEzvizUser"
* " err: " HCNetSDK.getInstance().NET_DVR_GetLastError()); return
* -1; } else {
* System.out.println("NET_DVR_CreateOpenEzvizUser success"); }
*
* Test_XMLAbility(iUserID); Test_XMLAbility(iUserID);
* Test_XMLAbility(iUserID);
*
* return iUserID;
*/
}
/**
* @fn loginDevice
* @author zhangqing
* @brief login on device
* @param NULL
* [in]
* @param NULL
* [out]
* @return login ID
*/
private int loginDevice() {
int iLogID = -1;
iLogID = loginNormalDevice();
// iLogID = JNATest.TEST_EzvizLogin();
// iLogID = loginEzvizDevice();
return iLogID;
}
/**
* @fn paramCfg
* @author zhuzhenlei
* @brief configuration
* @param iUserID
* - login ID [in]
* @param NULL
* [out]
* @return NULL
*/
private void paramCfg(final int iUserID) {
// whether have logined on
if (iUserID < 0) {
Log.e(TAG, "iUserID < 0");
return;
}
NET_DVR_COMPRESSIONCFG_V30 struCompress = new NET_DVR_COMPRESSIONCFG_V30();
if (!HCNetSDK.getInstance().NET_DVR_GetDVRConfig(iUserID,
HCNetSDK.NET_DVR_GET_COMPRESSCFG_V30, m_iStartChan,
struCompress)) {
Log.e(TAG, "NET_DVR_GET_COMPRESSCFG_V30 failed with error code:"
HCNetSDK.getInstance().NET_DVR_GetLastError());
} else {
Log.i(TAG, "NET_DVR_GET_COMPRESSCFG_V30 succ");
}
// set substream resolution to cif
struCompress.struNetPara.byResolution = 1;
if (!HCNetSDK.getInstance().NET_DVR_SetDVRConfig(iUserID,
HCNetSDK.NET_DVR_SET_COMPRESSCFG_V30, m_iStartChan,
struCompress)) {
Log.e(TAG, "NET_DVR_SET_COMPRESSCFG_V30 failed with error code:"
HCNetSDK.getInstance().NET_DVR_GetLastError());
} else {
Log.i(TAG, "NET_DVR_SET_COMPRESSCFG_V30 succ");
}
}
/**
* @fn getExceptiongCbf
* @author zhuzhenlei
* @brief process exception
* @param NULL
* [in]
* @param NULL
* [out]
* @return exception instance
*/
private ExceptionCallBack getExceptiongCbf() {
ExceptionCallBack oExceptionCbf = new ExceptionCallBack() {
public void fExceptionCallBack(int iType, int iUserID, int iHandle) {
System.out.println("recv exception, type:" iType);
}
};
return oExceptionCbf;
}
/**
* @fn getRealPlayerCbf
* @author zhuzhenlei
* @brief get realplay callback instance
* @param NULL
* [in]
* @param NULL
* [out]
* @return callback instance
*/
private RealPlayCallBack getRealPlayerCbf() {
RealPlayCallBack cbf = new RealPlayCallBack() {
public void fRealDataCallBack(int iRealHandle, int iDataType,
byte[] pDataBuffer, int iDataSize) {
// player channel 1
DemoActivity.this.processRealData(1, iDataType, pDataBuffer,
iDataSize, Player.STREAM_REALTIME);
}
};
return cbf;
}
/**
* @fn getPlayerbackPlayerCbf
* @author zhuzhenlei
* @brief get Playback instance
* @param NULL
* [in]
* @param NULL
* [out]
* @return callback instance
*/
private PlaybackCallBack getPlayerbackPlayerCbf() {
PlaybackCallBack cbf = new PlaybackCallBack() {
@Override
public void fPlayDataCallBack(int iPlaybackHandle, int iDataType,
byte[] pDataBuffer, int iDataSize) {
// player channel 1
DemoActivity.this.processRealData(1, iDataType, pDataBuffer,
iDataSize, Player.STREAM_FILE);
}
};
return cbf;
}
/**
* @fn processRealData
* @author zhuzhenlei
* @brief process real data
* @param iPlayViewNo
* - player channel [in]
* @param iDataType
* - data type [in]
* @param pDataBuffer
* - data buffer [in]
* @param iDataSize
* - data size [in]
* @param iStreamMode
* - stream mode [in]
* @param NULL
* [out]
* @return NULL
*/
public void processRealData(int iPlayViewNo, int iDataType,
byte[] pDataBuffer, int iDataSize, int iStreamMode) {
if (!m_bNeedDecode) {
// Log.i(TAG, "iPlayViewNo:" iPlayViewNo ",iDataType:"
// iDataType ",iDataSize:" iDataSize);
} else {
if (HCNetSDK.NET_DVR_SYSHEAD == iDataType) {
if (m_iPort >= 0) {
return;
}
m_iPort = Player.getInstance().getPort();
if (m_iPort == -1) {
Log.e(TAG, "getPort is failed with: "
Player.getInstance().getLastError(m_iPort));
return;
}
Log.i(TAG, "getPort succ with: " m_iPort);
if (iDataSize > 0) {
if (!Player.getInstance().setStreamOpenMode(m_iPort,
iStreamMode)) // set stream mode
{
Log.e(TAG, "setStreamOpenMode failed");
return;
}
if (!Player.getInstance().openStream(m_iPort, pDataBuffer,
iDataSize, 2 * 1024 * 1024)) // open stream
{
Log.e(TAG, "openStream failed");
return;
}
if (!Player.getInstance().play(m_iPort,
m_osurfaceView.getHolder())) {
Log.e(TAG, "play failed");
return;
}
if (!Player.getInstance().playSound(m_iPort)) {
Log.e(TAG, "playSound failed with error code:"
Player.getInstance().getLastError(m_iPort));
return;
}
}
} else {
if (!Player.getInstance().inputData(m_iPort, pDataBuffer,
iDataSize)) {
// Log.e(TAG, "inputData failed with: "
// Player.getInstance().getLastError(m_iPort));
for (int i = 0; i < 4000 && m_iPlaybackID >= 0
&& !m_bStopPlayback; i ) {
if (Player.getInstance().inputData(m_iPort,
pDataBuffer, iDataSize)) {
break;
}
if (i % 100 == 0) {
Log.e(TAG, "inputData failed with: "
Player.getInstance()
.getLastError(m_iPort) ", i:" i);
}
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
}
/**
* @fn Cleanup
* @author zhuzhenlei
* @brief cleanup
* @param NULL
* [in]
* @param NULL
* [out]
* @return NULL
*/
public void Cleanup() {
// release player resource
Player.getInstance().freePort(m_iPort);
m_iPort = -1;
// release net SDK resource
HCNetSDK.getInstance().NET_DVR_Cleanup();
}
}
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论