【发布时间】:2015-01-21 17:41:26
【问题描述】:
我正在使用 GAE 提供大文件,我可以使用简单的blobstoreService.serve(key, res); 成功提供 mp3 如果我将资源 url 放在浏览器中,媒体控件将出现和/或媒体播放器将启动,并且音乐将在下载完成之前开始播放。
但是,当我在 Chrome 中放置一个 mp4 url 时,控件出现但没有任何反应。以下是我所做的:
- 没有内容处理以避免下载。如果我把内容配置,那么浏览器会下载视频。
- 我什至使用 ffmpeg 转换视频并将 -movflags 快速启动选项放在那里,但没有区别。
- 我还将第一个请求的响应标头设置为
Accept-Ranges:bytes,我观察到下一个请求仍然要求完整的 75MB 范围。即使浏览器要求全部提供,我是否应该只提供部分服务? - 或者如何让浏览器知道我想逐个提供服务,以便请求具有范围。内容长度是否必要?我应该处理 HEAD 请求吗?我相信现在我的 servlet 只处理 GET。
- 我的网址是http://www.somesite.com/serve?folder=aa&file=ok.MP4,Chrome 控制台显示只下载了 1MB,然后就停止了
-
除了我的 GAE url 是 src 之外,html 代码如下所示。示例 mp4 有效,但如果我的 gae 链接在那里,它根本不显示视频。
问题
在 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
【问题讨论】:
标签: java google-app-engine video-streaming mp4 blobstore