网络电台种类

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

  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

  User-Agent:AndroidInternetRadio

  Accept:audio/mpeg

  服务器端返回如下:

  ICY 200 OK (signifying that the server was successful)

icy-notice1:
This stream requires Winamp
(redundant notice)

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

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

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

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

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

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

  icy-br:56
(bitrate of the server)

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

  
(end of header)

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

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

http://zh.wikipedia.org/wiki/SHOUTcast

SHOUTcast是由Nullsoft研發、支援多個作業系統、免費的聲音串流科技,用於網路廣播。

SHOUTcast使用MP3或是AAC將聲音編碼,由HTTP作為傳送協定。

SHOUTcast的使用者可建立自己的網路廣播電台,許多軟體都可以收聽該廣播輸出的格式,包括Nullsoft WinampXMMS,以及蘋果電腦的iTunes。目前可作的用途包含了聽音樂、看影片以及收聽現場直播。

用途

最常見的用途就是以SHOUTcast製作網路廣播。比起傳統的AM調幅或FM調頻廣播,SHOUTcast不僅便宜,技術門檻也較低,更不受到政府管理頻譜的影響。同時,傳統的廣播電台也利用SHOUTcast將版圖延伸到網路上,讓聽眾在收不到電波的地方(例如地下室)、地下電台蓋台嚴重或是該廣播電台的訊號涵蓋範圍以外的地區及國外仍可利用網路來收聽。

批評

VLC media player的開發團隊指出SHOUTcast的合約禁止將SHOUTcast使用在任何開放原始碼自由軟體中,同時必須夾帶SHOUTcast Radio Toolbar(該團隊認為此程式屬於廣告間諜軟體),因此在VLC Player 1.1.0版後移除了SHOUTcast的支援[1]

shoutcast 例子分析

http://blog.csdn.net/wertcsdn/article/details/2213374

注:此例子为塞班s60的一种实现

网络电台-SHOUTcast的更多相关文章

  1. Centos 上使用mmsh协议听猫扑网络电台 VLC播放器

    Centos 上使用mmsh协议听猫扑网络电台 VLC播放器 安装CentOS已经有一段时间了,但是由于在Linux下除了学习,其他是事情都干不了.今天想闲来无事开了CentOS就想听一下歌,突然想起 ...

  2. 网络电台(WIZ550io)

    网络电台是用WIZ550io(内嵌MAC地址)和ATMEGA1284(Flash 128K,EEPROM4K)制作的.用户可注冊多达80个无线电广播. 无线电广播的注冊可在内嵌网页中进行. 网络电台的 ...

  3. Flash流媒体服务器软件

    所谓流媒体技术,是指将连续的影像和声音信息经过压缩处理后放在网站服务器上,让用户能够一边下载一边观看.收听(即所谓的“在线欣赏”),而不需要等整个压缩文件下载到自己的机器上才可以欣赏的网络传输技术.目 ...

  4. 198个经典C#WinForm实例源码(超赞) 里面的例子 .sln 目录

    \-窗体技巧\QQ窗体\QQFrm.sln; \-窗体技巧\仿XP系统的任务栏菜单\仿XP系统的任务栏菜单.sln; \-窗体技巧\向窗体中拖放图片并显示\向窗体中拖放图片并显示.sln; \-窗体技 ...

  5. HTML的音频和视频

    目录 [1]媒体格式 音频格式 视频格式 [2]元素 插件元素 HTML5元素 [3]HTML音频 [4]HTML视频 前面的话 多媒体元素(比如视频和音频)存储于媒体文件中,确定媒体类型的最常用的方 ...

  6. TCP/UDP端口列表

    http://zh.wikipedia.org/wiki/TCP/UDP%E7%AB%AF%E5%8F%A3%E5%88%97%E8%A1%A8 TCP/UDP端口列表     本条目可通过翻译外语维 ...

  7. BeagleBone Black项目实训手册(大学霸内部资料)

    BeagleBone Black项目实训手册(大学霸内部资料) 介绍:本教程是<BeagleBone Black快速入门教程>的后续教程.本教程以项目操作为主,讲解LED项目.声音项目.传 ...

  8. metasploit--exploit模块信息

    Name                                             Disclosure Date  Rank    Description ----           ...

  9. (IOS)Swift2.0 Radio 程序分析

    本文主要分享下楼主在学习Swift编程过程中,对GitHub上的一个开源项目Swift Radio的研究心得. 项目地址:https://github.com/swiftcodex/Swift-Rad ...

随机推荐

  1. PHP之 xampp 安装环境

    1.安装XAMPP  需要注意以下几点: (1):必须已管理员身份运行: (2):先点击安装Apache和mysql(如果apche端口被占用,先停止服务里面的apche服务) (3):别忘记切换PH ...

  2. 【BZOJ 3090】 树形DP

    3090: Coci2009 [podjela] Description 有 N 个农民, 他们住在 N 个不同的村子里. 这 N 个村子形成一棵树.每个农民初始时获得 X 的钱.每一次操作, 一个农 ...

  3. Test20171009 考试总结 NOIP模拟赛

    题目难度合适,区分度适中,但是本人水平不佳,没有拿到满意的分数. T1(matrix) 一种比较容易想到的想法是枚举起点求出最长全1串做预处理,这是O(n^2)的. 接着枚举列起点,列终点,通过后缀和 ...

  4. python开发_filecmp

    filecmp模块用于比较文件及文件夹的内容,它是一个轻量级的工具,使用非常简单.python标准库还提供了difflib模块用于比较文件的内容.关于difflib模块,且听下回分解. filecmp ...

  5. VK Cup 2016 - Qualification Round 2 A. Home Numbers 水题

    A. Home Numbers 题目连接: http://www.codeforces.com/contest/638/problem/A Description The main street of ...

  6. hdu 1540 Tunnel Warfare 线段树 单点更新,查询区间长度,区间合并

    Tunnel Warfare Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pi ...

  7. Shell基础学习(四) echo命令

    1.显示普通的字符串 echo "boring" 2.显示转义字符 echo "\"It is a test!\""; 3.read 命令从 ...

  8. 微信小程序的坑

    虽然官方文档,可以在.json中给页面设置背景颜色,用backgroundColor,但是实际上并不好使,所以设置背景颜色只能在wxss中设置 <import src="../comm ...

  9. 应该用H5编写APP还是用原生的呢?

    现观目前市场上的APP横行,不同行业.不同类目的APP在国内各大应用市场挤爆的满满了,那么作为一个程序员或者一个企业如何能从容的把握住制作一款实用又符合用户体验的APP呢? 自从接触APP也有四年多了 ...

  10. CentOS 6.9下的iptables在本机用DNAT转发指定IP到内网IP无效的问题解决(127.0.0.1)

    比如: iptables -t nat -A OUTPUT -p tcp -d 192.168.1.0/24 --dport 2222 -j DNAT --to-destination 127.0.0 ...