【错误记录】Oboe / AAudio 播放器报错 ( onEventFromServer - AAUDIO_SERVICE_EVENT_DISCONNECTED - FIFO cleared )

2023-03-29 12:02:29 浏览数 (1)

文章目录

  • 一、报错信息
  • 二、解决方案

在 Android 8.0 以上的机型中 , Oboe 播放器调用的是 AAudio 播放器 API ;

在 Android 8.0 以上的机型中 , Oboe 播放器调用的是 OpenSL ES 播放器 API ;

本博客中涉及的 Android 系统版本是 9 , 10 , 11 , 因此 Oboe 本质上调用的播放器都是 AAudio 播放器 ;

参考 【Android 高性能音频】Oboe 函数库简介 ( Oboe 简介 | Oboe 特点 | Oboe 编译工具 | Oboe 相关文档 | Oboe 测试工具 ) 博客 ;

一、报错信息


在 Android 应用中使用 Oboe 播放器 , 启动了两个进程 , 每个进程中创建了一个 Oboe 播放器进行发音操作 ;

Oboe 播放器使用 , 参考 【Android 高性能音频】Oboe 开发流程 ( Oboe 完整代码示例 ) 博客 ;

两个 Oboe 播放器在 Android 10 , Android 9 中运行良好 , 但在 Android 11 的设备中出现如下报错 ;

启动了两个 Oboe 播放器 , 后启动的 Oboe 播放器会抢占扬声器设备 , 将先启动的 Oboe 播放器关闭 ;

对应的播放器报错如下 :

代码语言:javascript复制
2021-05-05 13:51:06.545 16722-16933/kim.hsl.oboe I/ELEVOC_NS_FRONT: cycle task init 0x7319b81b00

2021-05-05 13:51:06.551 16722-16932/kim.hsl.oboe W/AudioStreamInternal_Client: onEventFromServer - AAUDIO_SERVICE_EVENT_DISCONNECTED - FIFO cleared
2021-05-05 13:51:06.564 16722-16947/kim.hsl.oboe E/AAudioStream: setState(1) tried to set to 9 but already DISCONNECTED
2021-05-05 13:51:06.565 16722-16947/kim.hsl.oboe E/AAudioStream: joinThread() - but has no thread
2021-05-05 13:51:06.565 16722-16947/kim.hsl.oboe E/AAudioStream: setState(1) tried to set to 11 but already CLOSING

2021-05-05 13:51:06.586 16722-16933/kim.hsl.oboe W/AudioTrack: Use of stream types is deprecated for operations other than volume control
2021-05-05 13:51:06.586 16722-16933/kim.hsl.oboe W/AudioTrack: See the documentation of AudioTrack() for what to use instead with android.media.AudioAttributes to qualify your playback use case
2021-05-05 13:51:06.588 16722-16933/kim.hsl.oboe I/th_note_stage_: The app match pkg failed
2021-05-05 13:51:06.588 16722-16933/kim.hsl.oboe I/ELEVOC_NS_FRONT: cycle start task... 0x7319b81b00

没有报错的 Oboe 播放器日志信息 :

代码语言:javascript复制
2021-05-05 13:52:58.923 17109-17348/kim.hsl.oboe I/ELEVOC_NS_FRONT: cycle task init 0x7319c52100
2021-05-05 13:52:58.954 17109-17348/kim.hsl.oboe W/AudioTrack: Use of stream types is deprecated for operations other than volume control
2021-05-05 13:52:58.955 17109-17348/kim.hsl.oboe W/AudioTrack: See the documentation of AudioTrack() for what to use instead with android.media.AudioAttributes to qualify your playback use case
2021-05-05 13:52:58.956 17109-17348/kim.hsl.oboe I/th_note_stage_: The app match pkg failed
2021-05-05 13:52:58.956 17109-17348/kim.hsl.oboe I/ELEVOC_NS_FRONT: cycle start task... 0x7319c52100

二、解决方案


参考 【Android 高性能音频】Oboe 播放器开发 ( 为 OpenSL ES 配置参数以获得最佳延迟 | Oboe 音频流 | Oboe 音频设备 ) 博客 , Oboe 音频流需要设置相关参数 ;

在 Android 9 , 10 系统中 , 即使设置了音频流的模式为独占模式 , 也能启动两个 Oboe 播放器 ;

代码语言:javascript复制
    // 1. 音频流构建器
    oboe::AudioStreamBuilder builder = oboe::AudioStreamBuilder();
    // 设置音频流方向
    builder.setDirection(oboe::Direction::Output);
    // 设置性能优先级
    builder.setPerformanceMode(oboe::PerformanceMode::LowLatency);
    // 设置共享模式 , 独占
    builder.setSharingMode(oboe::SharingMode::Exclusive);
    // 设置音频采样格式
    builder.setFormat(oboe::AudioFormat::Float);
    // 设置声道数 , 单声道/立体声
    builder.setChannelCount(oboe::ChannelCount::Stereo);
    // 设置采样率
    builder.setSampleRate(48000);
    // 设置回调对象 , 注意要设置 AudioStreamCallback * 指针类型
    builder.setCallback(&myCallback);

但是 Android 系统升级到 Android 11 之后 , Oboe 播放器要求更加严格 , 如果设置独占模式 , 则只能有一个音频流能访问扬声器设备 , 如果使用两个 Oboe 音频流访问扬声器 , 则需要设置 共享模式 oboe::SharingMode::Shared ;

代码语言:javascript复制
    // 设置共享模式 , 共享
    builder.setSharingMode(oboe::SharingMode::Shared);

0 人点赞