如何使用javascript将视频文件转换为字符串?

时间:2016-02-29 06:04:25

标签: javascript html5 video signalr video-processing

我在signalR工作,我想通过分割不同部分的视频文件,将视频文件从一个客户端发送到另一个客户端。 我已经通过拆分图像src数据发送了图像,并在另一个客户端上接收了它。

    document.getElementById("fileUpload").addEventListener("change", readImage, false);
        function readImage() {
            if (this.files && this.files[0]) {
                var FR = new FileReader();
                FR.onload = function (e) {
                    var img = new Image();
                    img.onload = function () {
                        var imageString = img.src.toString()
                        var spliceStr = "";
                        var i = 0;
                        while (i < imageString.length)
                        {
                            spliceStr = imageString.substring(i, (i+50000));
                            ImageSpliceArray.push(spliceStr);
                            i = i + 50000;
                        }
                        $("#imageId").html('<img src="' + img.src + '"/>');
                        testR.server.hello("Start", imageString.length,"");
                        testR.server.hello("FragmentCount", ImageSpliceArray.length,"");
                        for(k=0;k<ImageSpliceArray.length;k++)
                        {
                            testR.server.hello("FragmentData", ImageSpliceArray[k], k);
                        }
                        testR.server.hello("Done", "", "");
                    };
                    img.src = e.target.result;

                };
                FR.readAsDataURL(this.files[0]);
            }
        }

现在我想为视频做同样的事情。我从input type ="file"读了一段视频。然后我知道将该视频放在html视频元素中,但我希望视频中的所有数据都以字符串格式通过将该字符串分成不同的部分来将该视频发送给另一个。

注意:SignalR用于将文本从一个客户端发送到另一个客户端。数据大小约为(50kb)。

1 个答案:

答案 0 :(得分:3)

这是今天我发现的第二件事,我认为这是不可能的。我拍了一个小的MP4视频文件(86KB),然后将其编码到这个site的数据URI库64中。我创建了一个<video>元素的简单测试页面,并设置了src属性:

`src="data:video/mp4;base64,AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZj....

所以一段文字可以是一个视频,虽然我无法在我的驱动器上找到一个50KB的视频文件,我相信86KB的文件大小就足够了。您可以在Plunker

上看到它

article

中找到了这个
function getDataUri(url, callback) {
    var image = new Image();

image.onload = function () {
    var canvas = document.createElement('canvas');
    canvas.width = this.naturalWidth; // or 'width' if you want a special/scaled size
    canvas.height = this.naturalHeight; // or 'height' if you want a special/scaled size

    canvas.getContext('2d').drawImage(this, 0, 0);

    // Get raw image data
                                                       callback(canvas.toDataURL('image/png').replace(/^data:image\/(png|jpg);base64,/, ''));

    // ... or get as Data URI
    callback(canvas.toDataURL('image/png'));
};

image.src = url;

}

// Usage
 getDataUri('/logo.png', function(dataUri) {
// Do whatever you'd like with the Data URI!
 });

You can modify this script to use videos instead of images.