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

Posted 西伯利亚鹰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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中显示我们手机的预览的画面。

代码如下:

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)
    {
        
    }
    
}

以上是关于android 通过wifi 热点实现手机摄像头数据共享(转)的主要内容,如果未能解决你的问题,请参考以下文章

如何用android手机当wifi热点

android 怎么启动wifi热点

android手机如何获取自己手机设置的wifi热点的bssid

Android 解决通过自定义设置打开热点后手机搜索不到热点的问题。

如何利用Android手机usb接口当WIFI热点

如何在Ubuntu下建立虚拟wifi热点供Android,Kindle