【问题标题】:android wifi direct live camera video streamandroid wifi直接直播摄像头视频流
【发布时间】:2015-04-18 15:28:03
【问题描述】:

我已经在两个安卓设备之间建立了一个 wifi 直接 p2p 连接,以 720x480 分辨率将实时摄像头馈送从设备 A 流式传输到设备 B。它工作正常,但很不稳定,即使在近距离(

我的问题是:有没有更有效的方法来做到这一点?我不需要惊人的帧速率(也许是 20 ......?)。它只需要更加一致。

        private PreviewCallback previewCb_ = new PreviewCallback() {

    public void onPreviewFrame(byte[] data, Camera c) {

        frame = data;
        imageFormat = c.getParameters().getPreviewFormat();

        if (!socket.isClosed()) {

            mHandler.post(new Runnable() {
                public void run() {
                    if (stream != null){
                        try
                        {
                            //Log.d(ChooseFunction.TAG, "writing to stream");
                            buffer.reset();
                            synchronized(frame){
                                new YuvImage(frame, imageFormat, CameraView.IMG_WIDTH, CameraView.IMG_HEIGHT, null).compressToJpeg(area, 100, buffer);
                            }
                            buffer.flush();

                            // write the content header
                            stream.write(("--" + boundary + "\r\n" +
                                    "Content-type: image/jpg\r\n" +
                                    "Content-Length: " + buffer.size() +
                                    "\r\n\r\n").getBytes());



                            buffer.writeTo(stream);
                            stream.write("\r\n\r\n".getBytes());
                            stream.flush();
                        }
                        catch (IOException e)
                        {
                            Log.d(ChooseFunction.TAG, e.getMessage());
                        }
                    }
                }
            });
        }
    }
};

【问题讨论】:

    标签: android video stream p2p wifi-direct


    【解决方案1】:

    我已使用 OpenCV 进行此转换,以提高将相机预览数据转换为位图的性能。

    //Use openCV manager or openCV native libs directly in your project
            Log.i(TAG, "Trying to load OpenCV library");
        if (!OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_3_2_0, this, mOpenCVCallBack)) {
            Log.e(TAG, "Cannot connect to OpenCV Manager");
        }
    
    private BaseLoaderCallback mOpenCVCallBack = new BaseLoaderCallback(this) {
        @Override
        public void onManagerConnected(int status) {
            switch (status) {
                case LoaderCallbackInterface.SUCCESS: {
                    //Init mat object
                    mYuv = new Mat(480 + 480 / 2, 640, CvType.CV_8UC1);
                    mRgb = new Mat();
                    Log.i(TAG, "OpenCV loaded successfully");
                    OpenCVLoaded = true;
                }
                break;
                default: {
                    super.onManagerConnected(status);
                }
                break;
            }
        }
    };
    
    if (OpenCVLoaded) {
                    //put camera preview data in mat
                    mYuv.put(0, 0, instantPhotoData);
                    Imgproc.cvtColor(mYuv, mRgb, Imgproc.COLOR_YUV420sp2RGB, 4);
    
                    // convert to bitmap:
                    final Bitmap rawBitmap = Bitmap.createBitmap(mRgb.cols(), mRgb.rows(), Bitmap.Config.ARGB_8888);
                    Utils.matToBitmap(mRgb, rawBitmap);
                    previewImageView.setImageBitmap(rawBitmap);
    
                        }
                    });
                }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-01
      • 2020-04-20
      • 1970-01-01
      • 2015-11-21
      • 2014-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多