【问题标题】:Android: mp4 file plays when downloaded but when choosing "Video" player gets "Cannot play video"Android:下载时播放 mp4 文件,但选择“视频”播放器时显示“无法播放视频”
【发布时间】:2012-10-20 10:42:24
【问题描述】:

我已使用 h264 编解码器和 AAC 将视频转换为带有 ffmpeg 的 mp4,并使用了基线配置文件。

视频为 540x360x250kbps

然后我对文件运行 qt-faststart 以将原子移动到正确的顺序。

我已将文件保存在我们使用的 wiki 上并创建了指向它的链接。

我的测试手机是三星 Galaxy S3。

当我浏览到上面有 mp4 链接的页面并单击它们时,我会看到一个弹出窗口,其中包含 2 个选项:Internet 和 Video。

如果我使用“互联网”选项下载视频,我可以毫无问题地在手机上播放它们。

我还对主配置文件进行了其他编码,这些也可以正常运行。我认为像 s3 这样功能强大的手机将能够处理 h264 中可用的更高级的压缩方案,但是我还浏览了有关支持的视频格式的 Android 文档,似乎只有“基线”支持压缩配置文件。

无论如何,尝试使用“视频”选项是行不通的,我假设它会尝试流式传输视频。

对于有问题的 wiki,单击链接显示正在设置内容类型和内容长度标头:

Content-Length  6175996
Content-Type    video/mp4;charset=UTF-8

用浏览器点击链接会调用可以播放 mp4 的播放器(大多数情况下是 Quicktime)。

除了链接到文件之外,还有更多内容可以让文件 HTTP 流式传输吗?为什么我的 Android 4 不能播放这些文件?

更新: 我决定使用 video 标签制作一个快速的 HTML5 页面,这些视频可以在我的 Galaxy S3 和最新的 IOS 上播放。

【问题讨论】:

  • 不明白您所说的“视频”链接是什么意思
  • @av501,我的意思是上面的“菜单选择”。当我访问包含视频链接的网页时,弹出菜单中有 2 个选项。 “视频”就是我说的那个。我已经澄清了原始信息。
  • @gview 我尝试了来自 api 演示的示例代码。并使用此链接 video link 它在真实设备中工作。但是当我检查其他链接时它不会

标签: android ffmpeg h.264 mp4


【解决方案1】:

mp4 不是流媒体格式。除非您有一个可以处理伪流或 pd 流的播放器,否则链接只会导致下载。要在不下载的情况下播放 mp4 文件,您需要有播放器支持。默认播放器用于播放本地文件。要以伪流形式从网络上播放文件,您至少需要一个带有适当播放器的网络应用程序 [比如 jwplayer]

【讨论】:

  • 我使用视频选项直接从其他网站播放 mp4。我想我必须对这些网站的行为进行一些调查。我想我很惊讶它不能作为使用 HTTP 的渐进式下载。
  • 检查服务器为 mp4 文件返回的 mime 类型。或许仅此而已?
【解决方案2】:

如果你想让一个 mp4 流式传输(以便它可以在下载完成之前开始播放),你需要运行 qt-faststart 以将 moov atom 放在正确的位置。

请参阅http://forums.creativecow.net/thread/291/486#610 了解更多信息和大量参考资料。

【讨论】:

  • 显然你没有仔细阅读我的问题,正如我在第 3 行明确指出的那样:“然后我在文件上运行 qt-faststart 以将原子移动到正确的顺序。”
【解决方案3】:

我怀疑您指的是 Apple 的 HTTP Live Streaming (HLS),自 Honeycomb 以来,Android 就支持它。 (正如您所怀疑的)比在 HTTP 服务器上粘贴 mp4 文件更复杂。您可以在Apple's developer resources 上阅读更多信息。

【讨论】:

  • 我假设视频播放器会支持某种 HTTP 流。我试图理解为什么播放器会返回一个错误,说它不能播放视频,但显然它可以,如果视频已下载。可能我们要做的是实现 HTTP 伪流,但我的期望是视频播放器可以工作,即使是通过 HTTP 提供的普通 mp4 文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-07
  • 1970-01-01
  • 2014-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-09
相关资源
最近更新 更多