השיטה 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 ל-10FPS. שום דבר לא מוקלט אם לא מצולמת שום דבר ב-<canvas>
, וצולם צילום של 10fps גם אם ה-<canvas>
מצולמת במהירות של 30fps. במפרט שלcaptureStream
קיים באג עם דיון נוסף.המימדים של סרטון
captureStream()
תואמים ל-<canvas>
שבו הוא הופעל.
הדגמות
אזור עריכה
וידאו
תמיכה
- לוח הציור
captureStream()
: Firefox 43 ואילך, Chrome בגרסה 50 ואילך עם chrome://flags/#activate-EXPERIMENTal-web-platform-features מופעלת, או Chrome בגרסה 52 ומעלה כברירת מחדל. - וידאו ואודיו
captureStream()
: Firefox 47, Chrome 52 ואילך עם chrome://flags/#activate-EXPERIMENTal-web-platform-features מופעלת, או Chrome בגרסה 53 ומעלה כברירת מחדל.