2010-10-29 16 views
7

1- स्ट्रीमिंग वीडियो के लिए उपयोग करने के लिए कौन सा बेहतर है? टीसीपी या यूडीपी सॉकेट और क्यों?लाइव स्ट्रीमिंग (सॉकेट) - ऑडियो और वीडियो को कैसे सिंक करें?

2- लाइव स्ट्रीमिंग करते समय, ऑडियो और वीडियो सर्वर से अलग-अलग आ रहे हैं, तो मैं यह कैसे सुनिश्चित कर सकता हूं कि मैं जिस वीडियो को प्रदर्शित करता हूं और जिस डिवाइस पर मैं ऑडियो चलाता हूं वह सिंक हो रहा है?

उत्तर

5

मैंने कुछ समय पहले एक वॉयस चैट एप्लिकेशन लिखा था और टीसीपी सवाल से बाहर था, यूडीपी मल्टीकास्टिंग वास्तव में एकमात्र तरीका है यदि आप निकट-वास्तविक डेटा प्रवाह की तलाश में हैं।

  1. गिरा पैकेट: वहाँ हालांकि UDP पर सामान स्ट्रीमिंग के साथ दो मुख्य मुद्दों है। ऑडियो के मामले में, यह एक बहुत ही आसान फिक्स है। आम तौर पर गिराए गए पैकेट एक श्रव्य अंतर नहीं बनाते हैं (पैकेट अलग-अलग डिकंप्रेस्ड होते हैं)। हालांकि, वीडियो से निपटने पर, विशेष रूप से यदि वीडियो संपीड़ित होता है (यह आमतौर पर होता है), उचित हस्तांतरण प्रोटोकॉल का पता लगाना जो नेटवर्क मजबूती सुनिश्चित करता है, कम से कम कहने का एक कठिन काम है, खासकर यदि आप इसे स्क्रैच से कर रहे हैं। वीडियो फ्रेम विभिन्न पैकेट में विभाजित हैं। यह पता लगाना कि इन पैकेट गुम होने पर क्या करना मुश्किल है।
  2. ऑडियो और वीडियो के बीच सिंक्रनाइज़ेशन। यह एक बहुत ही कठिन समस्या है और मैं आरटीएसपी (रीयल-टाइम स्ट्रीमिंग प्रोटोकॉल) जैसे प्रोटोकॉल पर पढ़ने का सुझाव देता हूं। यह एक आसान काम नहीं है, लेकिन यहां कुछ प्रारंभिक जानकारी है: http://www.cs.columbia.edu/~hgs/rtsp/ - कभी-कभी यह अलग सिंक पैकेट भेजकर किया जाता है (कुछ प्रोटोकॉल इन्हें टीसीपी पर भेजते हैं) जो खिलाड़ी को बताते हैं कि ध्वनि को वीडियो के साथ कैसे मेल खाना चाहिए।
1

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

0

आज भी यूट्यूब धाराओं HTTP पर ... यहाँ जो ब्राउज़र क्लाइंट के लिए एक फ़ाइल धाराओं एक NodeJS अनुप्रयोग है ... एक प्रारंभिक बिंदु के रूप में उपयोग अच्छी तरह से सिंक में ऑडियो के साथ स्ट्रीम वीडियो रहने के लिए

// usage 
// do following on server side (your laptop running nodejs) 
// node this_file.js 
// 
// then once above is running point your browser at 
// http://localhost:8888 
// 
// of course your browser could be on your mobile or own custom app 



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

var path = "/path/to/audio/or/video/file/local/to/server/cool.mp4"; // put any audio or video file here 

var port = 8888; 
var host = "localhost"; 

http.createServer(function (req, res) { 

    var stat = fs.statSync(path); 
    var total = stat.size; 

    if (req.headers.range) { // meaning client (browser) has moved the forward/back slider 
             // which has sent this request back to this server logic ... cool 
    var range = req.headers.range; 
    var parts = range.replace(/bytes=/, "").split("-"); 
    var partialstart = parts[0]; 
    var partialend = parts[1]; 

    var start = parseInt(partialstart, 10); 
    var end = partialend ? parseInt(partialend, 10) : total-1; 
    var chunksize = (end-start)+1; 
    console.log('RANGE: ' + start + ' - ' + end + ' = ' + chunksize); 

    var file = fs.createReadStream(path, {start: start, end: end}); 
    res.writeHead(206, { 'Content-Range': 'bytes ' + start + '-' + end + '/' + total, 'Accept-Ranges': 'bytes', 'Content-Length': chunksize, 'Content-Type': 'video/mp4' }); 
    file.pipe(res); 

    } else { 

    console.log('ALL: ' + total); 
    res.writeHead(200, { 'Content-Length': total, 'Content-Type': 'video/mp4' }); 
    fs.createReadStream(path).pipe(res); 
    } 
}).listen(port, host); 

console.log("Server running at http://" + host + ":" + port + "/"); 
संबंधित मुद्दे