一、目的

在之前的博文中我们分析过播放器整体的软件框架,本文在其基础上继续探讨数据缓冲机制。

二、设计

在播放设计中,我们需要考虑两类数据的调度管理,一类是事件类的管理,一类是音频数据的管理。

例如在网络流播放是,预处理线程发起HTTP请求,我们可以从HTTP请求的content-type头部中获取到音频格式信息,这样我们就可以通知解码线程进行解码器的初始化,当预处理线程获取到原始音频数据时就需要通过跨线程搬运的方式给解码线程去解码。

从上面的描述来看,设计一个跨线程的RINGBUFFER显得至关重要,其主要负责音频数据的同步与缓冲,那到底这个RINGBUFFER要有哪些功能呢?

分析这样一个场景,当预处理器(下载器)即生产者比较慢时(网络下载较慢),由于解码线程没有数据可以处理,那么播放线程也就没有数据可以播放;当网络不稳定时,我们就有可能听到明显的卡顿声;如果网络持续不稳定,我们可能就会听到断断续续的卡顿声。

再分析这样一个场景,当网络比较好的情况下,由于播放是一个较慢的操作(即必须按照采样率的速率去操作硬件设备),当生产者较快时,消费者必然来不及处理,此时由于内存的限制,我们不可能无限缓冲数据(这种情况尤其在内存较少的小平台系统上尤其突出)。

鉴于上面的分析,我们发现,我们要设计这样一个buffer,生产者慢时要缓存一定的数据后再开始播放,即要有蓄水

嵌入式平台音频播放器设计(数据缓冲)相关推荐

  1. 嵌入式平台音频播放器设计(基础篇)

    一.目的 相信不少同学都见过以前那种很小的MP3播放器(暴露年龄),高级一点的还带一个小的单色液晶屏,想必理工科男都想自己设计一款这样的一款播放器. 那么如何才能设计实现一个简单的音乐播放器呢? 本文 ...

  2. 嵌入式linux音频播放器设计,基于嵌入式Linux下Madplay音频播放器设计论文.docx

    基于嵌入式Linux下Madplay音频播放器设计论文 滁州职业技术学院计算机应用技术专业毕业论文PAGE I 滁州职业技术学院信息工程系--2015届计算机应用专业毕业论文 姓 名: 周杰 班 级: ...

  3. 毕业设计 嵌入式 MP3音乐播放器设计与实现

    文章目录 1 简介 2 绪论 2.1 课题背景与目的 3 系统设计 3.1 系统架构 3.2 软件部分设计 3.3 实现效果 3.4 部分相关代码 4 最后 1 简介 Hi,大家好,学长今天向大家介绍 ...

  4. Windows平台RTSP播放器/RTMP播放器设计需要考虑的几个点

    我们在实现Windows平台RTSP播放器或RTMP播放器的时候,需要考虑的点很多,比如多实例设计.多绘制模式兼容.软硬解码支持.快照.RTSP下TCP-UDP自动切换等,以下就其中几个方面,做个大概 ...

  5. 基于android平台多媒体播放器的设计与实现,基于Android的多媒体音乐播放器设计论文...

    中图分类号:TP317 文献标识码:A 文章编号:1009-3044(2016)03-0240-02 随着计算机网络与手机的迅速发展,各种音乐资源成为人们生活中必不可少的一部分,音乐播放软件成了手机必 ...

  6. linux 音频播放器源码,Linux的音频播放器的设计源代码.doc

    Linux的音频播放器的设计源代码 嵌入式操作系统 课程设计 源代码 设计题目: 基于Linux的音频播放器的设计 院 系: ********* 班 级: ******** 组 别: 第1组 学 号: ...

  7. linux 音频播放器源码,基于Linux的音频播放器的设计 源代码.doc

    嵌入式操作系统 课程设计 源代码 设计题目: 基于Linux的音频播放器的设计 院 系: ********* 班 级: ******** 组 别: 第1组 学 号: ****** 姓 名: 起止日期: ...

  8. 自定义制作音频播放器_使用HTML5制作音频播放器,第3部分:微数据和皮肤

    自定义制作音频播放器 In the first two articles of this series I introduced the concept and code of a customize ...

  9. web音频播放器_Web设计:如何创建一个时尚的Web音频播放器

    我仍然记得在2000年代初,在线播放富媒体(音频和视频)时遇到了很多限制. 很容易就将开始视为理所当然,尤其是自从今天以来,我们有很多商店可以播放音频,例如last.fm或播放视频,例如Youtube ...

最新文章

  1. c盘扩展卷是灰色的_银行电脑win7-C盘满了怎么办
  2. linux下编译onvif框架,Onvif第六课 Linux编译gsoap
  3. mysql模糊查询的优化方法--亲自实践
  4. Android的自定义键盘颜色,android自定义键盘(解决弹出提示的字体颜色问题)
  5. AS3中 is,as,typeof的区别 .
  6. 提示用户输入一个正整数n,如果n=5,就输出下列图形,其他n值以此类推
  7. vep文件如何转换mp4_如何将DVD的vob视频格式转换成mp4格式
  8. HA集群实现原理 切换 JAVA_HA(一)高可用集群原理
  9. IDEA——修改idea64.exe.vmoptions文件解决coding卡顿问题
  10. python socket自动重连_python之tcp自动重连
  11. C# 处理excel 大全
  12. Unity3D Timeline 工作流
  13. 微信最新的系统默认emoji表情集
  14. String类-拆分字符串
  15. No service of type FactoryLoggingManagerInternal available in ProjectScopeServices.
  16. redis.clients.jedis.exceptions.JedisDataException: NOAUTH Authentication required
  17. Unity 3d 摄像头
  18. 【装Linux系统时卡在logo处】禁用独显驱动
  19. 高等数学笔记-乐经良老师-第七章-向量代数与空间解析几何(Ⅱ)
  20. 基于RK3399第一篇烧录Ubuntu18.04系统并实现PuTTy远程登录

热门文章

  1. 雾霾来临,出门在外的led显示屏应该怎么保护好自己?
  2. JDK8-JDK17中的新特性(var类型推断、模式匹配、Record、密封类)
  3. python xlrd用法_python3 xlrd包的用法
  4. Java高级编程架构——Spring实战:Spring初探
  5. 有序列表的部分属性和a超链接的部分属性 部分可能用到的行级标签
  6. 但是尚未从池中获取连接_解决报错“超时时间已到。超时时间已到,但是尚未从池中获取连接”的方案...
  7. Linux命令之usermod命令
  8. 类与结构体性能对比测试——以封装网络心跳包为例
  9. 【Linux 】errno 错误码对照表和宏|error
  10. Python Turtle库画一个美国国旗