Android上的StageVideo / NetStream在播放前下载整个视频

时间:2013-11-13 00:13:54

标签: android actionscript-3 air netstream

我(最后)在VOD项目的最后。它完美无缺,除了在Android上。基本上,在整个视频下载之前,Android视频无法播放。媒体服务器远远超出范围,因此我们只是从AWS S3提供视频。在iOS上非常有效。流式传输和下载视频的工作方式与您期望的完全相同。在Android上,它似乎不想在下载完成之前播放。它在本地网络上使用服务器时效果很好(我甚至看到偶尔的缓冲区,所以我知道它不仅仅是快速下载),而且没有任何远程。

我唯一的猜测是它与iOS和Android流视频的方式有所不同。在iOS上,视频流通过字节范围请求。每隔几秒钟,它就会自行计时并为文件请求另一个字节范围。在Android上,它只发送整个文件的单个请求。但不确定如何解决这个问题。

有人在这里有任何提示或指示吗?任何帮助将在这里非常感谢。

  • 在Android 4.4和4.3上发生。
  • 同时使用我们拥有的远程prod服务器和AWS S3。
  • AIR 3.9 with Flex 4.11
  • 利用StageVideoNetStream
  • 测试设备是Nexus 5和Nexus 4

1 个答案:

答案 0 :(得分:3)

问题在于视频本身。 AIR for Android使用标准方法进行流式传输,请求整个文件,并逐位读取(而不是重复请求特定字节范围的iOS)。

这里的问题是播放器在读取视频元数据之前无法开始播放。标准的h.264编码可以看到位于文件最末端的元数据(moov atom),因此在整个视频下载之前视频才会开始播放。

我发现解决此问题的最简单方法是通过Handbrake重新编码视频,并选择“Web优化”选项。这将确保元数据位于最开始(我相信字节24),因此视频应立即开始播放。

Explanation from Adobe

Thread that gave me the idea to use the "Web Optimized" option