mirror of
https://github.com/SrIzan10/vdo.ninja.git
synced 2026-05-01 11:05:24 +00:00
134 lines
3.7 KiB
HTML
134 lines
3.7 KiB
HTML
<html>
|
|
<body>
|
|
<div id="output"></div>
|
|
<script>
|
|
|
|
function getSupportedMimeTypes(media, types, codecs) {
|
|
const supported = [];
|
|
types.forEach((type) => {
|
|
const mimeType = `${media}/${type}`;
|
|
codecs.forEach((codec2) => { // video/webm;codecs=pcm
|
|
console.log(codec2);
|
|
codecs.forEach((codec) => {
|
|
try {
|
|
if (codec && codec2){
|
|
if (codec ==codec2){return;}
|
|
var x = [
|
|
|
|
mimeType+';codecs='+codec.toLowerCase()+', '+codec2.toLowerCase()+''//,
|
|
//mimeType+';codecs:'+codec.toLowerCase()+', '+codec2.toLowerCase()+'',
|
|
|
|
];
|
|
for (var i=0;i<x.length;i++){
|
|
let variation = x[i];
|
|
if (MediaRecorder.isTypeSupported(variation)){
|
|
try {
|
|
//options.mimeType = variation;
|
|
//new MediaRecorder(stream, options);
|
|
|
|
//mediaSource.addSourceBuffer(variation);
|
|
supported.push(variation);
|
|
break;
|
|
//console.log(options);
|
|
} catch(e){
|
|
//console.warn(options, e);
|
|
console.error(e);
|
|
}
|
|
}
|
|
}
|
|
} else if (codec){
|
|
|
|
var x = [
|
|
mimeType+';codecs='+codec.toLowerCase()//,
|
|
//mimeType+';codecs:'+codec.toLowerCase()
|
|
|
|
];
|
|
for (var i=0;i<x.length;i++){
|
|
let variation = x[i];
|
|
if (MediaRecorder.isTypeSupported(variation)){
|
|
try {
|
|
//options.mimeType = variation;
|
|
//console.log(options);
|
|
//new MediaRecorder(stream, options);
|
|
|
|
//mediaSource.addSourceBuffer(variation);
|
|
|
|
supported.push(variation);
|
|
break;
|
|
//console.log(options);
|
|
} catch(e){
|
|
//console.warn(options);
|
|
console.error(e);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} catch(e){console.error(e);}
|
|
});
|
|
|
|
});
|
|
if (MediaRecorder.isTypeSupported(mimeType))
|
|
supported.push(mimeType);
|
|
});
|
|
return supported;
|
|
};
|
|
|
|
|
|
var options = {};
|
|
options.videoBitsPerSecond = parseInt(2500 * 1024);
|
|
|
|
const videoTypes = ["webm", "mpeg", "mp4", "x-matroska"];
|
|
const audioTypes = ["webm", "mpeg", "ogg", "x-matroska"];
|
|
const codecs = ["vp9", "vp9.0", "vp8", "vp8.0", "avc1", "av1x", "av1", "h265", "h.265", "h264", "h.264", "av01.0.04M.08", "vp09.00.10.08", "avc1.42001E", ""]
|
|
const acodecs = ["opus", "pcm", "mp4a.40.2", "aac", "mpeg", "mp4a", "mp3", "vorbis", "L16", "wav", ""];
|
|
|
|
document.getElementById("output").innerHTML= "";
|
|
var supportedVideos = null;
|
|
var supportedAudios = null;
|
|
|
|
var stream = null;
|
|
var mediaSource = new MediaSource();
|
|
|
|
var video = document.createElement("video");
|
|
video.autoplay = true;
|
|
video.muted = false;
|
|
video.setAttribute("playsinline","");
|
|
video.src = URL.createObjectURL(mediaSource);
|
|
|
|
mediaSource.addEventListener('sourceopen', sourceOpen);
|
|
|
|
function sourceOpen(e) {
|
|
console.log("2");
|
|
navigator.mediaDevices.getUserMedia({audio:true,video:true}).then(function(s) {
|
|
stream = s;
|
|
console.log("START");
|
|
supportedAudios = getSupportedMimeTypes("audio", audioTypes, acodecs);
|
|
console.log("DONE AUDIO");
|
|
supportedVideos = getSupportedMimeTypes("video", videoTypes, [...codecs, ...acodecs]); // video/webm;codecs=pcm
|
|
|
|
for (var i=0;i<supportedVideos.length;i++){
|
|
document.getElementById("output").innerHTML += supportedVideos[i]+"<br/>";
|
|
}
|
|
for (var i=0;i<supportedAudios.length;i++){
|
|
document.getElementById("output").innerHTML += supportedAudios[i]+"<br/>";
|
|
}
|
|
console.log("DONE");
|
|
stream.getTracks(x=>{
|
|
stream.removeTrack(x);
|
|
x.stop();
|
|
x =null;
|
|
});
|
|
stream=null;
|
|
s = null;
|
|
}).catch(function(err) {
|
|
/* handle the error */
|
|
});
|
|
}
|
|
|
|
//for (var i=0;i<supportedAudios.length;i++){
|
|
//document.getElementById("output").innerHTML += supportedAudios[i]+"<br/>";
|
|
//}
|
|
</script>
|
|
|
|
</body>
|
|
</html> |