【问题标题】:Audio Streaming with Java Servlet in Google App Engine在 Google App Engine 中使用 Java Servlet 进行音频流式传输
【发布时间】:2013-10-31 02:37:32
【问题描述】:

我正在尝试在我的 GAE Java Web 应用程序中创建一个可以允许流式传输音频文件的 URL,但到目前为止它仅适用于直接下载。到目前为止,这是我的 servlet 从 BlobStore 下载文件的样子,其中 BlobKey 在“file_id”参数中发送:

public void doGet(HttpServletRequest req, HttpServletResponse res) 
        throws IOException {

    BlobInfoFactory bif = new BlobInfoFactory();

    BlobKey blobKey = new BlobKey(req.getParameter("file_id"));
    String fileName = bif.loadBlobInfo(blobKey).getFilename();

    res.setContentType("text/plain");
    res.setHeader("Content-Disposition", "attachment; filename=" + fileName);

    blobstoreService.serve(blobKey, res);
}

servlet 映射到如下所示的 URL: xxx.appspot.com/fileDownload?file_id=yyy

如何在客户端(浏览器或移动应用程序)访问此 URL 以流式传输音频数据,而不是直接下载? 我是否必须更改服务器端、客户端协议才能访问它(而不是 HTTP),还是两者都更改?

谢谢!

【问题讨论】:

    标签: java google-app-engine servlets audio-streaming


    【解决方案1】:
    1. 检查哪些音频格式是supported by certain browsers。最好的选择是 mp3 音频。

    2. 在客户端使用这个 html sn-p:

      <audio controls> <source src="http://path/to/your/audio/file.mp3" type="audio/mpeg"> Your browser does not support the audio element. </audio>

    3. 确保您的服务器以audio/mpeg 内容类型提供音频文件(您的 blob 的内容也必须是 mp3 文件):

      res.setContentType("audio/mpeg");

    4. 删除 Content-Disposition 标头。当您希望浏览器将文件保存到本地磁盘时使用此选项。

    【讨论】:

    • 谢谢彼得,干得漂亮!但是,我应该用什么替换“Content-Disposition”参数?一个空字符串?我刚刚删除了整个 res.setHeader() 行,它也能正常工作。
    • 完全正确 - 只需删除整个标题。
    猜你喜欢
    • 2012-05-15
    • 1970-01-01
    • 2013-02-04
    • 2018-04-13
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    相关资源
    最近更新 更多