2014-04-30 12 views
7

कृपया, सर्वर से क्लाइंट (ब्राउज़र) से NODE.js और संभवतः सॉकेट के माध्यम से मीडिया फ़ाइल (ogg, mp3, spx ..) स्ट्रीम (प्रसारण) करने के लिए कोई आसान तरीका है। आईओ?नोड (सॉकेट) लाइव ऑडियो स्ट्रीम/प्रसारण

मुझे सर्वर की तरफ ऑडियो इनपुट रिकॉर्ड करना होगा और फिर कई क्लाइंट के लिए इसे रीयलटाइम खेलना होगा। मैं binary.js या socket.io धाराओं के साथ गड़बड़ कर रहा हूं लेकिन इसे सही नहीं मिला।

मैंने speex, vorbis या lame के साथ ऑडियो इनपुट एन्कोड करने का प्रयास किया है और फिर उसे एफएस द्वारा क्लाइंट में लोड किया है, लेकिन मैं सफल रहा हूं। या क्या मुझे पीसीएम पर कब्जा करना है और फिर ब्राउज़र में इसे डीकोड करना है?

इस पर कोई सुझाव, मैंने कभी भी कुछ भी नहीं पाया है।

किसी भी सुझाव, लिंक और विचारों के लिए बहुत धन्यवाद।

+0

क्या आपको कोई जवाब मिला? – TheEnvironmentalist

+0

