HTMLMediaElement: srcObject ããããã£
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
srcObject 㯠HTMLMediaElement ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ããããã£ã§ã HTMLMediaElement ã«é¢é£ä»ããããã¡ãã£ã¢ã½ã¼ã¹ãæä¾ãããªãã¸ã§ã¯ããè¨å®ã¾ãã¯åå¾ãã¾ããé¢é£ä»ãããã¦ããªããã° null ã§ãã
ãã®ãªãã¸ã§ã¯ã㯠MediaStreamãMediaSourceãBlob ãï¼Blob ããæ´¾çãã¦ããï¼ File ã§ãã
ã¡ã¢:
2020 å¹´ 3 æç¾å¨ã Safari ã®ã¿ã srcObject ã«å¯¾ãã¦å®å
¨ã«ãããªãã¡ MediaSourceãMediaStreamãBlobãFile ã®ãªãã¸ã§ã¯ããå¤ã«ãããã¨ã«å¯¾å¿ãã¦ãã¾ããä»ã®ãã©ã¦ã¶ã¼ã¯ MediaStream ã«å¯¾å¿ãã¦ãã¾ããä»ã®ãã©ã¦ã¶ã¼ã追ãã¤ãã¾ã§ã代æ¿ã¨ã㦠URL.createObjectURL() ã使ç¨ã㦠URL ã使ããããã HTMLMediaElement.src ã«ä»£å
¥ããããã«ãã¦ãã ããï¼ä»¥ä¸ã®ä¾ãåç
§ãã¦ãã ããï¼ãããã«ããã¼ã¸ã§ã³ 108 ã® Chromium ã¯ãå°ç¨ã¯ã¼ã«ã¼ã® MediaSource ãªãã¸ã§ã¯ããããã®ãªãã¸ã§ã¯ãã®ï¼ã¯ã¼ã«ã¼ãã転éãããï¼ MediaSourceHandle ã¤ã³ã¹ã¿ã³ã¹ã srcObject ã«å²ãå½ã¦ããã¨ã§è£
çãããã¨ã«å¯¾å¿ãã¦ãã¾ãã
å¤
MediaStreamãMediaSourceãBlobãFile ãªãã¸ã§ã¯ããï¼å®éã«ä½ã対å¿ããã¦ããã®ãã¯äºææ§ä¸è¦§è¡¨ã確èªãã¦ãã ãããï¼é¢é£ä»ãããã¦ããªããã° nullã
使ç¨ä¸ã®æ³¨æ
ã¡ãã£ã¢ã½ã¼ã¹ä»æ§æ¸ã®å¤ããã¼ã¸ã§ã³ã§ã¯ããªãã¸ã§ã¯ã URL ã使ããããã« createObjectURL() ã使ç¨ãã¦ããããã® URL ã src ã«è¨å®ããå¿
è¦ãããã¾ããã ç¾å¨ã¯ãMediaStream ã srcObject ã«ç´æ¥è¨å®ã§ãã¾ãã
ä¾
>åºæ¬çãªä¾
ãã®ä¾ã§ã¯ãã¡ãã£ã¢ã½ã¼ã¹ãæ°ãã使ãã <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);
}
次ã«ãæ°ãã使ããã <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;
}
// 対å¿ãã¦ãã¦ãã MediaStream ã«ãã対å¿ãã¦ããªãå ´åãããã¾ãã
video.src = URL.createObjectURL(mediaSource);
}
} else {
video.src = URL.createObjectURL(mediaSource);
}
ã¯ã¼ã«ã¼ã§ MediaSource ãæ§ç¯ãããããã¡ã¤ã³ã¹ã¬ããã«æ¸¡ãã¦åçãã
å°ç¨ã¯ã¼ã«ã¼å
é¨ã§ MediaSource.handle ããããã£ã«ã¢ã¯ã»ã¹ã§ããçµæã¨ã㦠MediaSourceHandle ãªãã¸ã§ã¯ãã postMessage() ã³ã¼ã«ã«ããã¯ã¼ã«ã¼ã使ããã¹ã¬ããï¼ãã®å ´åã¯ã¡ã¤ã³ã¹ã¬ããï¼ã«è»¢éããã¾ãã
// å°ç¨ã¯ã¼ã«ã¼å
let mediaSource = new MediaSource();
let handle = mediaSource.handle;
// ã¯ã¼ã«ã¼ã使ããã³ã³ããã¹ãã§ãã³ãã«ãå¦çãã
postMessage({ arg: handle }, [handle]);
mediaSource.addEventListener("sourceopen", () => {
// MediaSource ã§ sourceopen ãå¾
ã£ã¦ãããSourceBuffer ã使ãã
// åå¾ããã¡ãã£ã¢ãæå
¥ãã¦ãã ãããMediaSource ã¯ã
// HTMLMediaElement ã«æ¥ç¶ããããã® readyState ã "open" ã«ãªãã¾ã§
// SourceBuffer ã®ä½æãåãå
¥ãã¾ããã
});
ã¡ã¤ã³ã¹ã¬ããã§ã¯ãmessage ã¤ãã³ããã³ãã©ã¼ãããã³ãã«ãåãåãã <video> ã« HTMLMediaElement.srcObject ããããã£ãéãã¦ããã追å ãã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 > |