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直接直播摄像头视频流的主要内容,如果未能解决你的问题,请参考以下文章