【实例简介】海康网络摄像头的Android端Demo; 可实现通过wifi实时读取并显示摄像头捕捉的画面;
【实例截图】
【核心代码】
/**
*
DemoActivity Class
* @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;
/**
*
* ClassName DemoActivity Class
*
*
* @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_R