如何在Google App Engine Blobstore上提供mp4流媒体视频

时间:2014-11-24 03:48:46

标签: java google-app-engine video-streaming mp4 blobstore

我正在使用GAE来提供大型文件,我可以使用简单的blobstoreService.serve(key, res);成功提供mp3。如果我将资源网址放入浏览器,媒体控件将出现和/或媒体播放器将启动,音乐将在下载完成之前开始。

然而,当我在Chrome中添加mp4网址时,控件会出现,但没有任何反应。以下是我所做的:

  1. 没有内容处置以避免下载。如果我放置内容处理,那么浏览器将下载视频。
  2. 我甚至使用ffmpeg转换视频并将-movflags faststart选项放在那里,但没有区别。
  3. 我还将响应标头设置为Accept-Ranges:bytes到第一个请求,我发现下一个请求仍然要求完整的75MB范围。即使浏览器要求所有内容,我应该只部分服务吗?
  4. 或者如何让浏览器知道我想要一块一块地提供服务,这样请求就会有范围。内容长度是否必要?我应该处理HEAD请求吗?我相信现在我的servlet只处理GET。
  5. 我的网址与http://www.somesite.com/serve?folder=aa&file=ok.MP4相似,Chrome控制台显示只下载了1MB,然后停止了
  6. html代码如下所示,但我的GAE网址是src。示例mp4有效但如果我的gae链接在那里,它根本不显示视频。

    < video width =" 640"对照=""> < source src =" http://www.w3schools.com/html/mov_bbb.mp4"类型="视频/ MP4"> 您的浏览器不支持HTML5视频。 < /视频>

  7. 问题

    GAE服务器端需要做什么才能使用流媒体提供视频?

    答案

    标记的答案提供了有关如何提供mp4文件的充分信息,它还提供了一个用于演示的实时网页。通过该演示,只要Chrome浏览器可以解码,我就可以告诉我的网站可以提供mp4文件。我遇到的问题是由于ffmpeg中使用的编解码器未被Chrome识别。改为H.264,一切正常。

    以下是ffmpeg命令行的一个示例,其中OK.MTS是摄像机文件,output1.mp4将被上传:

    ffmpeg -i ok.MTS -codec:v libx264 -profile:v baseline -preset slow -b:v 500k -maxrate 800k -bufsize 1000k -vf scale=-1:432 -threads 0 -b:a 96k output1.mp4
    

1 个答案:

答案 0 :(得分:9)

您的处理程序是否在响应标头中放置了正确的Content-Type?您需要设置“内容类型:视频/ mp4”才能使视频正常播放。

Here是我在App Engine上编写的测试网站,可以从Cloud Storage和BlobStore播放mp3,ogg和mp4文件。

Here是BlobStore中mp4文件的链接,它使用serve()来返回文件。当我将此链接粘贴到chrome时,内容可以正常播放。