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

bweufnob  于 2021-08-20  发布在  Java
关注(0)|答案(2)|浏览(307)

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

3pmvbmvn

3pmvbmvn1#

你可以用它来做这个 curl 通过仅获取具有 -I--head 选项可以根据响应中的内容类型确定音频格式。

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

根据服务器、java版本和其他因素,您可能需要克服ssl/tls证书的一些额外障碍。

bxgwgixi

bxgwgixi2#

您使用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得到。

相关问题