从Android上的摄像头流直播视频
问题描述:
我正在尝试制作一个应用程序,它将通过互联网使用TCP或UDP协议从Android手机的摄像头流式传输视频。我目前能够将一个字节数组从android手机传输到正在运行我用C#编写的服务器的计算机。我之前通过在网络上发送.jpeg并以30 fps显示它们来完成流视频,但这会占用过多的带宽。从Android上的摄像头流直播视频
首先从相机捕捉图像的最佳方式是什么? 我看......
onPictureTaken(byte[] data, Camera camera)
或
onPreviewFrame (byte[] data, Camera camera)
我在字节[]数据只是有兴趣考虑到其与编码/压缩它,然后将其发送在网络上。
其次,我应该如何将这些帧转换为一个可以通过网络流式传输的字节数组的压缩视频?我不关心视频质量,我更关心减少带宽。
下面是我想要做的,但我不需要高质量的视频。 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();