最近在看Android中播放延迟的问题,看了下代码,发现AudioTrack类中的函数latency有以下注释:
够强大,前几天自己还叭叭根据buffer计算延迟呢,原来可以调个函数就搞定。
看看函数AudioTrack::latency()的实现吧:
没什么内涵,直接返回了成员变量。
mLatency是在哪儿被 赋值的呢?
AudioTrack::createTrack函数中对mLatency进行了赋值:
其中afLatency是硬件的延迟。
(1000*mCblk->frameCount) / sampleRate,这一坨,是根据AudioTrack中的audio_track_cblk_t的buffer,计算AudioTrack buffer导致的延迟。
afLatency的来历,也在函数AudioTrack::createTrack中:
AudioSystem::getOutputLatency函数中首先根据stream type获取对应的output,然后尝试获取output的描述.
若取得成功,则使用output描述中的延迟;否则,获取AudioFlinger,并使用AudioFlinger中的延迟。
具体代码如下:
先看看AudioFlinger中的latency:
AudioFlinger::latency函数中,首先获取output对应的PlaybackThread,然后取得PlaybackThread的latency:
看看函数AudioFlinger::PlaybackThread::latency():
我做的这个项目中,mOutput其实就是AudioStreamOutALSA。
AudioStreamOutALSA::latency()函数:
mHandler中父类ALSAStreamOps的构造函数中被赋值。
用的是AudioStreamOutALSA构造函数中的参数handle。
AudioStreamOutALSA对象在函数AudioHardwareALSA::openOutputStream中被创建:
it的赋值:
mDeviceList的赋值在AudioHardwareALSA的构造函数中:
init函数其实就是s_init函数:
原来就是在这儿指定的latency:
回头看看,若是在函数AudioSystem::getOutputLatency中找到了output的描述,情况又是怎样的呢?
output描述是在AudioPolicyManagerBase的构造函数中被创建。
其中,latency是通过调用函数mpClientInterface->openOutput取得:
其实就是调用了函数AudioFlinger::openOutput。
其中对latency的赋值:
与前面的那条河流汇合了。
分享到:
相关推荐
#欢迎使用 audioBenchmark 应用程序! ##在 Apache 2.0 许可下发布。 该软件按原样提供,目前不应作为独立应用程序运行,但与 ADT 结合使用可能... 仅使用 ADT 进行测试(未使用 Android Studio,因为当时不支持 NDK)
### Android Audio 音频调试技巧 在Android平台上进行音频调试是一项重要的技能,它涉及到音频硬件、软件以及系统级配置等多个方面。本文将详细介绍如何利用不同的工具和技术来诊断和解决音频问题,包括查看声卡...
- AudioLoopbackLatencyTest: 测试音频输入和输出之间的延迟。 - HifiUltrasoundMicrophoneTest: 高保真超声波麦克风测试。 ### 5. 摄像头测试项 摄像头测试项主要关注设备摄像头的不同方面,例如: - ...
- **Latency, Flow Control & Clock Skew**:在传输音视频时需要处理延迟、流量控制和时钟偏差问题,以保证用户体验。 Android Auto Protocol的具体实现细节,需要开发者遵循Google提供的规范和指南,结合具体设备...
AudioFlinger是音频处理的核心,它负责混音、路由、采样率转换等工作,并通过低功耗音频流(Low Latency Streams)来优化实时音频应用。AudioService是用户空间的服务,它接收应用程序的音频请求,并通过Audio...
- **Audio Latency**:关注音频延迟问题,确保音效同步。 11. **开发者工具兼容性**:为开发者提供了一套标准的开发环境和工具,确保开发过程的顺畅。 12. **硬件兼容性**: - **Display and Graphics**:包括...
- 音频延迟(Audio Latency):音频处理和播放的延迟要求。 - 网络协议(Network Protocols):对互联网连接中使用的网络协议的要求。 - 安全媒体(Secure Media):确保媒体内容的安全性。 - 屏幕技术(Screen ...
MWEngine is.....an audio engine for Android, compatible with Android 4.1 and up, using either OpenSL or AAudio(when available) as the drivers for low latency audio performance.MWEngine provides an ...
连接事件 在一个连接当中,主设备会在每个连接事件里向从设备发送数据包。一个连接事件是指主 设备和从设备之间相互...2.Slave Latency(从设备延迟或者从设备时延) 3.Supervision Timeout(超时时间或者监控超时)
Flutter插件可同时播放多个音频文件,适用于Android,iOS,macOS和Web。 贡献 现在,我们有了新的贡献规则! 感谢您的所有帮助,但是如果您有任何疑问,错误报告,问题,功能请求,请求请求等,请首先参考我们的。...