复杂性是不可避免的,而且只会随时间增长,所以在增加特性时一定要为重构和代码简化留出时间。真正遇到问题这前先不要担心性能。iPhone非常强壮,你可能永远也不会遇到预想的性能问题。

能过互联网向一个设备传送音频时,可以采用两种传输模型:流式传输和下载。

对于流式传输,音频服务器会按音频的比特率通过网络传送字节。例如,如果音频编码为64Kbits/s,可以预见,流式传输时就会采用这个速率(64kbit/s).有一个连续,不间断的音乐流时常会采用流式音频。

如果音频传输采用下载模型,音乐将被划分为离散的数据块(例如, 一次传送一首歌).客户尽可能快地下载一个数据块并播放,而且只在第一个数据块快要完成下载时才开始下载下一个数据块。

各种模型都有其优缺点。流式传输需要有客户端内存开销更少(数据一旦传输就会有消耗),而且客户实现的复杂性也更低(这要以服务器端更高的复杂性为代价)。不过从某种程序讲,流式传输也更容易由于网络延迟和丢包而破坏音频。另一方面,下载的音频内容开销更大(因为音频段可能相当大),而且客户端复杂性也更大。但是下载的音频对网络破坏更有免疫力,因为网络宽带可以得到充分利用而不是局限于一个固定的量。

为实现这个特性,需要做到3点:了解至今为止已经播放了歌曲的多少字节,在应用终止时保存这个信息,并且在应用启动时通过开始一个部分下载从退出时的偏移位置恢复中断的歌曲。

参考资料:《精彩iPhone炫酷开发-七位一线高手的编程和设计范例》

【读书笔记】iOS-流式音频与Pandora Radio之路的更多相关文章

  1. [读书笔记]iOS 7 UI设计 对比度

    好久没写随笔了,最近在读<iOS 7 byTutorials>,很不错,推荐给大家. 每一个好的程序员也都是一个设计师,不懂设计的程序员不是好的CTO.哈哈,开个小玩笑. iOS 7设计的 ...

  2. 读书笔记-iOS核心动画高级技巧

    如果不使用+imageNamed:,那么把整张图片绘制到CGContext可能是最佳的方式了. 这里我们利用了CALayer的KVC来存储和检索任意的值,将图层和索引打标签. 使用KVC打标签

  3. 强化学习读书笔记 - 13 - 策略梯度方法(Policy Gradient Methods)

    强化学习读书笔记 - 13 - 策略梯度方法(Policy Gradient Methods) 学习笔记: Reinforcement Learning: An Introduction, Richa ...

  4. 强化学习读书笔记 - 12 - 资格痕迹(Eligibility Traces)

    强化学习读书笔记 - 12 - 资格痕迹(Eligibility Traces) 学习笔记: Reinforcement Learning: An Introduction, Richard S. S ...

  5. 强化学习读书笔记 - 11 - off-policy的近似方法

    强化学习读书笔记 - 11 - off-policy的近似方法 学习笔记: Reinforcement Learning: An Introduction, Richard S. Sutton and ...

  6. 强化学习读书笔记 - 10 - on-policy控制的近似方法

    强化学习读书笔记 - 10 - on-policy控制的近似方法 学习笔记: Reinforcement Learning: An Introduction, Richard S. Sutton an ...

  7. 强化学习读书笔记 - 09 - on-policy预测的近似方法

    强化学习读书笔记 - 09 - on-policy预测的近似方法 参照 Reinforcement Learning: An Introduction, Richard S. Sutton and A ...

  8. 流式计算与计算抽象化------《Designing Data-Intensive Applications》读书笔记15

    上篇的内容,我们探讨了分布式计算中的MapReduce与批处理.所以本篇我们将继续探索分布式计算优化的相关细节,并且分析MapReduce与批处理的局限性,看看流式计算是否能给我们在分布式计算层面提供 ...

  9. STL源码剖析读书笔记--第四章--序列式容器

    1.什么是序列式容器?什么是关联式容器? 书上给出的解释是,序列式容器中的元素是可序的(可理解为可以按序索引,不管这个索引是像数组一样的随机索引,还是像链表一样的顺序索引),但是元素值在索引顺序的方向 ...

随机推荐

  1. cad.net 利用win32api实现不重复打开dwg路径的文件夹(资源管理器)

    这里地址的方法也是可用的,但是net3.5不能使用 为此我选择使用win32api的方式来遍历当前桌面所有资源管理器 /// <summary> /// 不重复打开dwg路径的资源管理器 ...

  2. 3.复杂的viewpager

    实现这样的效果: 1.主页面布局 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&quo ...

  3. JavaScript对象编程-第3章

    目录 Date对象 Math对象 数组对象 字符串对象 正则表达式对象 什么是对象 对象拥有属性和方法,属性各种数据类型,方法对属性中的数据进行操作. JavaScript的对象 内置对象 Date. ...

  4. kubernetes集群搭建(9):docker 镜像的导入与导出

    由于K8s搭建时官方提供的镜像不FQ是访问不了的,所以搭建过程中很多时间都耗费在去找镜像去了 下面是我搭建k8s集群用到的镜像  没有采用之前我用的二进制文件搭建(dns没成功),这里采用的Kubea ...

  5. 利用SSH反向隧道,连接内网服务器

    前言 公司有一台文件服务器(内部使用,无外网IP),上面主要安装了SVN服务,用来存储和共享各部门的文档,因为都是内网,直接远程(mstsc)上去就可以方便维护,但最近公司租了新的办公室,部分员工被分 ...

  6. ubuntu 16.04 安装chrome的方法

    默认chrome在ubuntu上是没默认安装,安装也不能使用apt-get 来安装,一般会遇到名字无法找到的问题. 摸索了一下,才找到一个比较好的安装方式: 1 从网站: https://www.ch ...

  7. Maven - 实例-5-依赖冲突

    避免依赖冲突的原则 如果项目中的pom.xml没有指定依赖的信息,而是通过继承来引用依赖,则很有可能发生继承同一个依赖的多个版本,从而产生依赖冲突. Maven通过如下两个原则来避免依赖冲突: 1- ...

  8. JS特效实现微博评论逻辑

    实现代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  9. scrapy爬虫--苏宁图书

    实现业务逻辑如下: 1. 创建scrapy项目,并生成 爬虫2. 在suning.py中实现Schedul 和 Spider业务逻辑3. 修改start_urls为正确的初始请求地址4. 构造pars ...

  10. PHP-----浅谈垃圾回收机制

    前言 大多数编程语言都会有自身的垃圾回收机制,php也不例外.经常听很多人说gc,也就是垃圾回收器,全程为Garbage Collection. 在php5.3之前,是不包括垃圾回收机制的,也没有专门 ...