基于Android中socket流的实时监控及遥控系统

该系统分为两部分,首先是局域网手机之间的视频传输(条件有限用手机摄像头代替模块),其次是手机蓝牙与arduino开发板的信息传输。代码注释较为详细,这里直接上代码。

客户端视频数据获取:

package com.example.kehuduan;  
  
import android.graphics.ImageFormat;  
import android.graphics.Rect;  
import android.graphics.YuvImage;  
import android.hardware.Camera;  
import android.hardware.Camera.PreviewCallback;  
import android.hardware.Camera.Size;  
import android.os.Bundle;  
import android.os.Handler;  
import android.os.Message;  
  
import java.io.ByteArrayInputStream;  
import java.io.ByteArrayOutputStream;  
import java.io.OutputStream;  
  
import android.app.Activity;  
import android.util.DisplayMetrics;  
import android.util.Log;  
  
import android.view.SurfaceHolder;  
import android.view.View;  
import android.view.View.OnClickListener;  
import android.view.Window;  
import android.view.WindowManager;  
import android.view.SurfaceHolder.Callback;  
import android.view.SurfaceView;  
import android.widget.Button;  
import android.widget.EditText;  
  
public class MainActivity extends Activity {  
    private static final int SEND = 0;  
    private static final int SEND1 = 1;  
    private MyHandler handler;  
    private ClientThread clientThread;  
    private Button start;  
    private Button stop;  
    private SurfaceView surfaceView;  
    private SurfaceHolder holder;  
    private Camera camera;  
    private EditText text;  
    private boolean isPreview = false; // 是否在浏览中  
    private int screenWidth = 300, screenHeight = 300;  
  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        // 设置全屏  
        requestWindowFeature(Window.FEATURE_NO_TITLE);  
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);  
        setContentView(R.layout.activity_main);  
  
        handler = new MyHandler();  
  
        DisplayMetrics dm = new DisplayMetrics();  
        getWindowManager().getDefaultDisplay().getMetrics(dm);  
        screenWidth = dm.widthPixels;// 获取屏幕分辨率宽度  
        screenHeight = dm.heightPixels;  
  
        start = (Button) findViewById(R.id.start);  
        stop = (Button) findViewById(R.id.stop);  
        text = (EditText) findViewById(R.id.editText1);  
        text.setText("192.168.137.***");//设一个初始地址  
        surfaceView = (SurfaceView) findViewById(R.id.surfaceView);  
        holder = surfaceView.getHolder();//为surfaceView提供一个可变的包装  
        holder.setFixedSize(320, 240);  
        holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);//camera类给surfaceView提供预览数据图像改变起来会比较流畅  
        start.setOnClickListener(new OnClickListener() {  
            @Override  
            public void onClick(View arg0) {  
                String str = text.getText().toString().trim();//得到地址  
                clientThread = new ClientThread(handler, str);  
                start.setEnabled(false);  
                new Thread(clientThread).start();  
            }  
  
        });  
        stop.setOnClickListener(new OnClickListener() {  
            @Override  
            public void onClick(View arg0) {  
                start.setEnabled(true);  
            }  
  
        });  
        holder.addCallback(new Callback() {  
  
            @Override  
            public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {  
                // TODO Auto-generated method stub  
  
            }  
  
            @Override  
            public void surfaceCreated(SurfaceHolder arg0) {  
                // TODO Auto-generated method stub  
                ItCamera();  
  
            }  
  
            @Override  
            public void surfaceDestroyed(SurfaceHolder arg0) {  
                if (camera != null) {  
                    if (isPreview)  
                        camera.stopPreview();  
                    camera.release();  
                    camera = null;  
                }  
  
            }  
  
        });  
  
        // 开启连接服务  
    }  
  
    private void ItCamera() {  
        if (!isPreview) {  
            camera = Camera.open();//可前置后置切换  
            ClientThread.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

益智竹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值