Android网络电台的一种实现方案(歌醉原创)

Android Radio开发——简介(一) 本地FM(收音机)应用不同于现在的网络FM(喜马拉雅,考拉等),是由 Android 手机硬件的调谐芯片,通过接收和解调电台发出的电磁波的调频(FM)或调幅(AM)信号,从而播放和展示相应的节目信息。所以本地收音机应用一般不需要联网,其核心依赖于硬件调谐芯片。所以不是所有的手机都能收听本地收音机,但大部分的手机都支持。 阅读详情

随着电子产品的飞速发展,广播电台几乎已经远离了人们的娱乐生活,但是近年来由于网络电台的兴起,广播电台又逐渐有了市场,手机上如果有一个网络电台软件,使用率应该是比较高的。目前的主流智能手机平台中,iphone和symbian都已经有了这类软件,android平台虽然推出的时间不是很长,但是也已经有这类软件了,最近我也正在Android上做这方面的工作,下面就把我的一些经验介绍一下。

 

网络电台种类

目前的网络电台网站一般是基于以下三种协议的:

mms、rtsp、http

其中mms是微软公司提出的网络流媒体协议,通常采用wma格式的文件,Android现在还不支持这种协议,也不支持wma格式,原因比较明显,竞争对手嘛。

rtsp是RealNetworks公司提出的,Android是支持这种协议的,但是这种协议通常采用rm格式的文件,Android是不支持的。

http协议Android是肯定支持的,而且这种协议一般采用mp3的文件格式,Android也支持。

综上,我们要在Android上开发网络电台软件,那么只能选择http协议mp3格式的网络电台网站,这样的网站主要包括shoutcast和icecast两大类。这两类有微小差别,基本上是相同的,下面主要以shoutcast为主进行说明。

  

MediaPlayer

熟悉Android的人可能都知道有MediaPlayer这样一个类,用于媒体播放,而且这个类是支持流媒体播放的,这个类支持的协议包括rtsp、http等,但是我们还不能直接用这个类来播放网络电台,主要有两个原因:

1.上面提到的shoutcast电台并不是直接采用http协议,MediaPlayer无法正常连接到shoutcast电台

2.MediaPlayer能够正常解析的URL必须是http://............/*.*的形式,也就是说url中必须包括文件名,shoutcast电台的url不符合这样的形式.

因此需要做一些转换的工作。

 

shoutcast协议

上面已经提到,shoutcast网络电台是采用http协议的,其实这种说法并不准确,shoutcast电台采用的是shoutcast协议,这种协议与http略有不同,客户端与服务器间通讯过程如下:

向服务器发送GET请求,内容如下:

HTTP/1.0/r/n

User-Agent:AndroidInternetRadio/r/n

Accept:audio/mpeg/r/n/r/n

服务器端返回如下:

ICY 200 OK/r/n (signifying that the server was successful)

icy-notice1:<BR>This stream requires <ahref="http://www.winamp.com/">Winamp</a><BR> (redundant notice)

icy-notice2:SHOUTcast Distributed Network Audio Server/posix v1.x.x<BR> (tells the client what server it is and version)SHOUTcast Specific

icy-name:Unnamed Server/r/n (Name of the server)

icy-genre:Unknown Genre/r/n (what genre the server falls under)

icy-url:http://www.shoutcast.com/r/n (homepage for the server)

Content-Type:audio/mpeg/r/n (Content type of the stream to follow)

icy-pub:1/r/n (whether the server is public or not)

icy-br:56/r/n (bitrate of the server)

icy-metaint:8192/r/n (if icy-metadata:1 was signified this was shown I will discuss this further later)

/r/n (end of header)

At this point the server begins sending the audio data(从这里开始发送音频数据).

可以看出ShoutCast服务器的Reponse与通常的HTTP协议不同,因此直接以HTTP协议方式进行连接不能够成功,需要自己写一套对应ShoutCast协议的处理。

