我正在尝试创建 AudioPlayer(根据 Native-Audio NDK 示例),但不使用 AssetManager,因为要播放的文件是动态下载的,因此不会打包为资产。
所以我想知道是否可以将 Java 中的 FileDescriptor 传递给 JNI,以便在下面的示例 JNI 代码(不使用 AssetManager)这样的情况下使用:
// open asset as file descriptor
off_t start, length;
int fd = AAsset_openFileDescriptor(asset, &start, &length);
assert(0 <= fd);
AAsset_close(asset);
// configure audio source
SLDataLocator_AndroidFD loc_fd = {SL_DATALOCATOR_ANDROIDFD, fd, start, length};
SLDataFormat_MIME format_mime = {SL_DATAFORMAT_MIME, NULL, SL_CONTAINERTYPE_UNSPECIFIED};
SLDataSource audioSrc = {&loc_fd, &format_mime}
不幸的是,在 Java 方面,FileDescriptor 是一个类,而不是 SLDataLocator_AndroidFD 使用的 int (SLuint32)。
下面的构造函数:
/** File Descriptor-based data locator definition, locatorType must be SL_DATALOCATOR_ANDROIDFD */ typedef struct SLDataLocator_AndroidFD_ {
SLuint32 locatorType;
SLint32 fd;
SLAint64 offset;
SLAint64 length; } SLDataLocator_AndroidFD;
任何帮助,将不胜感激!