HTMLMediaElement.srcObject
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
HTMLMediaElement ì¸í°íì´ì¤ì srcObject ìì±ì
HTMLMediaElementì ê´ë ¨ë 미ëì´ ìì¤ ìí ì íë ê°ì²´ë¥¼
ì¤ì íê±°ë ë°íí©ëë¤.
srcObject ê°ì²´ë MediaStream, a MediaSource, a
Blob ëë File(Blobì ìì)ì¼ ì ììµëë¤.
ì°¸ê³ :
2020ë
3ì íì¬ Safarië§ì´ srcObject를 ìë²½íê² ì§ìí©ëë¤. ì¦, MediaSource, MediaStream, Blob, ê·¸ë¦¬ê³ File ê°ì²´ë¥¼ ê°ì¼ë¡ ì¬ì©í©ëë¤. ë¤ë¥¸ ë¸ë¼ì°ì ë MediaStream ê°ì²´ë¥¼ ì§ìí©ëë¤. ë¤ë¥¸ ë¸ë¼ì°ì ë¤ì´ ì§ìí ëê¹ì§ URL.createObjectURL()ì ì¬ì©íì¬ URLì ìì±íê³ ì´ë¥¼ HTMLMediaElement.srcì í ë¹íë ê²ì ê³ ë ¤íì¸ì(ìì ë ìëì ììµëë¤). ëí ë²ì 108ë¶í° Chromiumì í´ë¹ ê°ì²´ì MediaSourceHandle ì¸ì¤í´ì¤(ì커ìì ì ì¡ë¨)를 srcObjectì í ë¹íì¬ ì ì© ì커 MediaSource ê°ì²´ ì°ê²°ì ì§ìí©ëë¤.
ê°
MediaStream, MediaSource, Blob ëë
File ê°ì²´(ì¤ì ë¡ ì§ìëë ë´ì©ì í¸íì± í를 ì°¸ê³ íì¸ì).
ì¬ì© ì¼ë
ì´ì ë²ì ì 미ëì´ ìì¤ ëª
ì¸ë createObjectURL()ì
ì¬ì©íì¬ ê°ì²´ URLì ë§ë ë¤ì src를 í´ë¹ URLë¡
ì¤ì í©ëë¤. ì´ì srcObject를 MediaStreamì¼ë¡ ì§ì ì¤ì í ì ììµëë¤.
ìì
>기본 ìì
ì´ ìì ìì MediaStreamì ìë¡ ìì±ë <video> ììì
í ë¹ë©ëë¤.
const mediaStream = await navigator.mediaDevices.getUserMedia({ video: true });
const video = document.createElement("video");
video.srcObject = mediaStream;
ì´ ìì ìì MediaSourceë ìë¡ ìì±ë <video> ììì
í ë¹ë©ëë¤.
const mediaSource = new MediaSource();
const video = document.createElement("video");
video.srcObject = mediaSource;
src ìì±ì ëí í´ë°± ì§ì
ìë ìì ë srcObjectê° ì§ìëì§ ìë ê²½ì° ê°ì²´ URLì ë§ë¤ê³ ì´ë¥¼ srcì
í ë¹í´ì¼ íë ì´ì ë¸ë¼ì°ì ë²ì ì ì§ìí©ëë¤.
먼ì ì¹´ë©ë¼ì MediaStreamì´ ìë¡ ìì±ë <video>
ììì í ë¹ëê³ ì´ì ë¸ë¼ì°ì ì ëí í´ë°±ì´ ììµëë¤.
const mediaStream = await navigator.mediaDevices.getUserMedia({ video: true });
const video = document.createElement("video");
if ("srcObject" in video) {
video.srcObject = mediaStream;
} else {
// ì¬ë¼ì§ ìì ì´ë¯ë¡ ì ë¸ë¼ì°ì ììë ì¬ì©íì§ ë§ì¸ì.
video.src = URL.createObjectURL(mediaStream);
}
ë째, ìë¡ì´ MediaSourceê° ìë¡ ìì±ë <video>
ììì í ë¹ëë©° ì´ì ë¸ë¼ì°ì ë° ìì§ MediaSourceì ì§ì í ë¹ì
ì§ìíì§ ìë ë¸ë¼ì°ì ì ëí í´ë°±ì´ ììµëë¤.
const mediaSource = new MediaSource();
const video = document.createElement("video");
// ì´ì ë¸ë¼ì°ì ë srcObjectê° ììì ììµëë¤.
if ("srcObject" in video) {
try {
video.srcObject = mediaSource;
} catch (err) {
if (err.name !== "TypeError") {
throw err;
}
// ë§ì½ srcObjectê° ìëë¼ë MediaStreamë§ ì§ìíë ê²½ì°ê° ìì ì ììµëë¤.
video.src = URL.createObjectURL(mediaSource);
}
} else {
video.src = URL.createObjectURL(mediaSource);
}
ì커ìì MediaSource를 구ì±íê³ ì¬ìì ìí´ ë©ì¸ ì¤ë ë(main thread)ì ì ë¬í기
MediaSource.handle ìì±ì ì ì© ì커 ë´ìì ì¡ì¸ì¤ í ì ìì¼ë©° ê²°ê³¼ ê° MediaSourceHandle ê°ì²´ë postMessage() í¸ì¶ì íµí´ ì커를 ìì±í ì¤ë ë(ì´ ê²½ì° ë©ì¸ ì¤ë ë)ë¡ ì ì¡ë©ëë¤.
// ë´ë¶ ì ì© ì커
let mediaSource = new MediaSource();
let handle = mediaSource.handle;
// ì커를 ë§ë 컨í
ì¤í¸ë¡ í¸ë¤ì ì ì¡í©ëë¤
postMessage({ arg: handle }, [handle]);
mediaSource.addEventListener("sourceopen", () => {
// SourceBuffers를 ìì±íê³ ê°ì ¸ì¨(fetched) 미ëì´ë¡ ì±ì°ê¸° ì ì
// MediaSourceìì sourceopenì 기ë¤ë¦¬ì¸ì(await). MediaSourceë
// HTMLMediaElementì ì°ê²°ëê³ readyStateê° "open"ì´ ë ëê¹ì§
// SourceBuffers ìì±ì ìë½íì§ ììµëë¤.
});
ë©ì¸ ì¤ë ëìì message ì´ë²¤í¸ í¸ë¤ë¬ë¥¼ íµí´ í¸ë¤ì ìì íê³ HTMLMediaElement.srcObject ìì±ì íµí´ <video>ì 첨ë¶íê³ ë¹ëì¤ë¥¼ playí©ëë¤.
worker.addEventListener("message", (msg) => {
let mediaSourceHandle = msg.data.arg;
video.srcObject = mediaSourceHandle;
video.play();
});
ì°¸ê³ :
MediaSourceHandleë ê³µì ì커 ëë ìë¹ì¤ ì커를 íµí´ ì±ê³µì ì¼ë¡ ì ì¡í ì ììµëë¤.
ëª ì¸
| Specification |
|---|
| HTML > # dom-media-srcobject-dev > |
| Media Source Extensions⢠> # htmlmediaelement-extensions-srcobject > |