79 lines
2 KiB
JavaScript
79 lines
2 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
export const MediaUtils = {
|
|
getMetadata(aElement) {
|
|
if (!aElement) {
|
|
return null;
|
|
}
|
|
return {
|
|
src: aElement.currentSrc ?? aElement.src,
|
|
width: aElement.videoWidth ?? 0,
|
|
height: aElement.videoHeight ?? 0,
|
|
duration: aElement.duration,
|
|
seekable: !!aElement.seekable,
|
|
audioTrackCount:
|
|
(aElement.audioTracks?.length ??
|
|
aElement.mozHasAudio ??
|
|
aElement.webkitAudioDecodedByteCount ??
|
|
MediaUtils.isAudioElement(aElement))
|
|
? 1
|
|
: 0,
|
|
videoTrackCount:
|
|
(aElement.videoTracks?.length ?? MediaUtils.isVideoElement(aElement))
|
|
? 1
|
|
: 0,
|
|
};
|
|
},
|
|
|
|
isVideoElement(aElement) {
|
|
return (
|
|
aElement && ChromeUtils.getClassName(aElement) === "HTMLVideoElement"
|
|
);
|
|
},
|
|
|
|
isAudioElement(aElement) {
|
|
return (
|
|
aElement && ChromeUtils.getClassName(aElement) === "HTMLAudioElement"
|
|
);
|
|
},
|
|
|
|
isMediaElement(aElement) {
|
|
return (
|
|
MediaUtils.isVideoElement(aElement) || MediaUtils.isAudioElement(aElement)
|
|
);
|
|
},
|
|
|
|
findMediaElement(aElement) {
|
|
return (
|
|
MediaUtils.findVideoElement(aElement) ??
|
|
MediaUtils.findAudioElement(aElement)
|
|
);
|
|
},
|
|
|
|
findVideoElement(aElement) {
|
|
if (!aElement) {
|
|
return null;
|
|
}
|
|
if (MediaUtils.isVideoElement(aElement)) {
|
|
return aElement;
|
|
}
|
|
const childrenMedia = aElement.getElementsByTagName("video");
|
|
if (childrenMedia && childrenMedia.length) {
|
|
return childrenMedia[0];
|
|
}
|
|
return null;
|
|
},
|
|
|
|
findAudioElement(aElement) {
|
|
if (!aElement || MediaUtils.isAudioElement(aElement)) {
|
|
return aElement;
|
|
}
|
|
const childrenMedia = aElement.getElementsByTagName("audio");
|
|
if (childrenMedia && childrenMedia.length) {
|
|
return childrenMedia[0];
|
|
}
|
|
return null;
|
|
},
|
|
};
|