मैं बाइनरी डेटा के लिए नया हूं और यूज़र मीडिया प्राप्त करता हूं, सर्वर पर getUserMedia (वीडियो/ऑडियो) स्ट्रीम करने के लिए अनुशंसित तरीका क्या होगा और फिर अन्य कनेक्शन के लिए स्ट्रीम (वीडियो/ऑडियो) तैयार करेगा?स्ट्रीमिंग getUserMedia सर्वर पर
getUserMedia -->(websockets)--> server -->(file.mp4)--> video.src
:
मेरे प्रारंभिक सोचा एक फ़ाइल (MP4) इस तरह के डेटा WebSockets पर डेटा भेजने और फिर लिखने के लिए किया गया था।
मैं MediaStreamRecorder को देखकर किया गया है और मैं बहुत की तरह एक बफर भेज सकते हैं:
multiStreamRecorder.ondataavailable = function (blobs) {
socket.emit('blobs', blobs)
};
सर्वर पर
मैं
{ audio: <Buffer 52 49 46 46 2c 10 04 00 57 41 56 45 66 6d 74 20 10 00 00 00 01 00 01 00 44 ac 00 00 10 b1 02 00 02 00 10 00 64 61 74 61 00 10 04 00 f8 ff 04 00 0d 00 ... >,
video: <Buffer 1a 45 df a3 40 20 42 86 81 01 42 f7 81 01 42 f2 81 04 42 f3 81 08 42 82 40 04 77 65 62 6d 42 87 81 02 42 85 81 02 18 53 80 67 10 0a 41 54 15 49 a9 66 ... >,
onDataAvailableEventFired: true }
अब मुझे लगता है कि मैं एक फ़ाइल को यह लिखना चाहिए मिलता है, उस फ़ाइल को सेवा दें और उसके बाद उस फ़ाइल को video
तत्व के स्रोत से अनुरोध करें .. यदि यह सही है तो मैं फ़ाइल सिस्टम में फ़ाइल लिखने के बारे में कैसे जाऊं? या मुझ से कुछ गलत हो रहा है?
मुझे समझ में आता है कि वेबआरटीसी में पी 2 पी कार्यक्षमता है, मैं वीडियो स्ट्रीम को ~ 50 या अधिक क्लाइंट्स की सेवा कर रहा हूं, इसलिए यह कोई विकल्प नहीं है। WebSocket समाधान के साथ
अद्यतन:
मैं अभी की तरह WebSockets में वापस डेटा उत्सर्जक हूँ:
socket.on('blobs', function(data){
socket.emit('blobs', data)
})
और क्लाइंट साइड एक mediaSource
और फिर एक video
तत्व में धकेलने पर इसे चिकनी रखने के लिए timestampOffset
के साथ।
var mediaSource = new MediaSource(),
mediaBuffer,
// init duration of 0 seems fine
duration = 0;
var video = $('video').get(0);
video.src = window.URL.createObjectURL(mediaSource);
mediaSource.addEventListener('sourceopen', function(e) {
mediaBuffer = mediaSource.addSourceBuffer('video/webm; codecs="vp8"')
mediaBuffer.addEventListener('update', function() {
// wait for mediaBuffer update to fire before setting the new duration
duration = video.duration
});
}, false);
socket.on('blobs', function (data) {
mediaBuffer.timestampOffset = duration;
mediaBuffer.appendBuffer(new Uint8Array(data.video));
});
MediaStreamRecorder लाइब्रेरी के बजाय [MediaRecorder API] (https://www.w3.org/TR/mediastream-recording/#MediaRecorderAPI) का उपयोग करके समाधान ढूंढते समय मुझे यह प्रश्न मिला। एक अन्य प्रश्न में एक अच्छा जवाब है [http://stackoverflow.com/a/27821586/3256574) – marcw
और server.js स्क्रिप्ट के बारे में क्या एक बंदरगाह को सुनकर संभाला गया कृपया मुझे सर्वर साइड स्क्रिप्ट चाहिए? –
@ASahra समाधान सर्वर पक्ष के लिए पहले से ही प्रदान किया गया है। ओपी सिर्फ 'socket.on (' blobs ', फ़ंक्शन (डेटा) {socket.emit (' blobs ', डेटा)} का उपयोग कर रहा है)' अन्य उपयोगकर्ताओं को स्ट्रीम भेजने के लिए, प्रभावी ढंग से इसे 1: 1 स्थानांतरण के रूप में उपयोग करने के लिए । – zillaofthegods