android wifi直接直播摄像头视频流

Posted

技术标签:

【中文标题】android wifi直接直播摄像头视频流【英文标题】:android wifi direct live camera video stream 【发布时间】: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());
                        
                    
                
            );
        
    
;

【问题讨论】:

【参考方案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);

                    
                );
            

【讨论】:

以上是关于android wifi直接直播摄像头视频流的主要内容,如果未能解决你的问题,请参考以下文章

基于手机4G信号做现场视频直播的教程,实现全终端可以观看

Tensorflow Lite 示例:Wifi 摄像头支持? [关闭]

Android视频编码和直播推流教程-杨万里-专题视频课程

Android 中实时获取户外监控摄像头的视频信息怎么做?

Android使用FFMpeg实现推送视频直播流到服务器

关于云事通监控摄像头手机微信直播系统业务介绍