繁体   English   中英

从Android上的相机流式直播视频

[英]Stream live video from camera on android

我正在尝试制作一个应用程序,它将使用TCP或UDP协议通过互联网从Android手机的摄像头流式传输视频。 我目前能够将一个字节数组从Android手机传输到我的计算机,该计算机正在运行我用C#编写的服务器。 之前我通过网络发送.jpeg并以30 fps的速度显示它们,但这耗费了太多的带宽。

首先从摄像机捕获图像的最佳方法是什么? 我在看......

onPictureTaken(byte[] data, Camera camera)

要么

onPreviewFrame (byte[] data, Camera camera)

我只对byte []数据感兴趣,然后对其进行编码/压缩,然后通过网络发送。

其次,我应该如何将这些帧转换为压缩视频,这是一个可以通过网络流式传输的字节数组? 我不太关心视频质量,我更关心减少带宽。

这是我想要做的,但我不需要高质量的视频。 https://code.google.com/p/spydroid-ipcamera/

如果您打算使用任何编码器然后用户自己编码数据

onPreviewFrame (byte[] data, Camera camera)

或者您可以通过发送rtsp流尝试不同的方法。 SpyDroid是一个非常好的项目,可以了解这种方法。

如果您担心带宽,也许您应该尝试发送JPEG图像字节数组? 由于data字节数组是YUV格式,因此它大于JPEG格式。 运行JPEG压缩时,您可以定义它的质量,这会影响发送字节数组的大小。

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

 YuvImage image = new YuvImage(data, ImageFormat.NV21,
                            size.width, size.height, null);
 baos = new ByteArrayOutputStream();
 int jpeg_quality = 100;

 image.compressToJpeg(new Rect(0, 0, size.width, size.height),
                         jpeg_quality, baos);

 byte[] sending_array = baos.toByteArray();

} 

其中size先前定义为

Camera.Size size = parameters.getPreviewSize();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM