2013-03-26 3 views
8

मैं इसे गुगल रहा हूं और थोड़ी देर के लिए स्टैक ओवरफ्लो देख रहा हूं लेकिन समाधान नहीं मिला है - इसलिए पोस्ट।नोड.जेएस और वेबसाकेट्स के साथ स्ट्रीमिंग बाइनरी

मैं जिज्ञासा से बाहर नोड.जेएस और वेबसाकेट के साथ खेल रहा हूं। मैं क्लाइंट को कुछ बाइनरी डेटा (एक एमपी 3) स्ट्रीम करने की कोशिश कर रहा हूं। मेरा कोड अब तक नीचे है लेकिन स्पष्ट रूप से इरादे से काम नहीं कर रहा है।

मुझे संदेह है कि मेरी समस्या यह है कि मैं वास्तव में सर्वर से बाइनरी डेटा नहीं भेज रहा हूं और कुछ स्पष्टीकरण/सहायता चाहूंगा।

यहाँ मेरा सर्वर ...

var fs = require('fs'); 
var WebSocketServer = require('ws').Server; 

var wss = new WebSocketServer({port: 8080,host:"127.0.0.1"}); 
wss.on('connection', function(ws) {  
    var readStream = 
    fs.createReadStream("test.mp3", 
    {'flags': 'r', 
     'encoding': 'binary', 
     'mode': 0666, 
     'bufferSize': 64 * 1024}); 

    readStream.on('data', function(data) { 
     ws.send(data, {binary: true, mask: false}); 
    }); 
}); 

और मेरे मुवक्किल ...

context = new webkitAudioContext(); 
var ws = new WebSocket("ws://localhost:8080"); 
ws.binaryType = 'arraybuffer'; 

ws.onmessage = function (evt) { 
    context.decodeAudioData(
    evt.data, 
     function(buffer) { 
      console.log("Success"); 
     }, 
     function(error) { 
      console.log("Error"); 
     }); 
}; 

कॉल हमेशा डिकोड करने के लिए त्रुटि कॉलबैक में खत्म। मुझे लगता है कि ऐसा इसलिए है क्योंकि यह खराब डेटा प्राप्त कर रहा है।

तो मेरा सवाल यह है कि मैं फ़ाइल को बाइनरी के रूप में सही ढंग से कैसे स्ट्रीम करूं?

धन्यवाद

+0

आप मुझे इस के लिए पूर्ण उदाहरण या कोड प्रदान करें कर सकते हैं के रूप में मैं Node.js और वेब सॉकेट सीख रहा हूँ और मेरे आवश्यकताओं को भी प्रतिक्रिया के लिए एक ही –

उत्तर

0

समस्या हल करने से पहले उन्हें इकट्ठा करने के लिए अपने ग्राहक को संशोधित।

मैं दूर करने का एक संयोजन के साथ इस समस्या का समाधान हो " 'एन्कोडिंग': 'बाइनरी'" विकल्प पारित कर से पैरामीटर के लिए "createReadStream()" और कम से समाधान ...

decodeAudioData returning a null error

मेरी कुछ टिप्पणियों के अनुसार, जब मैंने createReadStream विकल्पों को अपडेट किया, तो पहला खंड खेल रहा था लेकिन अन्य सभी भाग decodeAudioData() से त्रुटि कॉलबैक निष्पादित कर रहे थे। ऊपर दिए गए लिंक में समाधान ने मेरे लिए यह तय किया है। ऐसा लगता है कि decodeAudioData() यह थोड़ा चुनौतीपूर्ण है कि इसे प्राप्त किए जाने वाले भाग को स्वरूपित किया जाना चाहिए। वे वैध हिस्सा जाहिरा तौर पर होना चाहिए ...

Define 'valid mp3 chunk' for decodeAudioData (WebAudio API)

+2

आप मुझे इस के लिए पूर्ण उदाहरण या कोड प्रदान करें कर सकते हैं के रूप में मैं Node.js और वेब सॉकेट सीख रहा हूँ और मेरे आवश्यकताओं html में audo स्ट्रीमिंग हैं –

3

क्या आपके सर्वर कर रही है कि यह संदेश भेज रहा है अपने ग्राहक को 64 KB मात्रा में द्विआधारी ऑडियो डेटा से मिलकर है। decodeAudioData पर कॉल करने से पहले आपके क्लाइंट को ऑडियो फ़ाइल का पुनर्निर्माण करना चाहिए।

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

अब आप दो विकल्प हैं:

  1. आप पूरी फ़ाइल (fs.read) लोड ws.send साथ धारा घटनाओं का उपयोग कर और पूरे फाइल भेजने के बिना (करने के लिए आसान)
  2. आप धारा घटनाओं का उपयोग डेटा की मात्रा को स्वीकार करने और बुला decodeAudioData
+0

धन्यवाद कर रहे हैं। मैं इसे एक दूंगा। मैं पहले fs.read पर देख रहा था लेकिन फ़ाइल को एक ही बार में पढ़ना नहीं चाहता। – fatlog

+0

असल में, बस उस समाधान के बारे में सोच रहा है।क्या इसका मतलब यह नहीं है कि यह वास्तव में फ़ाइल स्ट्रीम नहीं कर रहा है? मैं इसे शुरू करने से पहले पूरी फाइल प्राप्त करने का इंतजार करूँगा ... – fatlog

+0

बस एक अपडेट। मेरे विचार मुद्दे पर ... संबंधित हो सकता है http://stackoverflow.com/questions/10470742/define-valid-mp3-chunk-for-decodeaudiodata-webaudio-api मैं बजाय readfile का उपयोग कर की कोशिश की है createReadSTream और यह पूरी तरह से काम करता है - जैसे फ़ाइल पास हो जाती है और खेलना शुरू हो जाता है। हालांकि यह स्ट्रीम नहीं किया गया है ... – fatlog

संबंधित मुद्दे