【发布时间】:2011-08-21 22:15:26
【问题描述】:
在处理音频播放时,我习惯了以下模式:
- 一个磁盘(或网络)线程从磁盘(或网络)读取数据并填充环形缓冲区
- 一个音频线程,从环形缓冲区读取数据,可能执行 DSP,并写入音频硬件 (拉取或推送 API)
这很好用,并且在处理 WAV 文件时没有问题。
现在,如果源数据以压缩格式(如 Vorbis 或 MP3)编码,则解码需要一些时间。
在磁盘/网络线程中执行解码似乎很常见。
但这不是错误的设计吗?当磁盘或网络访问阻塞时,一些 CPU 时间可用于解码,但如果解码发生在同一个线程中,则会被浪费。
在我看来,如果网络变慢,如果按顺序进行解码,则缓冲区欠载的风险会更高。
那么,解码不应该在音频线程中执行吗?
在我的上下文中,我宁愿避免添加专用的解码线程。它适用于移动平台,而 SMP 现在非常罕见。但是请告诉你一个专用的解码线程是否真的对你有意义。
【问题讨论】:
标签: multithreading audio audio-streaming decoding