经过多次播放后,iOS UIWebView中的HTML5视频上的MEDIA_ERR_DECODE

时间:2015-03-06 18:27:55

标签: ios objective-c html5 video uiwebview

在iOS中的UIWebView中的HTML5视频控件中播放约20个短视频片段(mp4' s)后,后续片段失败并显示MEDIA_ERR_DECODE。问题是,我知道视频很好,因为它们之前曾播放过,有时甚至在同一会话期间播放。

此外,如果您等待足够长的时间来请求新的视频片段,它通常会再次开始工作。

我也知道它不是服务器,因为我可以在桌面计算机上对chrome执行完全相同的操作,但它始终有效。

根据我的故障排除,似乎这个bug本身就是iOS。

  1. 有没有人有解决这个问题的想法?
  2. 有没有办法在iOS中获取有关此类媒体解码错误的更多信息?我尝试使用Safari的开发工具来收听http请求,但我不能让它记录的时间超过几秒钟才会出现内存不足错误并导致应用程序死亡。
  3. 更新:在iOS模拟器中运行时也可以正常工作。似乎问题只出现在iPad本身上

3 个答案:

答案 0 :(得分:11)

与Apple支持人员讨论后,问题已得到解决。问题与硬件H264解码器有关。基本上,我永远不会通过永不释放视频资源(我认为javascript会自行完成)从硬件解码器缓冲区中删除视频。

所以我设置了这样的来源:

$(vid).src = "some source file";
$(vid).play();
... some other stuff happens ...
$(vid).remove();

这样做从来没有从解码器缓冲区中删除视频,这意味着它最终无法再解码视频。

要解决此问题,您必须从DOM中删除视频:

$(vid).src = "some source file";
$(vid).play();
... some other stuff happens ...
$(vid).remove();
$(vid).src = "";
$(vid).load();

现在我意识到这并没有多大意义,因为在调用.remove()之后,我会假设控件已从DOM中删除,任何垃圾收集都会自动完成剩下的工作。但是,它并没有那样的工作。我希望这有助于其他人。

答案 1 :(得分:0)

它不是特定于iOS的。我可以在Chrome网络浏览器中重现。

注意:如果视频有多个来源,则必须为每个来源重置src属性。

SELECT count(id),quantity FROM (SELECT id,SUM(qty) AS quantity FROM table GROUP BY id) GROUP BY quantity

答案 2 :(得分:0)

jugg1es上面的回答是正确的,但如果您尝试使用HLS视频,问题仍然存在。当我尝试使用jquery-3.1.1.js的解决方案时,我在jquery的load()方法中遇到了错误。不使用jquery实际上对我有用:

if (isset($_POST['submit']))
{
 if (!empty ($_POST['subscribe3'])
 {
  $data = trim ($_POST['subscribe3']);
 } else
 {
  header ('location: index.html');
  exit();
 }
}

谢谢jugg1es,你保存了我的项目。