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

Hai*_* Bi 3 java google-app-engine mp4 video-streaming blobstore

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

但是,当我在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. 除了我的GAE url是src之外,html代码如下所示.示例mp4有效,但如果我的gae链接在那里,它根本不显示视频.

    <video width ="640"controls =""> <source src ="http://www.w3schools.com/html/mov_bbb.mp4"type ="video/mp4">您的浏览器不支持HTML5视频.</视频>

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

回答

标记的答案提供了有关如何提供mp4文件的充分信息,它还提供了一个用于演示的实时网页.通过该演示,只要Chrome浏览器可以解码,我就可以告诉我的网站可以提供mp4文件.我遇到的问题是由于Chrome无法识别ffmpeg中使用的编解码器.改为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
Run Code Online (Sandbox Code Playgroud)

Stu*_*ley 9

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

是我在App Engine上编写的测试站点,它从云存储和BlobStore播放mp3,ogg和mp4文件.

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