`

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

阅读更多

随着电子产品的飞速发展,广播电台几乎已经远离了人们的娱乐生活,但是近年来由于网络电台的兴起,广播电台又逐渐有了市场,手机上如果有一个网络电台软件,使用率应该是比较高的。目前的主流智能手机平台中,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平台的智能配电终端调试及故障预警系统.pdf

    【Android 客户端 应用开发】:文章描述了一个基于Android平台的智能配电终端调试及故障预警系统,该系统利用Android手机APP进行智能配电终端的调试和故障预警。通过无线局域网与智能控制终端进行数据交互,再通过4G...

    vlc-android_good - 副本_vlc_endxjb_vlcrtmp_android_

    1. **RTSP(Real Time Streaming Protocol)**:这是一种应用层协议,用于控制实时数据传输,例如视频和音频流。RTSP通常用于IP摄像头、视频会议系统等,允许客户端通过网络请求并控制媒体流的播放。 2. **RTMP...

    抖音无人直播系统,防检测

    抖音无人直播系统是一种创新的直播方式,它允许用户在无需人工操作的情况下进行直播,通过预先录制的视频或者实时转播他人的直播间内容来实现。这种技术对于那些希望24小时不间断直播,但又无法时刻在线的用户来说...

    Actel推出适于SmartFusion器件的Unison超小型Linux OS.pdf

    FAST通过自动化测试流程,减少了测试时间和成本,提供了一种统一的测试数据管理和分析方法。 最后,Atmel公司推出了高抗噪性能的汽车无线电台天线IC,如ATR4253,专为汽车电子应用设计,支持多种区域广播系统,体现...

    control4技术支持

    - 总线灯光是一种基于总线技术的照明控制系统,通过单一的数据线实现对多个灯具的集中控制。 - 规划与安装系统时需要考虑的因素包括电源供应、线路布局、开关位置等。 - 进阶灯光情景设计能够实现更加个性化的...

    kodi_v18.0家庭娱乐影音中心

    这款软件基于开源项目XBMC(Xbox Media Center),现更名为Kodi,旨在提供一种高效且自由的方式来管理和享受个人媒体库。 Kodi的核心功能包括: 1. **媒体管理**:Kodi支持多种格式的音频和视频文件,包括MP4、AVI...

    资料-MOTO英文资料.zip

    PDF(Portable Document Format)是一种通用的文件格式,用于保持文档的原始布局和样式,便于跨平台查看和打印。 在深入探讨摩托罗拉的相关知识点之前,我们需要明确几个关键领域: 1. **摩托罗拉历史**:摩托罗拉...

    30种媒体播放器

    这些播放器可能包括开源、免费、商业以及专有软件,每一种都有其独特的特性和功能。以下是关于媒体播放器的一些关键知识点: 1. **多格式支持**:大多数现代媒体播放器支持多种文件格式,如MP3、WAV、AAC、FLAC、...

    辽宁省大石桥市第二高级中学2017_2018学年高二英语下学期学考模拟考试试题

    Live365则是一个网络广播服务,可以在电脑或移动设备上使用,特别的是,它拥有158个圣诞节音乐电台,如Contemporary Christmas、Christmas Breezes和Classical Christmas。用户只需搜索“Holiday Music”,即可享受...

    语义开放平台API介绍

    - **多样化接入方式**:提供API和SDK两种接入方式,适用于Web、Android、iOS、微信等多种平台。 - **定制化服务**:针对智能车载、智能家居、儿童陪伴、医疗问答、智能客服等特定场景进行了深度定制。 #### 三、...

Global site tag (gtag.js) - Google Analytics