2016-07-06 1 views
0

Итак, у меня есть видеофайл и путь к нему (например, /outerfolder/innerfolder/video.mp4). Теперь я хочу кодировать это видео с помощью Base64 в JS, чтобы я мог хранить его в базе данных. Если бы вы могли помочь мне с кодировкой видеофайла, я был бы очень благодарен. Спасибо заранее.Base64-кодирование видеофайла в js

ответ

1

Вы можете кодировать файл с помощью следующей функции для преобразования файла в 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

+0

Когда я делаю это так, это просто дает мне имя файла в Base64. Я действительно хочу, чтобы кодировать ** целое видео ** как Base64, как я могу делать с картинками. – njoye

+0

Используете ли вы входной тег type = file? Не могли бы вы обновить свой пост с помощью некоторого кода. – lumee