i'm trying to implement a dynamic loading for an html5 video tag.
when a user picks a video file via the <input type="file">
element, i want to load it dynamically to a <video>
element, and append it to body.
the following code works on Chrome but not on Safari:
function load_video(file) { // this came from <input type="file"> change event
var reader = new FileReader();
reader.onload = function(event) {
var blob = new Blob([event.target.result]);
window.URL = window.URL || window.webkitURL;
var blobURL = window.URL.createObjectURL(blob);
$('body').append('<video controls width="320" src="' + blobURL + '" onloadedmetadata="alert('loaded meta data!')"></video>');
}
}
now,
if i'll replace src="' + blobURL + '"
with a local filepath, say- /media/videos/vid1.mp4
, the video loads in Safari as well, but I need it to load the video from blobURL
.
any suggestions?
thanks alot.
UPDATE:
as Rod says, unfortunately it's a known bug in Safari (not supported by it's media backend).
I don't know if the solution applies to video as well as audio, but I had the same issue with Safari audio and I discovered that the solution was to specify the content type when constructing the blob:
var blob = new Blob([arrayBuffer], {type: 'audio/mpeg'});
url = webkitURL.createObjectURL(blob);
I have the same exact issue with Safari 6.1, getting MEDIA_ERR_SRC_NOT_SUPPORTED
when trying to load a file from an input, like so:
var fileInput = document.querySelector('#file'),
video = document.querySelector('video');
fileInput.addEventListener('change', function(evt){
evt.preventDefault();
var file = evt.target.files[0];
var url = window.URL.createObjectURL(file);
video.src = url;
video.addEventListener('error', function(err){
// This craps out in Safari 6
console.error(video.error, err);
alert('nay :(');
});
});
Try video.addEventListener('error', logError)
or something to figure out if you have the same issue. I suspect Safari doesn't support yet videos with blob
-type source.
UPDATE: Yup, it's a bug. See https://bugs.webkit.org/show_bug.cgi?id=101671 and help us let the webkit maintainers this is something that needs to be fixed.
UPDATE, 2015: It works now, updated the code.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With