上面介绍了一些相关的知识,下面介绍一下软件结构,如下图:

internet radio

Activity           App画面部分代码

SC Client        通过shoutcast协议连接网络电台,获取电台音频数据流

HTTP Server    提供http连接,将SCClient接收到的音频数据转发给MediaPlayer类

MediaPlayer    音频播放类,通过访问http://127.0.0.1/a.mp3:port 与HTTPServer建立连接获取数据流

RadioServer    网络电台服务器

在Android上开发网络收音机,核心部分在于将shoutcast协议的数据流转换为MediaPlayer类可播放的形式,也就是上图中的SCClient和HTTPServer,本文只是介绍了大体实现方案,具体编码中还会有一些细节问题(例如MediaPlayer连接HTTPServer时,需要有一个contentlenth,这个值应该指定为无穷大)需要解决。

Android Radio开发——控制电台(六) 上一篇文章我们调用到了 BroadcastRadioService,开启了收音机,这一篇我们来分析以下如何控制电台,即本地电台的基本操作。这里我们从 Android 车载应用中用于控制汽车收音机功能的主要活动 CarRadioActivity 开始分析。 阅读详情

相关推荐

ANDROIDmms网络电台/网络收音机

公司要求开发一个基于网络电台的开发。但由于现在大部分网络电台的媒体流是MMS格式(微软特有的格式),但由于竞争(不合法,苦了我们这些程序员),安卓并不支持微软的东西。所以我们团队花了很长时间做了这么一个成熟的网络电台,下载之后可以加我们QQ,一起探讨。

[Android实例] Android网络收音机项目(内含源码)

[Android实例]Android网络收音机     0 链接:http://www.eoeandroid.com/thread-180924-1-1.html ======================帖子内容=========================

chaozhung的专栏 3306

Altium Designer 16来自原理图/PCB的各种报错 (持续更新):

NO1.Nets with only one pin: 根本原因: 在BGA的原理图绘制时,我一般习惯拉出该元件的所有IO的网络,这方便利于我开发其他款板卡。同样也会因为不同板卡的需求不同而造成有些IO并没有使用到,也就是整个原理图中only one pin。 解决方案: 鼠标右键工程文件>工程参数>下图圈中的选项将“错误”更改为“警告/不报告” ...

优快云@猿谷攻城狮 1万+

Android网络电台的一种实现方案

随着电子产品的飞速发展,广播电台几乎已经远离了人们的娱乐生活,但是近年来由于网络电台的兴起,广播电台又逐渐有了市场,手机上如果有一个网络电台软件,使用率应该是比较高的。目前的主流智能手机平台中,iphone和 symbian都已经有了这类软件,android平台虽然推出的时间不是很长,但是也已经有这类软件了,最近我也正在Android上做这方面的工作,下面就把我的一些经验介绍一下。 来至:http://blog.youkuaiyun.com/xiaohuanggougou/archive/2010/03/17/5

zhongguomin的专栏 1538

华为云HCS解决方案笔记HUAWEI CLOUD Stack【面试篇】

华为云解决方案介绍、华为云服务介绍,华为云网络平面规划等

weixin_48375618的博客 1万+

Tomcat源码:Acceptor与Poller、PollerEvent

前文中我们介绍到NioEndpoint的start方法启动了Acceptor与Poller这两个异步线程来处理连接请求,本文我们就来接着介绍这两个组件。目录前言一、Acceptor1、构造方法2、run方法LimitLatchNioChannel二、Poller与PollerEvent2、pollerregisterruneventsprocessKey。

CRUD工程师 2065

Android 网络电台的一种实现方案

随着电子产品的飞速发展,广播电台几乎已经远离了人们的娱乐生活,但是近年来由于网络电台的兴起,广播电台又逐渐有了市场,手机上如果有一个网络电台软件,使用率应该是比较高的。目前的主流智能手机平台中,iphone和 symbian都已经有了这类软件,android平台虽然推出的时间不是很长,但是也已经有这类软件了,最近我也正在Android上做这方面的工作,下面就把我的一些经验介绍一下。  网络电台种类...

