javascript - 如何通过 javascript 更改 html5 视频的 src 而不会崩溃 chrome 或泄漏内存?

标签 javascript html google-chrome html5-video

我正在开发仅在 Chrome 上运行的应用程序。

我需要能够从正在播放的视频切换源。

我已经使用 javascript (&jQuery) 来更改 src 属性:

$fullscreenVideo.get(0).src = '/video/' + name + '.mp4'; // crash here
$fullscreenVideo.get(0).load();
$fullscreenVideo.get(0).play();

它工作了几次,但我的 chrome(试用了测试版和开发 channel )最终崩溃了(页面变得无响应)。

如果我尝试在最后一个代码块之前创建一个新元素:

$fullscreenVideo.remove();
$fullscreenVideo = $('<video id="video-fullscreen" width="800" height="600" loop="loop"></video>').appendTo("#page-fullscreen > div.fullscreen");

每次视频切换都会将 RAM 增加 20Mo 而不会退缩。

有没有办法跟踪/防止 chrome 在 src 更新时崩溃? 有没有办法强制释放内存?

最佳答案

我也遇到过同样的问题。
我在一些论坛上读到这是 chrome 的内存泄漏错误(有人说这只发生在 chrome 8 中,在 chrome 6 中工作正常,但我没有测试它)。

我还读到 sleep 有帮助。我试过了,确实如此,如果我在更改 url 属性并调用 load() 之前先休眠,崩溃次数就会减少。但经过多次更改后仍然继续崩溃。

然后,我尝试使用 setTimeout(与 sleep 不同,它不会阻塞 CPU,让 chrome 可以自由工作)。

它现在正在运行。 尝试查看我的代码是否有帮助。

var videoChangingPending = false;
function changeMovieSource(url, title){

        var $video = $('#video');
        try {
            document.getElementById('video').src = url;
        }
        catch (e) {
            alert(e);
        }     

        $video.attr('autoplay', 'true');
        $video.data('currentTitle', title);

        document.getElementById('video').load();

        videoChangingPending = false;
}    

function startPlayer(url, title) {

        if(videoChangingPending == true) 
            return;



        document.getElementById('video').pause();


        videoChangingPending = true;
        var changeMovieCallback = function(){ changeMovieSource(url, title);}
        var t = setTimeout(changeMovieCallback, 800);

}

关于javascript - 如何通过 javascript 更改 html5 视频的 src 而不会崩溃 chrome 或泄漏内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4694519/

相关文章:

javascript - D3 不显示但没有错误

javascript - 使用 JQ 的 Ajax 请求在 Chrome 中出现错误 : "Failed to load resource"

css - 在 Chrome 开发者工具中保存禁用的 CSS 属性

javascript - jQuery 可滚动 ul 通过箭头(并在到达列表的顶部或底部时删除箭头)

google-chrome - puppeteer/ headless Chrome 在阿尔卑斯字体问题

javascript - js 正则表达式来测试/查找无效的 css 类名(以数字开头)

javascript:完全删除 top.location.hash?

javascript - 从 sprite 图像中提取图像时,Canvas 无法正确绘制边缘

html - 如何将文件从 html 选择器发送到 golang apis?

html - 使用标签时按钮不会与输入字段对齐