HTML5视频元素没有播放没有音频编解码器的.mp4

时间:2016-04-28 13:08:22

标签: javascript angularjs html5 video

我正在尝试使用ng-file-upload将视频上传到Angular应用。一切正常,直到我尝试上传没有音频编解码器的.mp4视频。视频元素显示,它在控制面板中显示正确的持续时间,它只是不播放。单击播放不执行任何操作,不显示第一帧。

如果我上传包含音频的任何其他.mp4,视频播放时会毫无错误。

以下是我可以看到的有关失败文件的信息,因为您只能看到为此文件列出的视频编解码器。

enter image description here

这是另一个带有音频的.mp4文件的“更多信息”,这个文件完全上传并且在HTML5视频元素中播放没有错误。

enter image description here

正如您所看到的,有效的视频将音频编解码器声明为AAC(预期为.mp4),并显示音频通道为“2”,我不确定“音频频道”的用途是否诚实。

我整天都在调试这个东西,我可以看到的文件的唯一区别在于上面的图像。

HTML5视频播放器在没有列出任何音频编解码器的情况下播放.mp4视频吗?

是什么让我觉得音频在这里扮演的角色是w3schools对Mpeg-4文件的描述:

  

MP4 =具有H264视频编解码器和AAC音频编解码器的MPEG 4文件

以前是否有人遇到此问题?

修改

在视频的错误事件中添加一个监听器之后,我可以看到我得到一个代码为3的MediaError对象,因此这是一个解码问题I can see

下面的截图

enter image description here

进一步修改

我现在调试了这个进入Chromes的媒体内部日志。 Chrome遇到的错误现在已经确认是因为音频丢失,请参见下面的屏幕截图:

enter image description here

不确定为什么因此没有明确抛出错误。这是行的结束,这很奇怪,因为如果我将视频上传到Facebook,它上传就好了。

1 个答案:

答案 0 :(得分:0)

我建议您检查.mp4文件是否正确转换。我已经在我的电脑上检查了它,它应该正常播放 - 只是没有音频的视频(Ubuntu 14.04,Chrome 51.0.2704.106)。

使用ffmpeg检查可用的媒体曲目:

ffmpeg -i input_file.mp4

然后尝试使用带音轨的音源并将其转换为没有音频的音源。此命令将删除所有音轨:

ffmpeg -i input_file.mp4 -vcodec copy -an output_file.mp4

HTML5规范并没有说明当我们没有为其中一个媒体曲目设置适当的编解码器时会发生什么。仅供参考 - HTML5

检查任何其他播放器的播放总是一个好主意,VLC是一个很好的参考。