weixin_34254823的博客 346

第十五章数据管理成熟度评估【6’】(DAMA-CDGA 2022年以后历年模拟题真题汇总,基本包含所有考点。)

第十五章数据管理成熟度评估【6’】(DAMA-CDGA 2022年以后历年模拟题真题汇总,基本包含所有考点。)

JasonH2021的博客 403

Android网络收音机的一种设计方案-…

随着电子产品的飞速发展,广播电台几乎已经远离了人们的娱乐生活,但是近年来由于网络电台的兴起,广播电台又逐渐有了市场,手机上如果有一个网络电台软件,使用率应该是比较高的。目前的主流智能手机平台中,iphone和symbian都已经有了这类软件,android平台虽然推出的时间不是很长,但是也已经有这类软件了,最近我也正在Android上做这方面的工作,下面就把我的一些经验介绍一下。 网络电台

753

2026年华为od机试真题题库

OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)OD统一考试(E卷)

面试高手的博客 19万+

WPS文档中心和文档中台 operate 未授权访问漏洞(CVE-2025-0717)

WPS文档中心和文档中台的/open/v6/api/etcd/operate?key=/config/storage&method=get接口存在未授权访问漏洞,攻击者可通过该漏洞获取AK/SK密钥等信息,这些密钥通常用于系统内部认证和权限控制,泄露后可能导致攻击者进一步修改K8s配置、部署恶意容器或执行远程命令,最终实现对系统的完全控制。

李同學AI安全 903

网络电台-SHOUTcast

网络电台种类   目前的网络电台网站一般是基于以下三种协议的:   mms、rtsp、http   其中mms是微软公司提出的网络流媒体协议,通常采用wma格式的文件,Android现在还不支持这种协议,也不支持wma格式,原因比较明显,竞争对手嘛。   rtsp是RealNetworks公司提出的,Android是支持这种协议的,但是这种协议通常采用rm格式的文件,Android是不支持...

weixin_30385925的博客 624

【面试系列】软件架构师 高频面试题及详细解答

本文介绍了软件架构师岗位的初级、中级和高级面试题及详细解答,涵盖了系统设计、面向对象设计、分布式系统、云计算技术、性能优化等关键领域。通过这些问题和解答,候选人可以深入理解软件架构师的核心职责和技能要求。此外,文章总结了在面试中需要掌握的常考知识点,包括架构模式、分布式系统管理、安全性、数据管理和DevOps实践。通过掌握这些知识点,软件架构师能够有效设计和指导复杂系统的结构,确保系统的可扩展性、性能和维护性。

在路上的专栏 850

MPDroid进阶功能:输出设备管理、网络电台与Sticker评分完整攻略

