在我们的Java EE应用程序中,我们使用HTML5< video>用于播放MP4视频的标签。
我们使用JBoss 7作为应用服务器。视频通过Struts2操作检索,如下所示:www.myproject.com/namespace/documents/3/zbRdTKQKLWnA2ZiY61Gx
其中zbRdTKQKLWnA2ZiY61Gx是服务器上的视频名称。
struts.xml:
...
{1}
{2}
video/mp4
flux
true
inline;filename=${filename}
...
它可以在Chrome和Firefox中正常工作,但不能在Mac上使用Safari。
在Safari中,当我打开包含< video>标签,显示“加载”,但不加载视频。
这里真是奇怪的事情。
如果链接直接在浏览器中粘贴到视频,则播放正确。
然后,如果我重新加载该视频的页面,它播放正常。
应用程序中的所有视频都会发生同样的情况。
发生什么事 ?为什么视频首先不播放?
Safari中的开发工具:
当我最初加载页面时,我得到以下结果:
所有警告都是针对CSS。
第一次直接在浏览器中打开文件时,我得到:
错误是“无法加载资源:由模块处理的负载”:
当我重新加载页面时,我得到相同的回复,但现在我可以播放视频:
我认为问题来自范围标题。
其实我用这个:
this.getServletResponse().setHeader("Accept-Ranges", "bytes");
this.getServletResponse().setHeader("Content-Type", "video/mp4");
this.getServletResponse().setHeader("Content-Length", "383631"); // 383631 - just for exemple, I use a real size
this.getServletResponse().setHeader("Content-Range", "bytes 0-383630/383631"); // 0-383630/383631 - the same
this.getServletResponse().setStatus(206);