मैं वर्तमान में MediaRecorder का उपयोग उपयोगकर्ता के वेबकैम/माइक से वीडियो स्ट्रीम के भाग प्राप्त करने के लिए कर रहा हूं जैसे:

navigator.mediaDevices
    .getUserMedia({audio: true, video: true})
    .then((stream) => {
      var mediaRecorder = new MediaRecorder(stream);
      mediaRecorder.start(5000);

      mediaRecorder.ondataavailable = (blobEvent) => {
        console.log('got 5 seconds of stream', blobEvent);
      }
    })

यह हर 5 सेकंड के वीडियो की धारा का एक हिस्सा उत्सर्जित करता है, हालांकि, मुझे लंबाई के बजाय एक विशेष आकार में भाग चाहिए। ऐसा करने का कोई स्पष्ट तरीका प्रतीत नहीं होता है, क्योंकि मैं एक नया शुरू किए बिना वर्तमान खंड के आकार की जांच नहीं कर सकता, और मैं तथ्य के बाद उन्हें जोड़ नहीं सकता। 2 मीडिया रिकॉर्डर का उपयोग करते हुए यह वह काम है जिसके साथ मैं आया हूं:

  const MIN_BLOB_SIZE = 5000000;
  var partSize = 0;
  navigator.mediaDevices
    .getUserMedia({audio: true, video: true})
    .then((stream) => {
      var mediaRecorder = new MediaRecorder(stream);
      var mediaRecorder2 = new MediaRecorder(stream)
      mediaRecorder.start();
      mediaRecorder2.start(5000)

      mediaRecorder2.ondataavailable = (blobEvent) => {
          console.log('got 5 seconds of data', blobEvent)
          const blob = blobEvent.data
          partSize += blob.size;
          if (partSize >= MIN_BLOB_SIZE) {
              partSize = 0;
              mediaRecorder.requestData();
          }
      }

      mediaRecorder.ondataavailable = (blobEvent) => {
        console.log('got a chunk at least 5mb', blobEvent);
      };
    });

लेकिन यह हैकी लगता है, अचूक हिस्सा देता है, मुझे यह सुनिश्चित करने की आवश्यकता है कि ये दो रिकॉर्डर पूरी तरह से समन्वयित हैं, त्रुटि प्रबंधन/किनारे के मामलों को जटिल बनाते हैं, और मैं 2 मीडिया रिकॉर्डर का उपयोग करने के प्रदर्शन प्रभावों के बारे में चिंतित हूं। एक मीडिया रिकॉर्डर के साथ ऐसा करने वाले उत्तर को स्वीकार करेंगे, या, यदि यह संभव नहीं है, अगर कोई मुझे समझा सकता है कि 2 मीडिया रिकॉर्डर ठीक प्रदर्शन के अनुसार हैं, तो मैं इसे भी स्वीकार करूंगा और इससे होने वाली जटिलताओं को संभालूंगा।

2
bryan60 4 सितंबर 2021, 19:06

1 उत्तर

सबसे बढ़िया उत्तर

चूजों को मिलाना

आप इस तथ्य के बाद कर सकते हैं >new Blob(blobArray). यदि आपको निश्चित आकार के ब्लॉब्स को संसाधित करने की आवश्यकता है, तो आप Blob.slice. यह कुछ इस तरह दिख सकता है:

const MIN_BLOB_SIZE = 5000000;
var partSize = 0, parts = [];
navigator.mediaDevices
  .getUserMedia({audio: true, video: true})
  .then((stream) => {
    var mediaRecorder = new MediaRecorder(stream);
    mediaRecorder.start(5000);
    mediaRecorder.ondataavailable = (blobEvent) => {
        console.log('got 5 seconds of data', blobEvent);
        const blob = blobEvent.data;
        partSize += blob.size;
        parts.push(blob);
        if (partSize >= MIN_BLOB_SIZE) {
            let bigBlob = new Blob(parts, { type: blob.type });
            // if the blob size doesn't need to be precise:
            partSize = 0;
            parts = [];
            // do something with bigBlob

            // or if the blob size needs to be precise:
            // let sizedBlob = bigBlob.slice(0, MIN_BLOB_SIZE, blob.type);
            // parts = [ bigBlob.slice(MIN_BLOB_SIZE, bigBlob.size, blob.type) ];
            // partSize = parts[0].size;
            // do something with sizedBlob

        }
    };
    mediaRecorder.onstop = (blobEvent) => {
        console.log('Recording Stopped');
        const blob = blobEvent.data;
        partSize += blob.size;
        parts.push(blob);
        let bigBlob = new Blob(parts, { type: blob.type });
        // do something with bigBlob, which may be smaller than MIN_BLOB_SIZE
    };
});

बिटरेट के साथ बूँद का आकार ट्यूनिंग

आपकी रुचि MediaRecorder API, जो आपको दिए गए रिकॉर्ड किए गए समय के लिए अधिक अनुमानित ब्लॉब आकार दे सकता है। हालांकि यह वीडियो और ऑडियो गुणवत्ता को प्रभावित कर सकता है।

2
Steve 14 सितंबर 2021, 03:48
उत्तर के लिए धन्यवाद, मैं इसे एक परीक्षण दूंगा और देख सकता हूं कि यह वही करता है जो मुझे करने की ज़रूरत है। बूँद की शुद्धता बहुत महत्वपूर्ण नहीं है। अधिक अच्छा है।
 – 
bryan60
8 सितंबर 2021, 21:06