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

一、目的

 

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

二、设计

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

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

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

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

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

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值