Сильно запутался с, казалось бы, противоречивой информацией.
Я пытаюсь собрать простой файл выбора и воспроизвести видеоплеер (для последующей потоковой передачи на сервер NodeJs).
У меня большие проблемы с тем, чтобы браузер воспроизвел выбранное видео.
Код здесь:
<script>
function newVideo ()
{
const mediaStream = new MediaStream();
const url = URL.createObjectURL(mediaStream);
var vplayer = document.getElementById('vplayer');
var vfile = document.getElementById('videoFile');
console.info(' vfile: ', vfile.files[0].name);
source.src = mediaStream;
// source.src = URL.createObjectURL(vfile.files[0].name);
// source.parent().load();
}
</script>
<video width = "400" controls>
<source src = "" id = "vplayer">
Your browser does not support HTML5 video.
</video>
<input type = "file" name = "file[]" id = "videoFile"
class = "file_multi_video"
onchange='newVideo();'
accept = "video/*">
Когда я запускаю это, выбирая видеофайл MP$, я получаю сообщение об ошибке:
Uncaught TypeError: Failed to execute 'createObjectURL' on 'URL': Overload resolution failed.
at newVideo (video.html:7:19)
at HTMLInputElement.onchange (video.html:23:114)
Чтобы исправить ошибку, вы можете создать BLOB-объект из выбранного файла. такая штука...
function newVideo() {
const vplayer = document.getElementById('vplayer');
const vfile = document.getElementById('videoFile');
const file = vfile.files[0];
if (file.type.indexOf('video') === -1) {
console.info('صيغة الملف غير مدعومة');
return;
}
const reader = new FileReader();
reader.onload = function() {
const blob = new Blob([new Uint8Array(reader.result)]);
const url = URL.createObjectURL(blob);
vplayer.src = url;
vplayer.play();
};
reader.readAsArrayBuffer(file);
}
Это не совсем сработало, но большое спасибо за это, так как это дает некоторые полезные указатели.
Вы должны создать URL-адрес для элемента <source>
, используя набор файлов во входных данных.
function newVideo ()
{
var vplayer = document.getElementById('vplayer');
var vfile = document.getElementById('videoFile');
console.info(' vfile: ', vfile.files[0].name);
var source = document.createElement('source')
source.src = URL.createObjectURL(vfile.files[0]);
vplayer.replaceChildren(source);
}
<video id = "vplayer" width = "400" controls></video>
<input type = "file" name = "file[]" id = "videoFile"
class = "file_multi_video"
onchange='newVideo();'
accept = "video/*">
Работал! Спасибо. Я немного смущен тем, что я прочитал, MSE - это путь в наши дни. Но я счастлив, что теперь это работает.
Отвечает ли это на ваш вопрос? Не удалось выполнить «createObjectURL» для «URL»: