التقاط MediaStream من لوحة أو فيديو أو عنصر صوتي

تتيح لك الطريقة captureStream() التقاط MediaStream من عنصر <canvas> أو <audio> أو <video>.

يتيح ذلك تسجيل بث فيديو أو صوت من أيّ من هذه العناصر أو بثّه مباشرةً عبر WebRTC أو دمجه مع تأثيرات أو MediaStream أخرى في <canvas>. بعبارة أخرى، تتيح captureStream() لـ MediaStream نقل الوسائط ذهابًا وإيابًا بين عناصر اللوحة أو الصوت أو الفيديو، أو إلى RTCPeerConnection أو MediaRecorder.

في العرض التوضيحي التالي (متاح من عيّنات WebRTC)، يتم بث MediaStream تم التقاطه من عنصر لوحة على اليسار من خلال اتصال بين نظيريَين في WebRTC مع عنصر الفيديو على اليمين:

(تتوفّر روابط أدناه تؤدي إلى المزيد من أمثلة اللوحات والفيديوهات.)

رمز captureStream() بسيط.

بالنسبة إلى <canvas>:

var canvas = document.querySelector('canvas');
var video = document.querySelector('video');

// Optional frames per second argument.
var stream = canvas.captureStream(25);
// Set the source of the <video> element to be the stream from the <canvas>.
video.srcObject = stream;

بالنسبة إلى <video>:

var leftVideo = document.getElementById('leftVideo');
var rightVideo = document.getElementById('rightVideo');

leftVideo.onplay = function() {
    // Set the source of one <video> element to be a stream from another.
    var stream = leftVideo.captureStream();
    rightVideo.srcObject = stream;
};

ولكن لماذا؟

تتيح لك الطريقة captureStream() تسجيل المحتوى أو بثّه مباشرةً من اللوحة وعناصر الوسائط:

  • تسجيل أسلوب اللعب وبثّه من <canvas>
  • تسجيل فيديو من كاميرا، ثم إضافة محتوى أو تأثيرات إضافية
  • إنشاء تأثيرات "نافذة ضمن النافذة" من فيديوهات متعددة باستخدام <canvas>
  • دمج الفيديوهات والصور (من الملفات أو الكاميرا أو كليهما) في <canvas>
  • بث فيديو مباشر يتم تشغيله من ملف
  • استخدام رسالة صوتية أو رسالة فيديو مسجّلة في رسالة فيديو أو بريد صوتي

في الأساس، يسمح captureStream() لـ JavaScript بإنشاء "مواد" و"حقنها" في MediaStream.

التفاصيل الصغيرة

  • سيؤدي محاولة استخدام captureStream() مع عنصر وسائط ينفِّذ حماية المحتوى من خلال إضافات الوسائط المشفَّرة إلى طرح استثناء.

  • عند الالتقاط من <canvas>، يتم ضبط الحد الأقصى لمعدل عرض اللقطات عند استدعاء captureStream(). على سبيل المثال، يشير الرمز canvas.captureStream(10) إلى أنّه يتم عرض اللوحة بين 0 و10 لقطات في الثانية. لا يتم تسجيل أي بيانات عندما لا يتم رسم أي محتوى على <canvas>، ويتم تسجيل 10 لقطات في الثانية حتى إذا كان يتم رسم <canvas> بمعدّل 30 لقطة في الثانية. تم الإبلاغ عن خطأ يتضمّن المزيد من المناقشات في مواصفات captureStream.

  • تتطابق أبعاد فيديو captureStream() مع <canvas> الذي تمّت jego تشغيله عليه.

إصدارات تجريبية

اللوحة

فيديو

الدعم

  • تطبيق "لوحة الرسم" captureStream(): الإصدار 43 من Firefox أو الإصدارات الأحدث، أو الإصدار 50 من Chrome والإصدارات الأحدث مع تفعيل الإعداد chrome://flags/#enable-experimental-web-platform-features، أو الإصدار 52 من Chrome والإصدارات الأحدث تلقائيًا.
  • الفيديو والصوت captureStream(): Firefox 47 وChrome 52 والإصدارات الأحدث مع تفعيل chrome://flags/#enable-experimental-web-platform-features أو Chrome 53 والإصدارات الأحدث تلقائيًا

التعرف على المزيد