2013-02-28 13 views
5

मैं एक ऐप बनाने का प्रयास कर रहा हूं जो टीसीपी या यूडीपी प्रोटोकॉल का उपयोग कर इंटरनेट पर एंड्रॉइड फोन के कैमरे से एक वीडियो स्ट्रीम करेगा। मैं वर्तमान में एंड्रॉइड फोन से अपने कंप्यूटर पर एक बाइट सरणी स्थानांतरित करने में सक्षम हूं जो एक सर्वर चला रहा है जिसे मैंने सी # में लिखा है। मैंने नेटवर्क पर .jpeg भेजकर और उन्हें 30 एफपीएस पर दिखाकर वीडियो स्ट्रीमिंग पहले किया है लेकिन यह बहुत अधिक बैंडविड्थ का उपयोग करता है।एंड्रॉइड पर कैमरे से लाइव वीडियो स्ट्रीम करें

सबसे पहले कैमरे से छवियों को कैप्चर करने का सबसे अच्छा तरीका क्या होगा? मैं देख रहा हूँ ...

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

यदि आप बैंडविड्थ के बारे में चिंतित हैं, तो शायद आपको एक जेपीईजी छवि बाइट सरणी भेजने की कोशिश करनी चाहिए? चूंकि data बाइट सरणी वाईयूवी प्रारूप में है, यह जेपीईजी एक से बड़ा है। एक जेपीईजी संपीड़न चलाते समय, आप इसकी गुणवत्ता को परिभाषित करने में सक्षम होते हैं, जो बाइट सरणी आकार भेजने पर प्रभाव डालता है।

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(); 
के रूप में परिभाषित किया गया था
संबंधित मुद्दे