如何确定在线流的音频格式?

Posted

技术标签:

【中文标题】如何确定在线流的音频格式?【英文标题】:How do I determine the audio format of a online stream? 【发布时间】:2021-07-08 13:17:19 【问题描述】:

我在https://iceant.antfarm.co.za/EdenFM 有一个在线音频流。您只需将音频流粘贴到浏览器中即可收听音频。我的问题是:“我如何确定流的音频格式?这可以用 Linux 命令完成吗?

【问题讨论】:

服务器不应该在 HTTP 标头中发送 MIME 类型(音频/mpeg、音频/ogg、...)吗?没有它,我认为你不能,没有其他信息的原始字节流是没有用的。 【参考方案1】:

您可以使用curl 执行此操作,方法是使用-I--head 选项仅获取标头。音频格式可以根据响应中的Content-Type来确定。

curl -I https://iceant.antfarm.co.za/EdenFM

使用grep,您可以过滤相关行:

curl -I -s https://iceant.antfarm.co.za/EdenFM | grep -i "^Content-Type:"

哪个输出这个:

Content-Type: audio/aac

当然,这也可以在 Java 中通过向所需端点发送 HEAD 请求来完成:

URL url = new URL("https://iceant.antfarm.co.za/EdenFM");
HttpURLConnection con = (HttpURLConnection)  url.openConnection();
con.setRequestMethod("HEAD");
con.connect();
String contentType = con.getContentType();

System.out.println(contentType);
// output: audio/aac

这是 Java 11 中带有新 HttpClient 的版本:

HttpClient client = HttpClient.newHttpClient();
        
HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://iceant.antfarm.co.za/EdenFM"))
        .method("HEAD", HttpRequest.BodyPublishers.noBody())
        .build();
HttpResponse<Void> response = client.send(request,
        HttpResponse.BodyHandlers.discarding());

HttpHeaders headers = response.headers();
headers.firstValue("Content-Type").ifPresent(System.out::println);
// output: audio/aac

您可能需要克服 SSL/TLS 证书的一些额外障碍,具体取决于服务器、Java 版本和其他因素。

【讨论】:

【参考方案2】:

你用 tag::Java 标记你的问题,但你的问题只提到了一个 shell 命令,所以你在这里:

$ curl -I https://iceant.antfarm.co.za/EdenFM

会得到你:

HTTP/1.1 200 OK
Content-Type: audio/aac
Date: Thu, 08 Jul 2021 13:33:16 GMT
icy-description:EDEN FM – Your Voice in Paradise
icy-genre:Various
icy-metadata:1
icy-name:EdenFM
icy-pub:1
Server: Icecast 2.4.0-kh13
Cache-Control: no-cache, no-store
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Origin, Accept, X-Requested-With, Content-Type
Access-Control-Allow-Methods: GET, OPTIONS, HEAD
Connection: Close
Expires: Mon, 26 Jul 1997 05:00:00 GMT

相关行当然是:

Content-Type: audio/aac

你可以通过 grep 获得。

【讨论】:

以上是关于如何确定在线流的音频格式?的主要内容,如果未能解决你的问题,请参考以下文章

FFMPEG Tips 如何提取码流的基本信息

如何将 PCM 音频流转换为在线播放

怎样实现MP3音频在线转换

格式工厂 音频合成问题

如何将倾城时光录制成MP3格式

AAC音频格式分析