我希望获得MediaPlayer类的MediaPlayer方法所使用的以字节为单位的偏移量。
我想知道是否有任何方法可以直接检索这些信息,如果没有,是否可以自己计算,例如:如果媒体文件的元数据中有一个已注册的比特率,并且我想在10秒内查找,我可以使用以下计算:
10(secs)*(bit rate per second)/8我是否可以假设MediaPlayer使用MediaMetadataRetriever类检索比特率信息?
我读过以下文章:Accuracy of MediaPlayer.seekTo(int msecs)和我都知道可变比特率的问题,但我并不是在寻找seekto()方法的准确性,而是想要如何获得/计算它用于偏移量检索新数据的值。
发布于 2013-03-24 00:52:27
您基于偏移量实现seekTo()的目标是新颖的,但同时也存在多个挑战。在进入seekTo()实现之前,先对MediaPlayer和MediaMetadataRetriever做一些澄清。这两个类都在内部使用一个MediaExtractor对象来检索metadata信息。因此,MediaPlayer不包括MediaMetadataRetriever类。
首先,让我们考虑提取比特率。MediaPlayer是一个应该支持多种文件格式的通用实现。因此,在您的设计中,您需要确保系统支持的所有文件格式都提取bitrate参数,比如MP4、MPEG-2 TS、AVI、Matroska等音频格式,或者只有WAV、MP3等音频格式。在最新的android实现中,我发现只有MP3Extractor通过kKeyBitrate键公开了比特率。
接下来,进入您的算法,我发现下面的挑战附加到一个基于大小的搜索。
audio和video曲目是以交错的方式存储的。因此,由于输入数据的交错性质,time * bitrate (in bytes)将不会有直接帮助。metadata或boxes存储在文件的开头,这是特定于文件格式的。您将不得不考虑这种偏移,这将是不同的格式不同。audio、video、text,或者更确切地说是电影中的多首audio曲目,那么问题就会变得更加复杂。I-frame / IDR-Frame in H.264或B-frame相比,P-frame可以消耗大量的位。这将给基于尺寸的seekTo()实现带来实际困难。人们可以很容易地观察到I和P帧的1:5比率。有了上述几点,在不让您气馁的情况下,我觉得基于size的实现似乎很困难。
https://stackoverflow.com/questions/15591350
复制相似问题