视频传输Bitmap数据

启动tcp的接收端口,如下代码:

videoReceiveListener=TCPVideoReceiveListener.getInstance();
                videoReceiveListener.setBitmapLoaded(VideoChatActivity.this);
                if(!videoReceiveListener.isRunning())
                    videoReceiveListener.open();// 先监听端口,然后连接


server=new ServerSocket(port);


接收端启动后就可以往接收端发送东西,

连接接收端:

Socket socket=new Socket(InetAddress.getByName(chatIp), Constants.VIDEO_PORT);

发送图片数据过去之前首先要设置参数:

// TODO Auto-generated method stub
        Camera.Parameters parameters=camera.getParameters();//得到相机设置参数
        Size size = camera.getParameters().getPreviewSize(); //获取预览大小
        w=size.width;
        h=size.height;
        parameters.setPictureFormat(PixelFormat.JPEG);//设置图片格式
        PreviewFormat=parameters.getPreviewFormat();
        setDisplayOrientation(camera, 90);
        camera.setPreviewCallback(this);
        camera.setParameters(parameters);
        camera.startPreview();//开始预览


 try {
            Method downPolymorphic = camera.getClass().getMethod("setDisplayOrientation", new Class[] { int.class });
            if (downPolymorphic != null)
                downPolymorphic.invoke(camera, new Object[] { angle });
        } catch (Exception e1) {
          e1.printStackTrace();
        }


int cameras=Camera.getNumberOfCameras();
        CameraInfo info=new CameraInfo();
        for(int i=0;i<cameras;i++){
            Camera.getCameraInfo(i, info);
            if(info.facing==CameraInfo.CAMERA_FACING_FRONT){
                camera=Camera.open(i);
                break;
            }
        }
        //没有前置摄像头
        if(camera==null) camera=Camera.open();
        try {
            camera.setPreviewDisplay(surfaceHolder);
            camera.setPreviewCallback(this);
        } catch (Exception e) {
            camera.release();//释放资源
            camera=null;
        }



把图片数据发送过去,

OutputStream out=socket.getOutputStream();
                    
                   YuvImage image = new YuvImage(arg0, PreviewFormat, w, h, null);
                   ByteArrayOutputStream os = new ByteArrayOutputStream();
                   Rect rect=new Rect(0, 0, w, h);
                   //1:将YUV数据格式转化成jpeg
                   if(!image.compressToJpeg(rect, 100, os))  return ;
                   
                   //2:将得到的字节数组压缩成bitmap
                    Bitmap bmp = Util.decodeVideoBitmap(os.toByteArray(), 200);
                    Matrix matrix=new Matrix();
                    matrix.setRotate(-90);
                    //3:旋转90
                    bmp=Bitmap.createBitmap(bmp, 0, 0, bmp.getWidth(), bmp.getHeight(), matrix, true);
                    //4:将最后的bitmap转化为字节流发送
                    ByteArrayOutputStream baos = new ByteArrayOutputStream();    
                    bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);   
                    out.write(baos.toByteArray());
                    out.flush();
                    out.close();
                    socket.close();


回调方法:接收到数据以后把数据设置上去

// 当视频来的时候我接收这个bitmap
    @Override
    public void onBitmapLoaded(Bitmap bitmap) {
        handler.sendMessage(handler.obtainMessage(REFRESH, bitmap));
        if(stop){
                try {
                    //代码实现模拟用户按下back键
                    String keyCommand = "input keyevent " + KeyEvent.KEYCODE_BACK;  
                    Runtime runtime = Runtime.getRuntime();  
                    runtime.exec(keyCommand);
                    stop=false;
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
    }

private Handler handler=new Handler(){
        public void handleMessage(android.os.Message msg) {
            myView.setBitmap((Bitmap)msg.obj);
        };
    };

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Flutter基础框架_插件式

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

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

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

打赏作者

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

抵扣说明:

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

余额充值