【问题标题】:How to create video element from base64 javascript?如何从 base64 javascript 创建视频元素?
【发布时间】:2021-02-03 09:23:04
【问题描述】:

如何从 Base64 数据创建视频元素?

我正在尝试将整个视频加载到内存中,因为浏览器很难流式传输这个 100MB 的 mp4 文件。 由于我希望此视频循环播放,因此我只想将其加载到内存中并从那里播放。 我用 blob 做到了这一点,但它使应用程序运行非常缓慢。我不知道为什么,但我看到其他人写的从 blob 创建视频元素会导致播放速度很慢(没有找到答案)。

所以我正在尝试从 base64 字符串创建视频,但视频似乎并未处于就绪状态。 或者不调用任何回调来说明数据已加载。

回调永远不会被调用,也不会打印“DataLoaded”。

这就是我尝试这样做的方式:

function CreateVideoElement(url, callback)
{
    var element = document.createElement('video');
    element.controls = false;
    element.style.display = "none";
    element.autoplay = false;
    element.setAttribute('webkit-playsinline', 'webkit-playsinline');
    element.setAttribute('playsinline', 'playsinline');
    element.onloadedmetadata = function() {
        callback();
    };
    element.src = url;
    return element;
}

function DownloadVideo(url)
{
    if (!videoFromMemory)
        return;
    fetch(url)
        .then(response = > {
        if (!response.ok) {
            throw new Error('Network response was not ok');
        }
        var u8 = new Uint8Array(response);
        var decoder = new TextDecoder('utf8');
        var b64encoded = btoa(decoder.decode(u8));
        textureVideo = CreateVideoElement("data:video/mp4;base64," + b64encoded, function(){
            isDataLoaded = true;
            console.log("Data loaded");
        });
        console.log('Video Complete');
    })
        .catch (error = > {
        console.error('There has been a problem with your fetch operation:', error);
    });
}
DownloadVideo("myUrl.mp4");

【问题讨论】:

    标签: javascript dom video base64 video-streaming


    【解决方案1】:

    Base64 编码的图像通常比相应的 JPG 大 20-30%。我想 100MB 视频的 Base64 版本比 100MB mp4 大得多 - 可能会使您的问题变得更糟......

    视频的尺寸是多少?宽度/高度/帧率?

    检查 FFprobe(这是一个 API - 只需将您的 URL 放在参数中: https://www.streamclarity.com/probe?url=https://res.cloudinary.com/tamas-demo/video/upload/ac_none,c_scale,w_550/v1547201869/web-perf/IMG_0460.mp4)

    【讨论】:

    • 我对文件增加 30% 没问题,但我希望它在 RAM 中,所以即使它更大,它从 RAM 流式传输的效果也好于从网络流式传输。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 2020-05-02
    • 1970-01-01
    • 2021-01-29
    • 1970-01-01
    相关资源
    最近更新 更多