只从流式视频下载音频?

问题描述:

我知道我可以提出一个范围请求来下载流式网络视频的特定时间范围。只从流式视频下载音频?

我想知道现在是否有可能只从视频请求MP3或AAC音频流,以便在我的服务器上,我只下载音频。

从我听说这是可能的,但我还没有找到任何合法的解决方案或方法在网络上这样做,所以我真的不知道从哪里开始。

+0

我想你可能听说过[ffmpeg](http://www.ffmpeg.org)或类似的工具,可以做到这一点。示例[here](http://peppoj.net/2010/09/how-to-extract-audio-from-video-using-ffmpeg/)和[here](http://*.com/questions/9913032/FFMPEG到提取音频从 - 视频)。但是,必须在客户端请求下载文件之前在服务器上完成,或许可以近实时地完成。 – 2013-03-08 16:43:42

+0

非常感谢...尽管只是下载音频,因此以更低的速度下载更少的数据。 – pepper 2013-03-08 18:09:21

+2

你不能那样做。你如何告诉客户端下载这些位,但不是那些?我的观点是你需要在服务器上做一些事情,以便服务器只提供音频位。我认为唯一的选择是使用像ffmpeg :) – 2013-03-08 18:11:06

假设您正在通过HTTP讨论流,这实际上并不可行。我甚至不会推荐尝试它,除非你有非常明确的需求和很多时间。

可能吗?也许。首先,你必须有一个支持范围请求的HTTP服务器。如果是这样,那么你必须知道关于容器格式的一些信息。为此,您必须开始下载该文件并计算出来。

大多数容器将流交织在一起。也就是说,您将拥有视频的一大块字节,音频的一大块字节以及其他任何存在的流的块。出于演示目的,假设一个视频只有一个音频流和视频流,每个块都包含1秒的内容。交织看起来是这样的:

HEADERS A V A V A V A V A V A V A V ...

HEADERS是一切的容器具有用于设置流。 A是一个音频流块,V是一个视频流块。

如果您只想下载一个流,您必须能够自己分析该容器格式,下载容器所需的容器标头和任何其他数据,然后为所有的块你想要的特定流。根据交错,最后,这可能不是非常有效!当你下载你的数据时,你需要将它写回到一个你可以实际使用的文件中,这意味着你可能需要编写一些自定义代码来完成这项工作,或者欺骗FFMPEG为你编写它。

+0

哇,真的很酷。至少我可以认识到可能的解决方案不是那么可行的:) – 2013-03-09 15:58:30