**MPDroid** 是一款免费、开源的 Android 端 MPD 音乐服务器客户端,除了浏览曲库和播放控制之外,它还隐藏了三项进阶能力:**输出设备管理**(决定音乐从哪个设备出声)、**网络电台**(把互联网直播流存进曲库随时播放)和 **Sticker 评分**(给歌曲打分,构建个人评分库)。本文用 3 个步骤带你把这三项功能全部用起来,无需任何编程基础。 [![MPDroid安卓音乐

gitblog_00505的博客 702

【AIZ智能体】Codex 全能AI助手从部署到使用实战操作详解

Codex 全能AI助手从部署到使用实战操作详解

congge 2982

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

APP开发流程实例讲解-儒释道网络电台八天开发全程-签名发布

儒释道网络电台_APP创建全程讲解之 签名发布 今天做为开发《儒释道网络电台》APP的第七天,按计划的工作内容有:签名发布 为什么要签名 这个问题的答案也是我从网上找来的,来自博客:http://www.cnblogs.com/xiwix/archive/2012/04/15/2447910.html 1、什么是签名?

平平定的专栏 3139

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

新手必看:Tomahawk Android Music Player快速上手教程,5分钟玩转音乐库

Tomahawk Android Music Player是一款功能强大的开源音乐播放应用,让你轻松管理和享受音乐库。本教程将带你快速掌握其核心功能,5分钟内即可上手使用。 ## 准备工作:获取与安装 首先,你需要获取Tomahawk Android Music Player的源代码。打开终端,执行以下命令克隆仓库: ```bash git clone https://gitcode.com

gitblog_00105的博客 846

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

APP开发流程实例讲解-儒释道网络电台八天开发全程-项目发起

浏览净空法师网站时,看到有一个”儒释道网络电台“,感觉内容不错,可惜没有相应的APP,不能在手机上观看。正巧最近在研究安卓应用开发,于是就想做这样一个APP。一者可弘法利生,再者可增长技艺,何乐而不为。 源代码同步在优快云的GIT上同步更新。 https://code.youkuaiyun.com/do168/buddhismnetworkradio 本专栏将详细记录本APP开发过程的所有内容,包括所遇

平平定的专栏 3573

APP开发流程实例讲解-儒释道网络电台八天开发全程-在Android Studio中完成界面设计

在Android Studio中有一个模板可以创建左侧抽屉,但儒释道网络电台APP需要两边两个抽屉。在网上找到一篇文章《AndroidDrawerLayout+fragment布局实现左右侧滑 》,是使用FragmentTransaction来实现左右侧栏的显现。但在Android Studio中模板 完成界面设计

平平定的专栏 3624

Android16音频之设置媒体数据源MediaPlayer.setDataSource:用法实例(二百二十一)

本篇目的:Android16进阶之设置数据源MediaPlayer.setDataSource:用法实例基本概念setDataSource 向 MediaPlayer 提供音频/视频文件的 URI、FileDescriptor 或网络路径,用于后续解码与播放,是播放流程的首要入口。功能支持本地文件、资源、网络流、FD 多种形式;可附加 Header;与缓存、权限联动;无阻塞。使用限制需在 setOnPreparedListener 后调用 prepareAsync;文件需可读;

Android系统攻城狮 955

基于树莓派与MPD构建网络电台流媒体播放器:从原理到实战

流媒体技术通过将音频数据分割成连续的数据包在互联网上实时传输,实现了传统广播的互联网化转型。其核心原理基于客户端-服务器架构,采用如SHOUTcast、Icecast等协议进行数据封装与传输。这项技术的工程价值在于打破了地域限制,提供了稳定、高品质的音频内容获取方式,并赋予开发者对数据源、播放逻辑的完全控制权。在应用场景上,它不仅是商业电台App的基础,更是DIY和智能家居领域的理想实践项目,例如构建自主可控的网络电台播放设备。本文聚焦于利用树莓派硬件与MPD软件方案,手把手指导实现一个可定制、高音质的网络

weixin_29164091的博客 299

3g安卓市场_安卓智能音响怎么样 安卓智能音响产品介绍【详解】

现在是电子信息技术和物联网技术发展潮流的时代,各式各样电子产品的频频出现让我们的生活有更多的乐趣。在音响市场发展良好的情景之下,安卓品牌企业也将发展方向拓展到这一行业中,设计出了一款新产品——安卓智能音响。M-PO智能音箱音箱整体体积并不是很大,可以摆在桌面使用,也可以靠内置电池移动使用,箱体体积为98×98×105mm,重量1050g左右。音箱前面板与水平面有一定夹角,方便用户更好地观看屏幕。...

weixin_39709674的博客 104
上一篇: android获得当前 语言环境。
下一篇: Sqlite数据库 时间字段 默认时间
红尘给我滚滚
博客等级 码龄18年 65粉丝 54原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值