Base64-用js编码Videofile

时间:2016-07-06 13:51:00

标签: javascript video encoding base64

所以我有一个视频文件及其路径(例如/outerfolder/innerfolder/video.mp4)。我现在想用JS中的Base64编码这个视频,这样我就可以将它存储在数据库中。如果你可以帮我看一下视频文件的编码,我会非常感激。 提前谢谢。

1 个答案:

答案 0 :(得分: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 String转换为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;
}

现在你有一个返回Byte数组的函数,而不是你可以使用

var base64String = btoa(String.fromCharCode.apply(null, new Uint8Array(stringToArrayBuffer(YourEncodedMP4))));

你最终会得到一个StringBase64