gpt4 book ai didi

android - mediaplayer seekTo() 以字节为单位的偏移量

转载 作者:行者123 更新时间:2023-11-30 03:41:49 27 4
gpt4 key购买 nike

我正在寻找 MediaPlayer 类的 seekto() 方法使用的字节偏移量。

我想知道是否有办法以某种方式直接检索此信息,如果没有,是否可以自行计算,例如:如果媒体文件在其元数据中注册了比特率,并且我想寻找 10 秒,我可以使用以下计算:

10(secs)*(bit rate per second)/8

我可以假设 MediaPlayer 使用 MediaMetadataRetriever 类检索比特率信息吗?

我已阅读以下内容: Accuracy of MediaPlayer.seekTo(int msecs)我知道可变比特率的问题,但我不是在寻找 seekto() 方法的准确性,而是如何获取/计算它用于偏移量的值以检索新的数据。

最佳答案

您基于偏移量实现 seekTo() 的目标很新颖,但也面临着多重挑战。在进入 seekTo() 实现之前,先澄清一下 MediaPlayerMediaMetadataRetriever。这两个类都在内部使用了一个 MediaExtractor 对象来检索 metadata 信息。因此 MediaPlayer 包含 MediaMetadataRetriever 类。

首先,让我们考虑提取比特率。 MediaPlayer 是一个通用实现,应该支持多种文件格式。因此,对于您的设计,您需要确保系统支持的所有文件格式都提取了 bitrate 参数,例如 MP4MPEG 等视听格式-2 TS, AVI, Matroska 等或WAV, MP3 等音频格式。在最新的 android 实现中,我发现只有 MP3Extractor 通过 kKeyBitrate 键公开比特率。

接下来,关于您的算法,我发现以下挑战与基于大小的搜索有关。

  1. audiovideo 轨道以交错方式存储。因此,由于输入数据的交错性质,时间 * 比特率(以字节为单位) 不会直接提供帮助。

  2. 需要考虑起始偏移量。在文件中,有一些metadataboxes 存储在文件的开头,这是特定于文件格式的。您还必须考虑这个偏移量,它对于不同的格式是不同的。

  3. 如果您的输入有更多的音轨,例如audiovideotext 或者多个audio 就像在电影中一样,那么问题会变得更加复杂。

  4. 视频帧的大小通常不规则。尽管采用了恒定比特率模型,但视频帧大小可能会根据帧类型而有很大差异。通常,与 P 帧B 帧 相比,H.264 中的 I 帧/IDR 帧 可以消耗大量比特>。这会给基于大小的 seekTo() 实现带来实际困难。人们可以很容易地观察到 I 帧和 P 帧的帧大小的 1:5 比例

  5. 可变比特率模型 有一定的影响,您已经承认这一点。因此,我跳过了这一点。

鉴于上述几点,不气馁,我觉得基于 size 的实现看起来很困难。

关于android - mediaplayer seekTo() 以字节为单位的偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15591350/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com