首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从多个音频文件包中提取MediaExtractor

从多个音频文件包中提取MediaExtractor
EN

Stack Overflow用户
提问于 2020-08-19 00:03:38
回答 1查看 220关注 0票数 0

我试图使用MediaExtractor和MediaCodec将AAC (m4a)打包在一个文件中。

文件结构是这样的.

报头

track1.m4a

track2.m4a

等等。

其中的头包含偏移量和长度的音频文件包装在它下面。

然后,我尝试为这些单独的文件创建MediaExtractors,如下所示:

代码语言:javascript
复制
AssetFileDescriptor afd = context.getAssets().openFd(bundleFile);

long startOffset = clip.byteOffset;
long length = clip.assetLength;


Log.i(TAG, "open: Loading from bundle startOffset: " + startOffset + " length: " + length);

extractor = new MediaExtractor();

extractor.setDataSource(afd.getFileDescriptor(), startOffset, length);
extractor.selectTrack(0);
extractor.seekTo(offsetUS, MediaExtractor.SEEK_TO_NEXT_SYNC);

afd.close();

MediaFormat fmt = extractor.getTrackFormat(0);
String mimeType = fmt.getString(MediaFormat.KEY_MIME);

decoder = MediaCodec.createDecoderByType(mimeType);

当我简单地从资产中加载一个m4a文件并使用afd.getStartOffset()和afd.getLength()时,这段代码可以工作,但是当我试图从中间提取出我想要的字节时,如上面所示

代码语言:javascript
复制
java.io.IOException: Failed to instantiate extractor 
      at android.media.MediaExtractor.setDataSource(Native Method)  

因此,在我看来,这似乎是不可能的。我怀疑MediaExtractor使用文件扩展名来解析头部或类似的东西,并且不知道如何将这些数据解释为m4a。

是否有另一种方法来实现这个目标:为多个aac文件提供一个单独的捆绑文件?我在想我可以用MediaCodec或者类似的东西手动给InputFileStream喂食.

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-19 08:37:19

你试过设置绝对偏移量吗?

代码语言:javascript
复制
extractor.setDataSource(afd.getFileDescriptor(), afd.getStartOffset() + startOffset, length);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63478263

复制
相关文章

相似问题

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