android 通过wifi 热点实现手机摄像头数据共享(转)

从来好事天生俭,自古瓜儿苦后甜。这篇文章主要讲述android 通过wifi 热点实现手机摄像头数据共享(转)相关的知识,希望能为你提供帮助。
原网址: http://www.cnblogs.com/pengqinping/archive/2012/09/07/2674952.html


最近一直在在学习通过两个android手机通过wifi共享摄像头的数据。弄了好久有了点头目。具体有下面几个步骤:
1.对手机相机的开发, 自定义surfaceView来定义自己的相机类。主要是显示手机摄像头的画面。
2.对自定义相机的预览画面的数据的获取。然后对数据进行解析。
3.在两台Android手机通过wifi建立传输数据的连接。
4.将数据的时时的传输在两个手机之间。
一.自定义相机类很简单定义一个surfaceView, 在Activity中, 通过实现surfaceHodler.callBack接口重写的OnSurfaceCreate()中添加打开相机的camera.open即可获得一个Camera对象。设置Camera的预览对象。 mCamera.setPreviewDisplay(holder); holder是我们surfaceView的hodler。可以通过surfaceView.getHodler( ) 获取。这样就可在surfaceView中显示我们手机的预览的画面。
【android 通过wifi 热点实现手机摄像头数据共享(转)】 代码如下:

package com.weipu.camera; import java.io.IOException; import android.annotation.TargetApi; import android.app.Activity; import android.graphics.ImageFormat; import android.hardware.Camera; import android.os.Bundle; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.View.OnClickListener; /** *接口SurfaceHolder.Callback被用来接收摄像头预览界面变化的信息。它实现了三个方法: surfaceChanged *当预览界面的格式和大小发生改变时, 该方法被调用。surfaceCreated初次实例化, 预览界面被创建时, 该方法被调用。 *surfaceDestroyed当预览界面被关闭时, 该方法被调用。 * * @ author pengqinping */@ TargetApi(9) public class MyCameraActivity extends Activity implements SurfaceHolder.Callback, OnClickListener {private SurfaceHolder mSurfaceHolder = null; private SurfaceView mSurfaceView = null; private Camera mCamera = null; @ Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 初始化组件, SurfaceView mSurfaceView = (SurfaceView) findViewById(R.id.SurfaceView01); /** * 通过代码, 我们从surfaceview中获得了holder, 并增加callback功能到“this”。 * 这意味着我们的操作(activity)将可以管理这个surfaceview。 */ mSurfaceHolder = mSurfaceView.getHolder(); // 获取surfaceView的Holder对象 mSurfaceHolder.addCallback(this); // 为surfaceView的holder对象添加回调函数, mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); }@ Override protected void onStart() { super.onStart(); }@ Override public void surfaceChanged(SurfaceHolder holder, int format, int width1, int height1) { if (mCamera = = null) { System.out.println(" 没有相机设备" ); return; } if (mCamera != null) { //初始化相机。设置参数 Camera.Parameters parameters = mCamera.getParameters(); parameters.setPreviewSize(width1, height1); // 设置预览照片的大小 parameters.setPreviewFpsRange(20, 30); // 每秒显示20~30帧 parameters.setPictureFormat(ImageFormat.NV21); // 设置图片格式 parameters.setPictureSize(width1, height1); // 设置照片的大小 } try { mCamera.setPreviewDisplay(holder); } catch (IOException e) { System.out.println(" 设置预览出错......" ); } // 通过SurfaceView显示取景画面 mCamera.startPreview(); // 开始预览 mCamera.autoFocus(null); // 自动对焦}@ Override public void surfaceCreated(SurfaceHolder holder) { try { mCamera = Camera.open(); } catch (Exception e) { System.out.println(" 000000000" ); return; }}@ Override public void surfaceDestroyed(SurfaceHolder holder) { mCamera.stopPreview(); mCamera.release(); }@ Override public void onClick(View v) {}}


    推荐阅读