在Exoplayer中动态确定音频容器

时间:2015-07-29 22:26:31

标签: java android media audio-streaming exoplayer

我正在尝试使用ExtractorSampleSource来提取不同的音频文件,有些是.AAC一些.M4A和一些.MP3。有没有办法动态确定哪个提取器(AdtsExtractor,Mp4Extractor,Mp3Extractor)而不解析url字符串?我不想解析字符串,因为有一些我无法控制的文本,并且无法保证文本中不会显示“.aac”。

1 个答案:

答案 0 :(得分:1)

如果不解码整个文件,你永远不会知道。但我们可以非常自信。例如,mp4被分解为'框'如果你在文件的开头找到一个有效的盒子,它可能是一个mp4。因此,我们可以检查字节4-7(0-3是原子大小)。如果它们是一个已知的根原子类型(ftyp,mdat,最有可能,但pdin,free和skip是可能的),我们PROBABLLY有一个mp4。 ADTS和MP3都具有相同的同义词,因此您需要解析整个标题并检查无论哪个标题看起来更加理智'是你可能的格式。 (ADTS http://wiki.multimedia.cx/index.php?title=ADTS)(MP3 http://www.mp3-tech.org/programmer/frame_header.html)但请注意,这些类型的开头可能有ID3标记,因此您需要跳过该标记。