前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【错误记录】Oboe / AAudio 播放器报错 ( onEventFromServer - AAUDIO_SERVICE_EVENT_DISCONNECTED - FIFO cleared )

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

作者头像
韩曙亮
发布2023-03-29 12:02:29
4870
发布2023-03-29 12:02:29
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

在 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);
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 一、报错信息
  • 二、解决方案
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档