[英]How to use Oboe (the C++ library for low latency audio for Android) to receive the byte[] buffer from DatagramPacket?
我想在 2 个 Android 设备之间通过 WiFi 进行音频直播。
为了减少音频延迟,应用双簧管 C++ 库似乎是一个正确的方向。
我目前的结构是使用DatagramPacket来传输和接收音频数据。 保存传入数据报的缓冲区的数据类型是 byte[]。 根据我的研究,我需要将byte[]缓冲区中的数据通过JNI(Java Native Interface)传递,然后将数据读入非阻塞队列? (例如: https://github.com/google/oboe/blob/master/samples/RhythmGame/src/main/cpp/utils/LockFreeQueue.h )
如果我理解正确,C++ 中没有 byte[] 数据类型,所以我必须将 byte[](JNI 中的 jbyteArray)转换为数据类型(例如:int16_t)?
但是,我不太确定如何实现这样的转换? 还是我的方向错了?
任何建议或示例代码将不胜感激!
非常感谢!
我建议您考虑使用直接ByteBuffer
池。 这些对象包装了一大块本机内存,可以直接从 C++ 访问。
当您从网络接收到数据包时,从池中取出一个空闲的 ByteBuffer,将数据包内容复制到其中,并将缓冲区标记为以某种方式被占用。 (通过将它添加到一个taken
队列中?)然后,将指针 + 大小添加到 C++ 可以访问的队列中。
在 Oboe onAudioReady
回调中,您可以简单地从该队列中取出元素并将其内容复制到 Oboe 的数据缓冲区中。 告诉 Java 世界消耗了多少元素,以便它可以将缓冲区回收回空闲池。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.