Node.js ब्लब्स नहीं बना सकते हैं?


85

मैं नोड.जेएस के साथ काम कर रहा हूं और मैंने अपने ऑडियो को अपने नोड.जेएस सर्वर पर स्ट्रीम कर दिया है। अब मैंने ऑडियो बूँद के निर्माण की प्रक्रिया के दौरान देखा:

var audioBlob = new Blob([dataview], { type: 'audio/wav' });

कि मुझे नए ब्लॉब पर एक रेफरेंस मिलता है। ऐसा लगता है कि बूँद समर्थित नहीं है। मैं एक बूँद कैसे बना सकता हूं जिसे मैं नोड.जेएस एफएस मॉड्यूल के साथ बचाना चाहूंगा।

धन्यवाद दोस्तों!


4
बूँद क्या है? यह कहां से आता है?
पीट

1
हाँ, लेकिन एक बूँद एक देशी Node.js प्रकार नहीं है .. आप जानते हैं, संख्या, स्ट्रिंग, बूलियन, ऑब्जेक्ट, सरणी, आदि। आप एनपीएम के लिए ऑब्जेक्ट प्रोटोटाइप या मॉड्यूल क्यों नहीं बनाते हैं? क्या आपने किसी चीज़ की ज़रूरत के लिए एनपीएम की जाँच की?
प्रेषित

4
मेरे लिए ऐसा लगता है कि जिन लोगों ने ऐसा नहीं किया, उन्हें स्पष्ट रूप से इस सवाल का कोई हल नहीं मिला, कि मैं क्यों पूछ रहा हूं।
zer02

1
@ जोनाथन मैं इस पर एक नज़र होगा, लेकिन क्या MIME प्रकार को परिभाषित करना संभव है?
zer02

1
@ zer02 हां और नहीं। आप हमेशा से एक mimeसंपत्ति जोड़ सकते हैं Bufferक्योंकि यह अभी भी गतिशील है। लेकिन, MIME प्रकार बाइनरी डेटा के संचार के लिए हैं; डिस्क पर सहेजने के लिए इतना नहीं।
जोनाथन लोनोस्की

जवाबों:


33

इस समस्या का समाधान एक फ़ंक्शन बनाना है जो ऐरे बफ़र्स और नोड बफ़र्स के बीच परिवर्तित हो सकता है। :)

एक बाइनरी NodeJS बफर को जावास्क्रिप्ट ArrayBuffer में बदलें

हाल के नोड संस्करणों में यह सिर्फ:

let buffer = Buffer.from(arraybuffer);
let arraybuffer = Uint8Array.from(buffer).buffer;

क्या आप इसे पाने में कामयाब रहे? मैं ऑडियो को एक फ़ाइल में रिकॉर्ड कर सकता हूं, लेकिन मैं इसे नहीं सुन सकता, हालांकि इसके पास सही समय है।
गैब्रियल

क्या आप मेरी मदद कर सकते हैं? क्या तुमने ऐसा कुछ किया है? gist.github.com/anonymous/11302966
गेब्रियल

16
नमस्ते, मुझे आपकी तरह ही चाहिए, लेकिन मैं आपके समाधान को नहीं समझता। मेरे पास यह var AudioBlob = new Blob ([dataview], {type: 'audio / mp3'}) है; लेकिन आप अपने उदाहरण में "arrayBuffer" वैरिएबल का उपयोग करते हैं
oihi08

7
है let arraybufferके बराबर अपने उदाहरण में new Blob?
mesqueeb

1
ArrayBufferLikeसे कुछ गुण गायब प्रतीत होता है Blob:ts Argument of type 'ArrayBufferLike' is not assignable to parameter of type 'File | Blob'. Type 'ArrayBuffer' is not assignable to type 'File | Blob'. Type 'ArrayBuffer' is missing the following properties from type 'Blob': size, type, arrayBuffer, stream, text
Mateja Petrovic

11

बस उपयोग करें cross-blob:

const Blob = require("cross-blob");

new Blob([]);
//=> Blob {size: 0, type: ""}

// Global patch (to support external modules like is-blob).
globalThis.Blob = Blob;

0

सर्वर से क्लाइंट तक डेटा स्थानांतरित करने के लिए बेस 64 स्ट्रिंग का उपयोग करने पर विचार करने के लिए एक और समाधान है ।

