仅从流媒体视频中下载音频?

Posted

技术标签:

【中文标题】仅从流媒体视频中下载音频?【英文标题】:download ONLY audio from a streaming video? 【发布时间】:2013-02-24 06:44:58 【问题描述】:

我了解我可以发出范围请求以下载流式网络视频的特定时间范围。

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

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

【问题讨论】:

我想你可能听说过ffmpeg 或类似的工具,它们可以做到这一点。示例here 和here。但是,它必须在客户端请求下载文件之前在服务器上完成,也许可以近乎实时地完成。 谢谢你……但关键是只下载音频,因此以可能更快的速度下载更少的数据。 你不能那样做。你如何告诉客户下载这些位而不是那些?我的观点是你需要在服务器上做一些事情,以便服务器只提供音频位。我认为唯一的选择是使用类似 ffmpeg 的东西 :) @SunilD.,您可以使用范围请求。 ***.com/a/8507991/362536 【参考方案1】:

假设您正在谈论基于 HTTP 的流,这实际上是不可行的。我真的不建议您尝试它,除非您有非常具体的需求并且手头有很多时间。

有可能吗?可能是。首先,您必须有一个支持范围请求的 HTTP 服务器。如果是这样,那么您必须对容器格式有所了解。为此,您必须开始下载文件并弄清楚这一点。

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

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

HEADERS 是容器用于设置流的所有内容。 A 是音频流块,V 是视频流块。

如果您只想下载一个流,您必须能够自己解析该容器格式,下载容器标头和容器所需的任何其他数据,然后针对该容器的所有块发出范围请求您想要的特定流。取决于交织,最后,这可能根本不是很有效!

当您下载数据时,您需要将其写回到您可以实际使用的文件中,这意味着您可能需要为此编写一些自定义代码,或者诱使 FFMPEG 为您编写它。

【讨论】:

哇,真的很酷。至少我可以放心,可能的解决方案并不那么可行:)

以上是关于仅从流媒体视频中下载音频?的主要内容,如果未能解决你的问题,请参考以下文章

如何从互联网下载音频/视频文件并存储在 iPhone 应用程序中?

视频参数(流媒体系统,封装格式,视频编码,音频编码,播放器)对比

vLine 媒体会话中的视频滞后于音频

如何在 QMediaPlayer 中获取媒体类型(视频或音频)?

QT软件开发: 获取媒体详细信息(视频/音频)

Python 实现 m3u8 视频下载