मुझे लाइव ऑडियो स्ट्रीमिंग में भी रूचि है। जितना अधिक मैं इसके बारे में पढ़ रहा हूं, नोड स्ट्रीम, बैक-प्रेशर, बफरिंग और आपको जिस चीज की देखभाल करने की ज़रूरत है, उतनी कम मुझे पता है कि इससे कैसे निपटना है।एक [अच्छी पोस्ट] है (http://stackoverflow.com/questions/21921790/best-approach-to-real-time-http-streaming-to-html5-video-client)। मैं SHOUTcast/Icecast का उपयोग करने से बचने की कोशिश कर रहा हूं लेकिन शायद यह सबसे आसान तरीका होगा। – maxdec

+0

[एमडीएन पर विषय] (https://developer.mozilla.org/en-US/Apps/Build/Audio_and_video_delivery/Live_streaming_web_audio_and_video) – maxdec

उत्तर

-1

आप इसे नोड और आरटीसी के साथ कर सकते हैं। SimpleWebRTC या EasyRTC जैसे उपयोग करने के लिए कुछ टूल तैयार हैं। जो मैंने पहले से ही वीडियो का परीक्षण किया है, उसके लिए अभी भी एक परेशानी है, लेकिन ऑडियो बहुत अच्छा काम करता है।

2

वेब ब्राउज़र पर आपके पास the HTML5 video element and the audio element है। उनमें से दोनों स्रोत हैं। Each web browser supports different codecs natively. तो यदि आप एमपी 3 स्ट्रीम करने की कोशिश कर रहे हैं तो आप इसके लिए देखना चाहेंगे।

आपको सॉकेट.ओओ की आवश्यकता नहीं है, आपको केवल HTTP की आवश्यकता है। आपका ऐप एक फ़ाइल, music.ogg पढ़ रहा है, और प्रत्येक खंड के लिए यह पढ़ता है, यह इसे http सर्वर के माध्यम से भेज देगा। यह एक एकल HTTP अनुरोध होगा जो फ़ाइल को स्थानांतरित होने तक खुला रखा जाता है।

यहाँ अपने html कैसा दिखाई देगा:

<audio src="http://example.com/music.ogg"></audio> 

और अपने NodeJS कोड कुछ इस तरह हो जाएगा (यह परीक्षण नहीं किया):

var http = require('http'); 
var fs = require('fs'); 

http.on('request', function(request, response) { 
    var inputStream = fs.open('/path/to/music_file.ogg'); 
    inputStream.pipe(response); 
}) 

मैं केवल ReadableStream.pipe विधि का उपयोग कर रहा हूँ inputStream और उपरोक्त कोड के लिए http और fs मॉड्यूल पर। आप (ogg के लिए उदाहरण के लिए, एमपी 3 से) ऑडियो फ़ाइल ट्रांसकोड चाहते हैं तो आप एक मॉड्यूल है कि और पाइप तो response में ट्रांसकोडर में फ़ाइल से डेटा प्राप्त करना चाहते हैं:

// using some magical transcoder 
inputStream.pipe(transcoder).pipe(response); 

जब भी यह लिखना समाप्त हो जाता है तो स्ट्रीम end स्ट्रीम पर कॉल करेगा ताकि फ़ाइल को पढ़ा जा रहा है (और transcoded) जैसे HTTP अनुरोध समाप्त हो जाएगा।

+2

धन्यवाद, उत्तर के लिए बहुत कुछ है, लेकिन मुझे वास्तव में क्या मतलब था कि सभी ग्राहकों को सिंक्रनाइज़ किए गए "लाइव स्ट्रीम" के रूप में कुछ बनाना है, तो क्या आपको लगता है कि उदाहरण के लिए ऑडियो स्रोत को भागों में काटने का कोई तरीका है (या रिकॉर्ड किए गए पीसी का उपयोग करें स्रोत) और उन भागों को ग्राहकों को प्रदान करते हैं? आखिरकार, वेबआरटीसी के रास्ते में वास्तव में अच्छे परिणाम हैं लेकिन अधिक ग्राहकों से जुड़े रहने के लिए टिकाऊ नहीं है। – ango

+2

आपको पाइप चीजों के लिए 'ओपन' के बजाय 'createReadStream' का उपयोग करने की आवश्यकता है। – wieczorek1990

3

आप स्ट्रीम पर काम करने वाले पैकेजों को देखना चाहते हैं और वहां से यह आवश्यकतानुसार आउटपुट में आपकी स्ट्रीम को पाइप करने के बारे में है। एक्सप्रेस या केवल अंतर्निहित HTTP का उपयोग करके आप इसे आसानी से पूरा कर सकते हैं। यहाँ osx-audio जो एक पीसीएम प्रवाह प्रदान करता है, lame के आसपास बनाया गया एक उदाहरण है जो एमपी 3 करने के लिए एक धारा सांकेतिक शब्दों में बदलना कर सकते हैं, और एक्सप्रेस: ​​

var Webcast = function(options) { 

    var lame = require('lame'); 
    var audio = require('osx-audio'); 
    var fs = require('fs'); 

    // create the Encoder instance 
    var encoder = new lame.Encoder({ 
    // input 
    channels: 2,  // 2 channels (left and right) 
    bitDepth: 16,  // 16-bit samples 
    sampleRate: 44100, // 44,100 Hz sample rate 

    // output 
    bitRate: options.bitrate, 
    outSampleRate: options.samplerate, 
    mode: (options.mono ? lame.MONO : lame.STEREO) // STEREO (default), JOINTSTEREO, DUALCHANNEL or MONO 
    }); 

    var input = new audio.Input(); 
    input.pipe(encoder); 

    // set up an express app 
    var express = require('express') 
    var app = express() 

    app.get('/stream.mp3', function (req, res) { 
    res.set({ 
     'Content-Type': 'audio/mpeg3', 
     'Transfer-Encoding': 'chunked' 
    }); 
    encoder.pipe(res); 
    }); 

    var server = app.listen(options.port); 
} 

module.exports = Webcast; 

आप अपने इनपुट धारा सबसे दिलचस्प हिस्सा हो सकता है मिलता है, लेकिन है कि इस पर निर्भर करेगा आपके कार्यान्वयन। लोकप्रिय request पैकेज स्ट्रीम के आसपास भी बनाया गया है, इसलिए यह केवल एक HTTP अनुरोध दूर हो सकता है!

+0

आपके पास सॉकेट.ओओ के साथ इसका उदाहरण है और आपके पास इसका उदाहरण है: http: app.get ('/ stream.mp3', फ़ंक्शन (req, res) { res.set ({ 'सामग्री-प्रकार': 'ऑडियो/एमपीईजी 3', 'स्थानांतरण-एन्कोडिंग': 'खंडित' }); एन्कोडर.pipe (res); }); और socket.io के साथ? ऐसा कुछ? सॉकेट.ऑन ('ऑडियो', फ़ंक्शन (डेटा) { एन्कोडर.pipie (डेटा); // निकास कहां है या ग्राहक को भेजता है? }); – cmarrero01

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