Итак, у меня есть видеофайл и путь к нему (например, /outerfolder/innerfolder/video.mp4
). Теперь я хочу кодировать это видео с помощью Base64 в JS, чтобы я мог хранить его в базе данных. Если бы вы могли помочь мне с кодировкой видеофайла, я был бы очень благодарен. Спасибо заранее.Base64-кодирование видеофайла в js
ответ
Вы можете кодировать файл с помощью следующей функции для преобразования файла в ArrayBuffer:
[обновление]
//<input type=file id="encondeMP4">
var encodeMP4 = document.getElementById('encondeMP4');
Теперь добавьте прослушиватель событий, когда входной файл изменяется
window.onload = function() {
//add eventlisteners
encodeMP4.addEventListener('change', someFunction);
}
Вам нужна функция для обработки вызова от eventlistener
function someFunction(){
encode(arrayBufferToString)
}
function encode(callback){
var file = encodeMP4.files[0];
var reader = new FileReader();
reader.onload = function(e){
var contents = e.target.result;
var contentBuffer = arrayBufferToString(contents);
var array = callback(contentBuffer);
}
reader.readAsArrayBuffer(file);
}
В массиве var у вас теперь есть MP4, находящийся в двоичном формате, в предыдущей функции есть внутренняя переменная, поэтому вам нужно будет адаптировать этот код к вашим потребностям. Может быть, глобальный контейнер под названием YourEncodedMP4 = array
function arrayBufferToString(buffer) {
var binary = '';
var bytes = new Uint8Array(buffer);
var len = bytes.byteLength;
for (var i = 0; i < len; i++) {
binary += String.fromCharCode(bytes[ i ]);
}
return binary;
}
теперь вы готовы вызвать эту функцию, чтобы преобразовать MP4 enconded строку в Base64 один.
Возможно, вы сохраните содержимое массива var, но помните, что этот вызов является асинхронным.
Теперь вы можете использовать эту функцию, используя контейнер «YourEncodedMP4»
function stringToArrayBuffer(YourEncodedMP4) {
var arrBuff = new ArrayBuffer(YourEncodedMP4.length);
var writer = new Uint8Array(arrBuff);
for(var i = 0, len = YourEncodedMP4.length; i < len; i++){
writer[i] = YourEncodedMP4.charCodeAt(i);
}
return writer;
}
теперь есть функция, которая возвращает массив байтов, чем вы могли бы использовать
var base64String = btoa(String.fromCharCode.apply(null, new Uint8Array(stringToArrayBuffer(YourEncodedMP4))));
вы в конечном итоге с StringBase64
Когда я делаю это так, это просто дает мне имя файла в Base64. Я действительно хочу, чтобы кодировать ** целое видео ** как Base64, как я могу делать с картинками. – njoye
Используете ли вы входной тег type = file? Не могли бы вы обновить свой пост с помощью некоторого кода. – lumee