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

4
我知道我可以发起一个范围请求来下载流媒体视频的特定时间段。现在,我想知道是否可能仅请求视频中的MP3或AAC音频流,以便在我的服务器上仅下载音频。据我所知,这是可能的,但我尚未找到任何合法的解决方案或方法来在网络上实现此操作,因此我不知道从哪里开始。

我想你可能已经听说过 FFmpeg 或类似的工具,它可以做到这一点。例如这里 这里。但是,这必须在服务器上提前完成,而不是在客户端请求下载文件时才完成。也许有可能近乎实时地完成。 - Sunil D.
谢谢这个……不过重点是仅下载音频,因此以可能更快的速度下载更少的数据。 - pepper
2
你不能这样做。你如何告诉客户端下载这些位,但不是那些?我的观点是,你需要在服务器上做一些事情,以便服务器只提供音频位。我认为唯一的选择是使用类似ffmpeg的东西 :) - Sunil D.
@SunilD.,您可以使用范围请求。https://dev59.com/1Wsy5IYBdhLWcg3w0RXT#8507991 - Brad
1个回答

6
假设你说的是通过HTTP传输流,这实际上不太可行。除非你有特定的需求并且有充足的时间,否则我真的不建议尝试它。
可能吗?也许。首先,你必须拥有一个支持范围请求的HTTP服务器。如果有的话,那么你就必须了解一些容器格式的知识。为此,你需要开始下载文件并弄清楚它的格式。
大多数容器将流交替排列在一起。也就是说,你将会有一个视频字节块、一个音频字节块和任何其他存在的流的块。为了演示目的,假设一个视频只有一个音频流和一个视频流,每个块包含1秒钟的内容。交错排列如下: HEADERS A V A V A V A V A V A V A V … HEADERS 是容器用于设置流的全部内容。A 是音频流块,V 是视频流块。
如果你想下载单个流,你必须自己能够解析容器格式,下载容器头和任何你需要的容器数据,然后为你想要的特定流的所有块进行范围请求。根据交错方式,最终,这可能并不高效!
当你下载数据时,你需要将其写回到实际可用的文件中,这意味着你可能需要编写一些自定义代码来实现,或者欺骗FFMPEG为你编写它。

哇,非常酷,确实如此。至少我知道可能的解决方案不太可行,可以稍微放心了 :) - Sunil D.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接