0

0

Java如何实现网络音频流播放 Java播放网络电台URL音频流【教程】

煙雲

煙雲

发布时间:2026-01-16 17:30:34

|

368人浏览过

|

来源于php中文网

原创

audiosystem无法直接播放网络电台url,因其仅支持wav/au/aiff等本地格式,不解析http也不内置mp3/aac解码器;mp3流无标准文件头且icy流含元数据块,需jlayer+手动处理icy-metaint才能稳定播放。

java如何实现网络音频流播放 java播放网络电台url音频流【教程】

Java 原生 javax.sound.sampled 无法直接播放网络音频流(如 MP3、AAC 格式的电台 URL),它只支持本地文件或已解码的 PCM 数据流。强行用 AudioSystem.getAudioInputStream(URL) 尝试打开 http:// 地址,大概率会抛出 UnsupportedAudioFileExceptionIOException —— 因为该 API 不解析 HTTP 传输层,也不内置 MP3/AAC 解码器。

为什么 AudioSystem 无法直接播放网络电台 URL

AudioSystem.getAudioInputStream() 仅识别有限格式(WAV、AU、AIFF),且要求输入流能立即提供完整音频头信息;而网络电台流是持续不断的、无明确结尾的字节流,通常封装为 MP3 或 ICY(带元数据)格式,需要边下载边解码。

  • MP3 流没有标准“文件头”,AudioSystem 无法判断采样率/位深/声道数
  • ICY 协议(常见于 Shoutcast/Icecast)在 HTTP header 中携带 icy-metaint,需手动解析元数据块
  • Java 标准库不包含 MP3 解码器(spi 实现极少且不稳定)

推荐方案:用 JLayer + BasicPlayer(轻量、纯 Java)

JLayer 是成熟稳定的纯 Java MP3 解码库,配合 BasicPlayer 可实现流式拉取 + 解码 + 播放闭环。注意:它不支持 AAC 或 Ogg,仅适用于 MP3 电台(多数中文网络电台仍用 MP3)。

  • 添加 Maven 依赖:
    <dependency>
      <groupId>net.sourceforge.jlayer</groupId>
      <artifactId>jlayer</artifactId>
      <version>1.0.1</version>
    </dependency>
  • 关键步骤:用 URL.openStream() 获取输入流 → 包装为 BufferedInputStream → 传给 new Player(inputStream)
  • 必须在非 UI 线程中调用 player.play(),否则阻塞主线程
  • 若电台使用 ICY 协议,需手动读取 icy-metaint header 并跳过元数据块(每 metaint 字节后出现 1 字节长度 + N 字节元数据)

处理 ICY 协议元数据(Shoutcast/Icecast 电台必备)

很多电台 URL(如 http://example.com:8000/stream)返回的是 ICY 响应,header 中含 icy-metaint: 16000。若不跳过元数据,JLayer 会把元数据当音频解码,导致爆音或崩溃。

千博企业网站管理系统免费开源版2010 Build 0418
千博企业网站管理系统免费开源版2010 Build 0418

千博企业网站管理系统主要面向大中型企业电子商务网站的构建与运营管理进行设计研发,拥有极为灵活的产品架构、极强的可扩展性与可伸缩性,可广泛适合于新闻资讯门户、企业内部知识门户、报社/杂志阅读、影音资讯、视频音频在线播放、法律顾问、政务公开、企业办公信息化等网络业务管理平台的建设,最大限度地满足客户现今乃至未来的应用需求。借助于千博企业网站管理系统极强的灵活性和便捷的可扩展性,企业级客户能够迅速流畅的

下载

立即学习Java免费学习笔记(深入)”;

  • HttpURLConnection 替代 URL.openStream(),以便读取 header
  • 检查响应 header 是否含 icy-metaint,获取其值(如 16000
  • 从响应流中按 metaint 字节数循环读取音频块,每次读满后读 1 字节元数据长度 L,再跳过后续 L * 16 字节(ICY 规范)
  • 将过滤后的流交给 Player,而非原始流

更现代的选择:JavaFX MediaPlayer(仅限 Java 8–17,已移除)

JavaFX 的 MediaPlayer 支持直接播放 HTTP MP3 流(内部调用平台解码器),但自 Java 11 起 JavaFX 已分离为独立模块,Java 17+ 完全移除。若你仍在用 Java 8–11,可快速验证:

Media media = new Media("http://stream.radioparadise.com/mp3-192");
MediaPlayer player = new MediaPlayer(media);
player.play();

⚠️ 注意:该方式无法控制缓冲、无法读取 ICY 元数据、不提供音频数据回调,仅适合简单播放。且一旦 JavaFX 运行时缺失(如 OpenJDK 无 javafx 插件),直接 NoClassDefFoundError

真正可靠的网络流播放,核心不在“怎么播”,而在“怎么稳住流、跳过元数据、容错重连”。JLayer + 手动 ICY 处理仍是目前最可控的纯 Java 方案;如果项目允许引入 JNI 或外部进程,用 ffmpeg 解码到 PCM 再喂给 SourceDataLine 会更通用,但也更重。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Java Maven专题
Java Maven专题

本专题聚焦 Java 主流构建工具 Maven 的学习与应用,系统讲解项目结构、依赖管理、插件使用、生命周期与多模块项目配置。通过企业管理系统、Web 应用与微服务项目实战,帮助学员全面掌握 Maven 在 Java 项目构建与团队协作中的核心技能。

0

2025.09.15

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

723

2023.08.10

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

723

2023.08.10

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

483

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

448

2023.11.14

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

3242

2024.03.12

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2773

2024.08.16

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

2

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

10

2026.03.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Kotlin 教程
Kotlin 教程

共23课时 | 4.1万人学习

C# 教程
C# 教程

共94课时 | 10.6万人学习

Java 教程
Java 教程

共578课时 | 76.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号