2

我正在为 Android 开发一个下载任何应用程序,它在大多数情况下都能正常工作。

我遇到过一些网站,其 URL 的末尾带有一个长哈希签名(似乎)。但是适用于 Android 的标准视频应用程序和我的网络浏览器能够直接播放它,流式传输。

我不知道如何将其流式传输到文件(渐进式下载?),这应该是可能的。'?' 之后的 URL 参数 用于某事。正如 Jessica 指出的,下面的 URL 可能用于带有 rtmp://...的 RTMP 流。

URL 示例(主机域已编辑):

 http://blush.im.54ca3830.919727.x.yesitisporn.com/videos/3gp/d/b/f/
      filthysite.com_dbf7f0a9c3913d4d0e09a36fe8ab3aba.mp4?e=1348368010&ri=1024&rs=85&h=c81c6707b13714ac65b651ba2939d94a

在上面的 URL 中有一个 mp4 视频文件的链接。尝试用这个较短的 URL 下载它是行不通的:http://blush.im.54ca3830.919727.x.yesitisporn.com/videos/3gp/d/b/f/ filthysite.com_dbf7f0a9c3913d4d0e09a36fe8ab3aba.mp4. 返回一个空文档。

由于流行的视频应用程序和浏览器选择了这些类型的 HTTP 链接,因此可以很好地播放;应该有一种获取字节流并将其写入文件的标准方法。谢谢你的帮助!

4

1 回答 1

1

针对最初提出的问题: 添加 URL 参数,用问号将 url 与参数分开,并用 & 号分隔参数是很常见的。如果存在问号,则将所有内容的子字符串提取到 url 中的第一个非转义问号,否则使用整个字符串。

基于新的反馈: 就像我在评论中所说的那样,并且正如您在没有参数的情况下进行的测试所证实的那样,我认为您正在寻找错误的树来尝试更改 URL。我怀疑您无法保存这些特定流的原因是文件格式或服务器配置与可用的不同。特别是,我的第一个想法是这些 URL 可能由流服务器提供服务(例如:Icecast),而不是普通的基于文件的 HTTP 服务器。流媒体服务器的优点包括能够即时提供不同带宽版本的流,以及即时搜索文件的任何部分等等,但对于试图构建下载任何应用程序的人来说,缺点是那些服务器不将数据作为单个文件发送,他们以块的形式发送数据 - 尽量不要太疯狂的技术,基本上,一个块可能有第一帧加上一堆差异,用于接下来几帧的视频内容和音频,重复。当它这样做时,它可以根据它看到的延迟或屏幕的分辨率来限制发送的质量,或者如果你调整窗口大小等,它会调整它发送的大小。这种流媒体特别适用于现场活动,但它对于记录事件也并非没有优势——尤其是随机搜索。为了使捕获数据的事情复杂化,一些流媒体服务器实际上通过 RTMP、RTSP 或 MMS 协议而不是通过 HTTP 传输视频数据。HTTP 伪流式传输或直接 HTTP 下载将比通过 RTMP 流式传输更容易保存。某些流媒体类型您几乎必须从单个数据包重新创建文件,或者在实时播放时从屏幕上播放的内容对其进行转码。因此,您可能需要花一些时间了解不同的流协议,以找出保存您正在查看的特定流的最佳方法。

于 2012-09-23T00:04:15.967 回答