2012-11-21 34 views
7

पर लिखें, मैं अपने क्लाइंट को वेबकैम डेटा स्ट्रीम करता हूं।एंड्रॉइड: कैमरा डेटा स्ट्रीम करें और इसे सर्वर

मैं देख सकता हूं कि डेटा ('डेटा') पर सुनकर डेटा आ रहा है। हालांकि, जब मैं इसे बनाता हूं तो मैं इसे देखने में सक्षम नहीं हूं और शायद यह कचरा डेटा है या कुछ शीर्षलेख गायब है। वीएलसी इसे नहीं खेल सकता है।

मेरा अगला कदम ब्राउज़र के लिए वास्तविक समय स्ट्रीम करने योग्य है।

मैं क्या गलत कर रहा हूं?

net = require('net'); 
fs = require('fs'); 

// Start a TCP Server 
net.createServer(function (socket) {  
    console.log("client connected"); 
    var file = fs.createWriteStream("temp.mp4"); 
    socket.pipe(file, {end: false}); 

    socket.on('end', function(){ 
     console.log("ended"); 
    }); 
}).listen(5000); 

मैं अगर यह वास्तव में वीडियो आउटपुट को कैप्चर किया देखने के लिए परीक्षण किया:

$ mediainfo temp.mp4 

General 
Complete name       : temp.mp4 
Format         : H.263 
Format version       : H.263 
File size        : 126 KiB 

Video 
Format         : H.263 
Width         : pixel0 
Height         : pixel0 
Color space        : YUV 
Chroma subsampling      : 4:2:0 
Bit depth        : 8 bits 
Compression mode       : Lossy 

और यह mediaRecorder की स्थापना (मान लें सॉकेट से जुड़ा हुआ है, कोई समस्या नहीं)

mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); 
    mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); 
    mediaRecorder.setVideoSize(320, 240); 
    mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); 
    mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 

    ParcelFileDescriptor pfd = ParcelFileDescriptor.fromSocket(socket);  
    mediaRecorder.setOutputFile(pfd.getFileDescriptor()); 

    mediaRecorder.setMaxDuration(5000); 
    mediaRecorder.setMaxFileSize(5000000); 
निम्नलिखित एंड्रॉयड कोड है

उत्तर

6

कुछ खुली स्रोत परियोजनाएं हैं जो इस समस्या को हल करती हैं, जैसे Spydroid (ब्राउज़र/वीएलसी स्ट्रीमिंग) और Android IP Camera (ब्राउज़र स्ट्रीमिंग)। आपका कार्यान्वयन Spydroid के समान लगता है, इसलिए हो सकता है कि आप इसके कुछ कोड को अनुकूलित कर सकें।

केंद्रीय समस्या यह है कि MediaRecorder सॉकेट में कच्चे वीडियो फ्रेम लिख रहा है। इसे हेडर लिखने के लिए वीडियो समाप्त होने तक प्रतीक्षा करने की आवश्यकता है, लेकिन उन्हें फ़ाइल की शुरुआत में दिखाई देने की आवश्यकता है। चूंकि सॉकेट खोजने योग्य नहीं है, इसलिए हेडर सही स्थान पर नहीं लिखे जा सकते हैं। ऊपर से जुड़ी परियोजनाएं आरटीएसपी (स्पाइड्रॉइड) में स्ट्रीम को पैकेट करके या ब्राउज़र (एंड्रॉइड आईपी कैमरा) पर अभी भी छवियों की एक श्रृंखला "स्ट्रीमिंग" करके इस समस्या से निपटती हैं।

+0

मुझे नहीं पता था कि यह कच्ची फ़ाइल लिख रहा था, धन्यवाद! मैं अब मुख्य समस्या देखता हूं – Mustafa