2013-02-28 135 views
5

我正在嘗試製作一個應用程序,它將通過互聯網使用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/

回答

4

如果您打算通過使用任何編碼器,然後用戶

onPreviewFrame (byte[] data, Camera camera) 

編碼自己的數據也可以在不同的方法,通過發送RTSP流的嘗試。 SpyDroid是瞭解這種方法的一個非常好的項目。

0

如果你關心帶寬,也許你應該嘗試發送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();