【问题标题】:Some files won't stream from lighttpd to Droid某些文件不会从 lighttpd 流式传输到 Droid
【发布时间】:2010-12-29 07:30:27
【问题描述】:

在我们的应用程序中流式传输某些文件时遇到了一些奇怪的问题。经过大量测试后,我们将其范围缩小到似乎是 lighttpd 和 Droid 之间的某种问题,这不仅是我们的应用,还包括内置播放器。

如果您将 Droid 浏览器指向 http://stream29l.grooveshark.com/collinSong.mp3,它将不起作用。托管在 Apache 上 http://staging.api.grooveshark.com/collinSong.mp3 的同一个文件完美流式传输。这些文件是相同的。这两个 URL 都适用于运行 1.5 和 1.6 的其他手机,以及运行 2.0.1 的模拟器。

无论是通过 wifi 还是通过 3G 播放,lighttpd URL 都会失败。

我的猜测是,在 Droid 无法容忍的网络级别上发生了一些奇怪的事情,但我已经无法调试了。有什么想法吗?

更新:我在运行 CentOS 的笔记本电脑上安装了 lighttpd,并将其设置为提供相同的文件(抱歉,外部世界无法访问)并且 Droid 可以很好地为它们提供服务。这一定是我们服务器的特定配置问题,或者是 lighttpd 版本的差异。现在我的笔记本电脑运行的是 1.4.22,我们的生产服务器运行的是 1.5.0。我们的生产服务器还设置了以下配置,这给我的笔记本电脑设置带来了问题(注意:我可能缺少模块等):

server.max-fds = 7000
server.network-backend = "gthread-aio"
server.stat-cache-engine = "fam"

服务器还安装了这些附加模块:

                            "mod_proxy_core",
                            "mod_proxy_backend_http",
                            "mod_proxy_backend_fastcgi",

我将尝试让模块和配置 100% 匹配,看看明天是否会重现问题。如果没有,我会尝试将我的笔记本电脑升级到 1.5.0,看看是否可以。

与此同时,有人知道与上述配置相关的问题吗?

更新 2: 我在笔记本电脑上升级到 1.5.0,流式传输 collinSong.mp3 仍然有效。 添加: server.network-backend = "gthread-aio" 没有中断流媒体。 然而这条线做了: server.stat-cache-engine = "fam"

注释掉以上行会使我的笔记本电脑上的流媒体工作,启用它会使其无法工作。实际上,我让我们的管理员从配置中删除了该行并重新启动 lig​​hty(他说我们无论如何都不需要该设置),但问题仍然存在。

接下来我尝试在笔记本电脑上将 stat-cache-engine 注释掉并添加以下行: “mod_proxy_core”, "mod_proxy_backend_http", “mod_proxy_backend_fastcgi” 启用这些功能后,我的笔记本电脑上的流媒体再次中断,并且在我关闭它们时可以正常工作。不幸的是,我们在服务器上使用的线程模型显然需要这些,所以我无法尝试在生产中关闭它们。我不知道这是否会给其他人提供任何线索,但这就是我所拥有的。

我很想与摩托罗拉的一位开发人员取得联系,因为这似乎是该平台的一个错误;在其他 Android 设备、PC、iPhone、Blackberries 和诺基亚手机上运行良好,但在 Droid 上不运行。

【问题讨论】:

  • 您可能想检查两个 Web 服务器都实现了哪种类型的 http。也许他们在标头中返回了不同的信息,这就是它在 Apache 上工作的原因。
  • 我希望有比我更先进的网络技能的人可以尝试,因为据我所知,他们是相同的......
  • 请注意,这两个链接在 Nexus One 上似乎都可以正常工作。

标签: android networking lighttpd


【解决方案1】:

我真的没有答案给你,但经过一些非常基本的检查后,我可以告诉你,staging (Apache) 正在返回一个包含整个文件的 200,而 stream29l (lighttpd) 正在返回一个包含部分文件的 206。也许 droid 不支持流式传输?

