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

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

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网络电台的一种实现方案相关推荐

  1. android 那几种动画,Android 动画实现几种方案

    Android 动画实现几种方案 在 Android 的 FrameWork 中,为我们提供三种动画的实现方式:逐帧(Frame)动画.视图/补间动画(View Animation)和属性动画(Pro ...

  2. android 热更新 方案,热更新-热更新app开发的两种系统方案!

    针对app开发工作人员来讲,除开要会编码,热更新也是一定要学好和把握的方法,从技术性视角而言,热更新对Android和iOS各自有不一样的系统软件方案,为了更好地让大伙儿掌握这二种系统方案的差别,今日 ...

  3. 【Android N7.0】Framework层实现派发HOME按键到Application层的一种简单方案

    frameworks/base/core/java/android/view/WindowManager.java frameworks/base/services/core/java/com/and ...

  4. 拒绝卡顿,揭秘盒马鲜生 Android 短视频秒播优化方案

    简介:短视频作为内容重要的承载方式,是吸引用户的重点,短视频的内容与体验直接关系到用户是否愿意长时停留.因此,体验的优化就显得尤为重要.上一篇我们分享了 iOS 短视频秒播优化,这篇我们来聊聊 And ...

  5. android 系统gpu 调试_基于Android系统的GPU动态调频方案 | Imagination中文技术社区

    针对移动终端上GPU的高功耗问题,提出一种基于Android系统的GPU动态调频方案.方案根据各种应用对GPU的性能需求,引入了GPU的频率一性能模型,包括选择工作频率和测量相对性能的方法.动态调频算 ...

  6. Android Q app内存压缩优化方案介绍

    Android Q app内存压缩优化方案介绍 原创文章,谢绝转载! Android Q新增了部分系统性能优化方案,这里简单学习下,本篇文章先分析app compaction. 一.愿景: 在保证后台 ...

  7. Android APP全局黑白化实现方案

    作者:小帅 链接:https://zhuanlan.zhihu.com/p/587516253 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 在清明节时各大APP都 ...

  8. Android系统的三种分屏显示模式

    Google在Android 7.0中引入了一个新特性--多窗口支持,允许用户一次在屏幕上打开两个应用.在手持设备上,两个应用可以在"分屏"模式中左右并排或上下并排显示.在电视设备 ...

  9. 用 Kotlin 开发 Android 项目是一种什么样的感受?(二)

    前言 前面我已经写了一篇名为<用 Kotlin 开发 Android 项目是一种什么样的感受?>的文章.文中多数提到的还是 Kotlin 语言本身的特点,而 Kotlin 对于 Andro ...

最新文章

  1. 电动力学每日一题 2021/10/11
  2. Linux——SSH连接错误【No supported authentication methods available】解决方案
  3. 单臂路由与三层交换技术简单介绍
  4. ABBYY FineReader 12可以内置自动化任务吗
  5. java物业管理系统设计,JAVA物业管理系统设计与实现(论文+源代码)
  6. Android App内存优化之图片优化
  7. Python工作笔记004---python字符串前面加上'r'的作用_u_b的含义
  8. 图网络笔记-知识补充与node2vec代码注解
  9. 利用多线程提高程序性能(for Android)
  10. floating输入 高阻输入_STM32 GPIO八种输入输出模式
  11. pcm 采样率转换_高速模数转换器 ADC 树立了实时监测和控制的标准
  12. python—IFrame:在jupyter notebook中展示某个网页的情况
  13. [转]vs2010 MSDN文档安装方法
  14. JS自定义表单提交处理方案
  15. POJ 1981 Circle and Points 单位圆覆盖
  16. 知识改变命运 股市改变人生
  17. 电脑如何恢复已删除文件 如何恢复被删除的数据
  18. 02计算机优秀毕业论文-摘要·前言
  19. 乐观数据:企业抖音蓝V账号获取流量运营的四个技巧
  20. 【有利可图网】PS实战系列:制作抖音UI图标

热门文章

  1. java求长方体_Java练习 SDUT-3337_计算长方体、四棱锥的表面积和体积
  2. 机械传感器与半导体加速度传感器比对
  3. Oracle游标设置
  4. Java基础15-java进阶(6)【网络编程】
  5. 【Nginx】陶辉老师100讲第三章序
  6. 芯片工艺库中的ffg、ssg、ttg和HVT、LVT、SVT(RVT)
  7. 保密管理概论课程设计任务
  8. CF1304F1 - Animal Observation DP
  9. Java基础编程练习50题(转载)
  10. java 验证码 jfinal 验证码