首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将文件传给JNI在OpenSL ES AudioPlayer中播放?

如何将文件传给JNI在OpenSL ES AudioPlayer中播放?
EN

Stack Overflow用户
提问于 2014-03-29 01:00:19
回答 1查看 703关注 0票数 1

我正在尝试创建AudioPlayer的(根据Native-Audio NDK示例),但没有使用AssetManager,因为要播放的文件是动态下载的,因此没有打包为Assset。

因此,我想知道是否可以将一个FileDescriptor从Java传递到JNI,以便在下面的示例JNI代码中使用(不使用AssetManager):

代码语言:javascript
复制
// 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)。

下面的构造函数:

代码语言:javascript
复制
/** 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;

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2014-09-26 01:32:59

不确定这是否准确地回答了问题,但这是我找到的一小段代码,用于从SD卡读取文件。如果你正在将文件下载到外部存储器,这对你来说应该是有效的:

代码语言:javascript
复制
SLchar path[] = "/sdcard/audio/my_audio.mp3" ;
SLDataLocator_URI loc_uri = {SL_DATALOCATOR_URI, path};
SLDataFormat_MIME format_mime = {SL_DATAFORMAT_MIME, NULL,
        SL_CONTAINERTYPE_UNSPECIFIED};
SLDataSource audioSrc = {&loc_uri, &format_mime};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22718954

复制
相关文章

相似问题

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