错误记录Oboe / AAudio 播放器报错 ( onEventFromServer - AAUDIO_SERVICE_EVENT_DISCONNECTED - FIFO cleared )(代码片

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了错误记录Oboe / AAudio 播放器报错 ( onEventFromServer - AAUDIO_SERVICE_EVENT_DISCONNECTED - FIFO cleared )(代码片相关的知识,希望对你有一定的参考价值。



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

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

本博客中涉及的 Android 系统版本是 9 9 9 , 10 10 10 , 11 11 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 播放器关闭 ;

对应的播放器报错如下 :

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 播放器日志信息 :

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 播放器 ;

    // 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 ;

    // 设置共享模式 , 共享
    builder.setSharingMode(oboe::SharingMode::Shared);

以上是关于错误记录Oboe / AAudio 播放器报错 ( onEventFromServer - AAUDIO_SERVICE_EVENT_DISCONNECTED - FIFO cleared )(代码片的主要内容,如果未能解决你的问题,请参考以下文章

Android native音频:录制播放的实现以及低延迟音频方案

Android native音频:录制播放的实现以及低延迟音频方案

如何正确播放已解码的内存PCM与Oboe?

Android 高性能音频Oboe 音频流打开后 耳机 / 音箱 插拔事件处理 ( 动态注册广播接收者监听耳机插拔事件 | 重新打开 Oboe 音频流 )

Android Audio简述

Oboe.js、Promises 和 Jest