基于Android的远程视频监控系统
- 格式:doc
- 大小:172.50 KB
- 文档页数:11
android:digits="0123456789."
android:hint="请填写服务器IP"
android:selectAllOnFocus="true"
/>
</TableRow>
</TableLayout>
(4)GetIP.java获得服务器IP后,通过Intent启动CameraTest的activity,ip信息通过Bundle传递
{
}
@Override
publicvoidsurfaceCreated(SurfaceHolder holder) {
initCamera(); //打开摄像头
}
@Override
publicvoidsurfaceDestroyed(SurfaceHolder holder) {
//如果camera不为null ,释放摄像头
<?xml version="1.0"encoding="utf-8"?>
<LinearLayout xmlns:android="/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
基于
基本过程是android作为socket客户端将采集到的每一帧图像数据发送出去,PC作为服务器接收并显示每一帧图像实现远程监控。图片如下(后来PC端加了个拍照功能)。。。
(PS。刚学android和java不久很多东西还不懂,高手若是知道哪些地方可以继续优化的话还请多多指点下啊)
系统代码如下:
一、android手机客户端
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES"/>
<uses-permission android:name="android.permission.RESTART_PACKAGES"/>
<application
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TableRow>
<TextView
android:layout_width="fill_parent"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name">
<activity
android:name=".GetIP"
android:screenOrientation="landscape"
android:label="@string/app_name">
screenHeight = 480;
sView = (SurfaceView) findViewById(R.id.sView);//获取界面中SurfaceView组件
surfaceHolder = sView.getHolder(); //获得SurfaceView的SurfaceHolder
builder.setView(loginForm); //设置对话框显示的View对象
//为对话框设置一个“登录”按钮
builder.setPositiveButton("登录"
//为按钮设置监听器
, newOnClickListener() {
@Override
publicvoidonClick(DialogInterface dialog, intwhich) {
setContentView(yout.main);
//获取IP地址
Intent intent = getIntent();
Bundle data = intent.getExtras();
ipname = data.getString("ipname");
screenWidth = 640;
TableLayout loginForm = (TableLayout)getLayoutInflater().inflate( yout.login, null);
finalEditText iptext = (EditText)loginForm.findViewById(R.id.ipedittext);
//此处可执行登录处理
ipname = iptext.getText().toString().trim();
Bundle data = newBundle();
data.putString("ipname",ipname);
Intent intent = newIntent(GetIP.this,CameraTest.class);
if(camera != null) {
if(isPreview)
camera.stopPreview();
camera.release();
camera = null;
}
System.exit(0);
}
});
//设置该SurfaceView自己不维护缓冲
publicclassGetIP extendsActivity {
String ipname = null;
@Override
publicvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//设置全屏
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(youtParams.FLAG_FULLSCREEN,youtParams.FLAG_FULLSCREEN);
(1)AndroidManifest.xml文件。添加camera和socket权限,并设置了程序开始执行的activity、
<?xml version="1.0"encoding="utf-8"?>
<manifest xmlns:android="/apk/res/android"
<uses-feature android:name="android.hardware.camera"/>
<uses-feature android:name="android.hardware.camera.autofocus"/>
<uses-permission android:name="android.permission.INTERNET"/>
intent.putExtras(data);
startActivity(intent);
}
});
//为对话框设置一个“取消”按钮
builder.setNegativeButton("取消"
,newOnClickListener()
{
@Override
publicvoidonClick(DialogInterface dialog, intwhich)
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="UNCHER"/>
</intent-filter>
</activity>
package="org.wanghai.CameraTest"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="15"/>
<!--授予程序使用摄像头的权限-->
<uses-permission android:name="android.permission.CAMERA"/>
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(youtParams.FLAG_FULLSCREEN,youtParams.FLAG_FULLSCREEN);
{
//取消登录,不做任何事情。
System.exit(1);
}
});
//创建、并显示对话框
builder.create().show();
}
}
(5)CameraTest.java程序主体。设置PreviewCallback后,每当一帧图像数据采集完成后将调用PreviewCallback的onPreviewFrame函数。在这里我们将YUV格式数据转为jpg,再启用线程将数据通过socket发送出去。