首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Oboe (Android低延迟音频的C++库)接收来自DatagramPacket的byte[] buffer?

如何使用Oboe (Android低延迟音频的C++库)接收来自DatagramPacket的byte[] buffer?
EN

Stack Overflow用户
提问于 2020-11-23 02:40:00
回答 1查看 211关注 0票数 2

我想在两个安卓设备之间通过WiFi进行音频直播。

为了减少音频延迟,应用Oboe C++库似乎是一个正确的方向。

我目前的结构是使用DatagramPacket来发送和接收音频数据。保存传入数据报的缓冲区的数据类型为byte[]。根据我的研究,我需要通过JNI (Java Native Interface)从byte[]缓冲区传递数据,然后将数据读取到非阻塞队列中。(例如:https://github.com/google/oboe/blob/master/samples/RhythmGame/src/main/cpp/utils/LockFreeQueue.h)

如果我理解正确,C++中没有byte[]数据类型,所以我必须将字节jbyteArray in JNI转换为数据类型(例如: int16_t)?

但是,我不是很确定如何实现这样的转换?或者甚至我走错了方向?

任何建议或示例代码将非常感谢!

非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2020-11-23 16:34:00

我建议你考虑使用一个直接的ByteBuffer池,这些对象包装了一个本机内存的blob,可以直接从C++访问。

当您收到来自网络的数据包时,从池中获取一个空闲的ByteBuffer,将数据包内容复制到其中,并将缓冲区标记为以某种方式占用。(通过将其添加到taken队列?)然后,将指针+大小添加到C++可以访问的队列。

在Oboe onAudioReady回调中,您可以简单地从该队列中取出元素,并将其内容复制到Oboe的数据缓冲区中。告诉Java世界消耗了多少元素,这样它就可以将缓冲区回收到空闲池。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64958025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档