【讨论】:

  • 您可能正在做某事,但我无法重现此内容。如果我使用 firebug 并使用此代码嵌入 staging.api.grooveshark.com/collinSong.mp3" autostart=false hidden=false> 我可以看到 FF 抓取文件但两者都得到正常的 200 秒...
【解决方案2】:

我不再拥有 Droid,所以我无法自己测试,但一个好方法是设置代理并配置 Droid 以使用它,这样您就可以检查来自两台服务器的请求和响应.来自 firefox 的快速测试并没有显示出响应之间的任何大差异,因此看起来只有从 droid 进行测试会有所帮助。

Fiddler 是一个出色的代理,可让您检查客户端-服务器事务的各个方面。

【讨论】:

  • 唉,我似乎也找不到任何方法让它通过代理运行。我在网上找到的唯一信息(诚然我的 google-fu 很弱)是通过代理运行模拟器,但模拟器上不存在问题,所以我认为这不会有太大帮助......
  • 你试过多少个机器人?您是否尝试过清除缓存?如果您使用不同的浏览器(例如 dolphin),或者安装一个应用程序,让您将文件下载到 SD 卡,以进一步确定问题可能出在哪里。
  • 我们办公室里有 3 个机器人,都表现出相同的行为,用户也抱怨过。我正在使用内置播放器进行测试,因为我们的应用程序有同样的问题,但是使用内置播放器证明这不是我们的应用程序的问题,而是我们的 lighttpd 服务器和机器人之间存在一些不兼容问题。从 SD 卡和 Apache 都可以完美播放。
【解决方案3】:

这里是返回的 HTTP 标头。至少它们返回相同的内容长度。

http://stream29l.grooveshark.com/collinSong.mp3 返回:

HTTP/1.1·200·OK(CR)(LF)
Content-Type:·audio/mpeg(CR)(LF)
ETag:·"3368448790"(CR)(LF)
Accept-Ranges:·bytes(CR)(LF)
Last-Modified:·Tue,·22·Dec·2009·17:27:55·GMT(CR)(LF)
Content-Length:·3854464(CR)(LF)
Connection:·close(CR)(LF)
Date:·Sat,·02·Jan·2010·19:01:18·GMT(CR)(LF)
Server:·lighttpd/1.5.0(CR)(LF)
(CR)(LF)

http://staging.api.grooveshark.com/collinSong.mp3 返回

HTTP/1.1·200·OK(CR)(LF)
Date:·Sat,·02·Jan·2010·19:02:30·GMT(CR)(LF)
Server:·Apache/2.2.14·(EL)(CR)(LF)
Last-Modified:·Mon,·21·Dec·2009·22:13:36·GMT(CR)(LF)
ETag:·"ac811e-3ad080-47b446696e400"(CR)(LF)
Accept-Ranges:·bytes(CR)(LF)
Content-Length:·3854464(CR)(LF)
Connection:·close(CR)(LF)
Content-Type:·audio/mpeg(CR)(LF)
X-Pad:·avoid·browser·bug(CR)(LF)
(CR)(LF)

Rex Swain's HTTP Viewer

【讨论】:

  • 感谢您发布此信息。我通过萤火虫得到了类似的结果。据我所知,没有什么明显的不同......我有一种感觉,一定是 lighttpd 实际发送的结果是如何在 Droid 中遇到错误的;块大小?我不知道,也不知道如何找出...
  • 不幸的是我手头没有安卓手机
【解决方案4】:

在运行 2.0 的摩托罗拉 Milestone(欧洲 UMTS Droid)上,两个流都可以正常工作。 我将在收到 2.0.1 更新后重新测试此页面。

【讨论】:

  • 有趣!我们肯定在 2.0.1 更新之前遇到了这些问题,所以 2.0.1 可能也不会为您破坏它。 Milestone 固件与 Droid fw 有点不同(多点触控支持,也许还有其他东西?)所以也许我应该尝试将里程碑固件放在我的 droid 上,看看是否可以修复它。显然我们不能告诉我们的客户这样做,但这将有助于缩小问题范围。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-10
  • 2011-01-08
  • 1970-01-01
  • 2011-12-21
相关资源
最近更新 更多