मैं एक Node.js परियोजना पर काम कर रहा हूं जहां मुझे एक ArrayBuffer के रूप में ऑडियो डेटा प्राप्त होता है, और मैं उस डेटा को ब्राउज़र में भेजना और खेलना चाहता हूं। मेरे अधिकांश संघर्ष ग्राहक को ArrayBuffer भेजने या ArrayBuffer को बदलने और एक बफर भेजने की कोशिश करने से आए थे।

क्या मेरे लिए एक सरल समाधान होने के नाते समाप्त हो गया था

  1. ArrayBuffer को सर्वर पर Base64 एन्कोडेड स्ट्रिंग में कनवर्ट करें
  2. सर्वर से क्लाइंट के लिए आधार 64 स्ट्रिंग भेजें / भेजें
  3. क्लाइंट साइड पर एक ऑडियो एलिमेंट / ऑब्जेक्ट बनाएं और साउंड प्ले करें

मैंने ArrayBuffer> Base64 स्ट्रिंग रूपांतरण करने के लिए बेस 64-सरणीबफ़र का उपयोग किया (हालांकि, पैकेज के बिना ऐसा करना सरल हो सकता है)।

क्लाइंट साइड पर ऑडियो एलिमेंट बनाने के लिए मैंने यहां से टिप्स का इस्तेमाल किया ।

* मैंने परीक्षण सीमाओं के तरीके से बहुत कुछ नहीं किया है - इसलिए मुझे नहीं पता कि यह बड़ी ऑडियो फ़ाइलों को कैसे संभाल सकता है।


-2

सुझाव के रूप में, आप इसे पढ़ना चाह सकते हैं: http://howtonode.org/really-simple-file-uploads

मेरा मतलब है कि मुझे लगता है मैं नहीं जानता कि आप क्या करने की कोशिश कर रहे हैं। ब्लब्स के लिए एक मॉड्यूल नहीं हो सकता है, लेकिन अगर आप डिस्क पर कुछ लिखना चाहते हैं, तो एफएस मॉड्यूल है .. यह कोड सीधे काम नहीं करेगा, लेकिन ..

var fs = require('fs')
  , express = require('express')

app.post('/upload', function (req, res) {
  // asynch call to write file to disk
  fs.write("/tmp/file.mp3", req.params.body, function (err) {
    if (err) console.log(err)
  });
  res.end();
});

बस एक एमपी 3, या वास्तव में / अपलोड करने के लिए कुछ भी पोस्ट करें, और यह इसे डिस्क पर लिख देगा। आप जो चाहें वैधीकरण कर सकते हैं।


नमस्कार, मैंने GetUserMedia Audio के Audio Buffers को अपने node.js सर्वर पर स्ट्रीम किया और सरणियों को WAV में एनकोड करना चाहते हैं।
zer02

मैंने रिकॉर्डर का उपयोग किया है। जेएस मैंने उसे बढ़ाया भी। समस्या ब्लॉब सर्वरकृत है ग्राहक क्लाइंट पक्षीय नहीं। मुझे यह जानने की जरूरत है कि क्या नोड.जेएस के अंदर एक ब्लॉब बनाने का कोई तरीका है, क्योंकि मैं ऑडियो को सीधे नोड.जेएस में स्ट्रीमिंग कर रहा हूं और सर्वर पर wav / mp3 फाइल बनाना चाहूंगा। :-)
zer02

क्या आप बूँद की सामग्री ले सकते हैं, उन्हें एक बफर में डाल सकते हैं, और बफर को गोली मार सकते हैं? नोड को पता है कि बफ़र्स को कैसे संभालना है, और आप उनमें बाइनरी डेटा डाल सकते हैं।
प्रेषित

मैंने पहले से ही क्लाइंट साइडेड बाइनरी बाइनरी को नोड (जेएस) (स्ट्रीम) में स्थानांतरित कर दिया है, जब ऑडियो क्लाइंट पक्ष पर पहली जगह पर रिकॉर्ड किया गया था और इसे नोड.जेएस के साथ संसाधित किया और यह काम करता है। इस बार मैं पूरी प्रक्रिया पर नियंत्रण रखना चाहता हूं।
zer02
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.