微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决从多个音频文件包中提取MediaExtractor

我正在尝试使用MediaExtractor和MediaCodec播放打包在单个文件中的AAC(m4a)。

文件结构是这样的……

HEADER

track1.m4a

track2.m4a

等...

标题包含在其下方压缩的音频文件的偏移量和长度。

我正在尝试为这些单个文件创建MediaExtractors,如下所示:

Pack

当我只是从资产加载m4a文件并使用afd.getStartOffset()和afd.getLength()时,此代码有效,但是当我尝试如上所述从中间提取想要的字节时,我得到

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);

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

是否有另一种方法可以实现为多个aac文件使用单个捆绑文件的目标?我当时想我可以通过InputFileStream或类似的方式手动输入MediaCodec。

谢谢!

解决方法

您是否尝试过设置绝对偏移量?

extractor.setDataSource(afd.getFileDescriptor(),afd.getStartOffset() + startOffset,length);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?