【问题标题】:How to properly dispose of an HTML5 Video and close socket or connection如何正确处理 HTML5 视频并关闭套接字或连接
【发布时间】:2015-11-20 18:51:01
【问题描述】:

我正在构建一个包含视频记录列表的网页。单击每个视频记录会在同一页面上打开一个模式对话框,其中包含记录的详细信息和 HTML5 视频播放器。

用户可以根据需要多次打开、关闭和打开另一个视频。然而,特别是在 Chome 上,在 3-5 个视频之后,浏览器开始挂起超过两分钟,同时显示一条消息“等待套接字”。

做了一些阅读,我将其范围缩小到 Chrome 无法打开超过 6 个与同一主机的连接。

我在处理媒体播放器的方式上一定做错了。我相信即使播放器的 html 已从 dom 中删除,套接字也会在一段时间内对媒体保持开放。

使用: 引导程序, MediaElement.js, HTML5 视频, MVC, 控制器返回 FilePathResult 的“范围请求”

// Handling Bootstrap Modal Window Close Event 
// Trigger player destroy
$("#xr-interaction-detail-modal").on("hidden.bs.modal", function () {
    var player = xr.ui.mediaelement.xrPlayer();
    if (player) {
        player.pause();
        player.remove();
    }
});

【问题讨论】:

标签: html twitter-bootstrap google-chrome video mediaelement.js


【解决方案1】:

我要在这里获取我的自学者徽章,然后回答我自己的问题。

我对此进行了大约 8 小时的研究,并提出了一个很好的解决方案。必须做三件事。

  1. 将 HTML5 视频源设置为原始 URL 以外的其他内容。这将触发播放器关闭打开的套接字连接。
  2. 将 HTML5 视频源设置为 Base64 编码数据对象。这将防止错误代码 4 问题 MEDIA_ERR_SRC_NOT_SUPPORTED。
  3. 对于旧版本 Firefox 中的问题,也触发 .load() 事件。

我的代码:

// Handling Bootstrap Modal Window Close Event
// Trigger player destroy
$("#xr-interaction-detail-modal").on("hidden.bs.modal", function () {
    var player = xr.ui.mediaelement.xrPlayer();
    if (player) {
        player.pause();
        ("video,audio").attr("src","data:video/mp4;base64,AAAAHG...MTAw");
        player.load();
        player.remove();
    }
});

我想出了将数据对象加载为 src 的想法。不过,我要感谢 GitHub 上的 kud 提供的超小型 base64 视频。 https://github.com/kud/blank-video

【讨论】:

  • 整整 6 年后,这可能为我节省了 8 小时的调试时间?️
【解决方案2】:

在 pause() 和 remove() 之间添加了一行:

// Handling Bootstrap Modal Window Close Event 
// Trigger player destroy
$("#xr-interaction-detail-modal").on("hidden.bs.modal", function () {
    var player = xr.ui.mediaelement.xrPlayer();
    if (player) {
        player.pause();
        ("video,audio").attr("src", "");
        player.remove();
    }
});

【讨论】:

  • 这几乎可以工作。在视频元素上设置 src="" 通过关闭套接字完全符合我的要求。但是,它会导致 HTML5 播放器抛出错误。错误代码为 4,可以翻译为 MEDIA_ERR_SRC_NOT_SUPPORTED - 不支持音频/视频。
  • 该错误不会阻止我的页面。但是,令人讨厌的是它出现在我的控制台错误日志中。可能,我可以排除记录代码 4 的错误。但是,我希望有更好的解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-13
  • 1970-01-01
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
  • 2014-12-10
  • 2014-07-04
相关资源
最近更新 更多