【问题标题】:Stream live video from camera on android从安卓上的摄像头流式传输实时视频
【发布时间】:2013-02-14 01:09:07
【问题描述】:

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

首先,从相机捕获图像的最佳方式是什么? 我在看……

onPictureTaken(byte[] data, Camera camera)

onPreviewFrame (byte[] data, Camera camera)

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

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

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

【问题讨论】:

    标签: java android camera video-streaming live-streaming


    【解决方案1】:

    如果您打算使用任何编码器自行编码数据,那么用户

    onPreviewFrame (byte[] data, Camera camera)
    

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

    【讨论】:

      【解决方案2】:

      如果您关心带宽,也许您应该尝试发送 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();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-26
        • 1970-01-01
        • 1970-01-01
        • 2013-12-15
        • 2013-05-14
        • 1970-01-01
        • 2013-05-24
        相关资源
        最近更新 更多