Files
Velix-MPV-Core/DOCS/HARMONY_AUDIO_RESEARCH.md
T

3.4 KiB
Raw Blame History

HarmonyOS Audio Research

1. 推荐方案

新增 MPV 音频输出 ao_harmony,直接接 HarmonyOS OHAudio:

MPV audio pipeline -> native PCM ring/buffer -> OHAudio write callback -> AudioRenderer

禁止 PCM 逐块跨 N-API/ArkTS。ArkTS 只发送播放器级控制和生命周期事件。

2. SDK 依据

  • headers:ohaudio/native_audiostreambuilder.h、native_audiorenderer.h、native_audiostream_base.h、multimedia/native_audio_channel_layout.h
  • library:libohaudio.so
  • baseline:API 10
  • builder:采样率、声道数、sample format、encoding、latency mode、channel layout、usage、write callback、callback frame size
  • renderer:Start、Pause、Stop、Flush、Release、timestamp、frames written、volume、speed、underflow count、latency

API 24 还提供 advanced callback 等新接口,但首版使用最低且稳定的 callback API,避免无必要抬高最低版本。

3. 与 MPV AO 的映射

MPV / 播放需求 OHAudio 映射 设计
PCM 格式协商 SetSamplingRate、SetChannelCount/Layout、SetSampleFormat init() 将 MPV ao->format 映射为 OHAudio;不支持时返回 unsupported,让 MPV 重采样
数据输出 renderer write callback 回调只读取 MPV AO buffer,禁止阻塞、分配大对象或调用 ArkTS
Pause/Resume OH_AudioRenderer_Pause/Start 与 MPV control() 状态串行化
Stop/Seek Stop/Flush/Start Seek 时丢弃旧 PCM,并重建 MPV A/V sync 基准
Volume OH_AudioRenderer_SetVolume 首版支持 0..1;MPV 软件音量仍可用,避免重复增益
Speed MPV 音频滤镜为主 不直接用 Renderer speed 改变 MPV 时钟;系统 speed 仅后续专项验证
A/V Sync GetTimestamp / GetFramesWritten 驱动 delay 由已提交帧与硬件播放位置计算,必须做单调性/路由切换测试
低延迟 SetLatencyMode 视频播放默认 normal;fast 仅在设备支持和稳定性测试后启用
多声道 channel layout + capability 先 stereo;5.1/7.1 按设备能力协商,失败回退重混音,不 fake success

4. MPV 接入位置

  • 新文件建议:audio/out/ao_harmony.c。
  • 注册位置:meson.build 的 audio outputs 区域和 audio/out/ao.c driver list。
  • 参考结构:ao_aaudio.c 的 callback/pull 模式及状态控制;不能复制其 Android API。
  • OHAudio callback 与 MPV AO buffer 的线程安全遵循 audio/out/buffer.c 现有模型;回调只消费系统请求的 frame 数。

5. 格式策略

首版候选优先级:float32(若稳定支持)→ signed 16-bit。采样率优先内容原始值,设备拒绝则让 MPV/libswresample 转为 48 kHz。声道首版 2.0,随后验证 5.1/7.1。所有实际支持值通过 builder 创建结果与设备行为确认,不从枚举存在推断硬件支持。

6. 风险与验证

  1. write callback 的实时线程约束和最大执行时间。
  2. GetTimestamp 在暂停、Flush、蓝牙/有线切换后的连续性。
  3. underrun、首包预填充与首音频时间。
  4. Surface 暂停但音频继续、应用后台、音频焦点中断。
  5. 播放速度与 MPV 时钟双重调整风险。
  6. 多声道 layout 枚举和实际设备 route 不一致。

首版验收:PCM 正常播放;pause/resume/seek 无旧音频泄漏;1 小时无死锁;统计 underrun;A/V sync 偏差有真实测量。未完成这些测试前不宣称低延迟或多声道完成。