HTML 5视频播放失败

时间:2015-05-15 18:43:23

标签: html5 google-chrome firefox video cross-browser

可用的公开链接:https://muwadev3.millikin.edu/muportal/public/streamingMedia.jsp?id=ab7cfb20f103a44a49d14244ae0a3f2f

HTML元素是由JSP代码动态生成的,我已经多次修改它的输出以尝试不同的东西。它应该类似于以下内容:

<video id="viewer" width="320" height="240" controls preload>
    <source id="mp4Src" src="https://muwadev3.millikin.edu/muportal/secure/pages/features/StreamingMedia/index.jsp?f=ab7cfb20f103a44a49d14244ae0a3f2f.mp4" type="video/mp4">
    <source id="webmSrc" src="https://muwadev3.millikin.edu/muportal/secure/pages/features/StreamingMedia/index.jsp?f=ab7cfb20f103a44a49d14244ae0a3f2f.mp4" type="video/webm">
    <source id="oggSrc" src="https://muwadev3.millikin.edu/muportal/secure/pages/features/StreamingMedia/index.jsp?f=ab7cfb20f103a44a49d14244ae0a3f2f.mp4" type="video/ogg">

有一段时间以来,我一直致力于构建跨设备视频播放服务器。我在Tomcat / JSP环境中工作,该环境处理上传用户的文件,在后台将文件转换为mp4 / webm / ogg,并且应该在查看器页面上提供视频文件。 #39;完成转换。

在一些游戏和建设之后,一切顺利(终于!)。但是,我的问题是播放视频标签。我的预期行为是加载带有单独源标记的视频标记,每个标记都包含对其中一种文件类型的引用。仔细阅读&#34;潜入HTML5&#34;以及其他各种资源,我认为获取这些格式应涵盖所有主流浏览器。我想为用户提供下载和查看功能,因此可以通过单独的页面(完美地工作)直接提供它们,这些页面立即开始下载文件。查看页面来自此下载页面,它们之间的链接似乎很完美,在检查页面上的请求时始终返回200状态。

尽管有参考资料的显示,但Firefox和Chrome之间唯一的文件是文件的ogg版本 - 而我希望通常支持webm,使用其他文件类型作为后备。 Chrome禁用了控件,并显示黑色背景,而Firefox则同时提出了“#34;没有支持格式的视频和找到的MIME类型”的投诉&#34;以及&#34;视频无法播放,因为该文件已损坏&#34;。

我知道我的文件正常工作,因为从下载页面检索它们允许我在VLC中播放它们没有任何问题,我可以在使用相同的转换后直接从我的主机上播放它们。

我能找到的唯一不一致是文件实用程序(在Linux或Windows上通过GNUWin32)将webm文件报告为&#34; application / octet-stream&#34;,尽管服务页面正确地将标题设置为视频/ WEBM。

通常情况下,我会使用Chrome开发者工具和Firebug来获取调试信息,但这些信息总是无用,无法提供有关为什么解码失败的信息,或者为什么播放无法正常工作

我确保Tomcat服务器配置包含其mime类型配置中的每个文件类型,尝试使用和不使用源标记中的编解码器声明,并尝试移动到src =&#34 ;路径/到/服务/页&#34;视频标签上的属性(消除源元素)。

目前已在目前的Chrome版本42.0.2311.152 m,Canary build 44.0.2402.0 canary(64位),Firefox ESR 31.5.3和Firefox Developer Edition 39.0a2上进行了测试。

那么 - 有没有比使用不同选项进行插拔更好的方法来解决HTML 5视频播放问题?我错过了什么明显的东西吗?

1 个答案:

答案 0 :(得分:0)

好的,问题是视频源/文件下载页面,正常工作。使用Notepad ++或vi检查视频文件表明,下载的文件在其余数据之前包含两个空白行,这与我本地计算机中类似编码文件的内容相同。

源页面是一个基于

的JSP
function dps(){
    var x = aadmg + daggerdmg + sworddmg;
    document.getElementById("dps").innerHTML = x;
};

每个JSP输出块都包含一个回车符,在输出编码文件的内容之前输出两个空行。解决这个问题的一种方法是将标签涂抹在一起

<% //set imports %>
<% //set content headers %>
<% //send file with FileInputStream reading from hard drive %>

这也可以通过以下方式实现:

<% //set imports
%><% //set content headers
%><% //output file%>