使用 youtubePlayer.seekToMillis()
函数时,存在 2 秒的查找延迟。不完全是2秒,但大致如此。就像您尝试寻找 10,000 毫秒到 12,000 毫秒之间的任何位置(例如:11,000 11,500, 11,550)一样。视频将从 10,000 本身开始。如果您给出的值在 12,000 到 14,000 之间,它将达到 12,000 点..依此类推...
我们正在开发一款应用,其中 YouTube 必须从指定的准确时间开始。所以这个功能对于我们来说是非常重要的。
youtubePlayer.seekToMillis(10000);
youtubePlayer.play();
请向我们提供一些提示,说明如何使用 YouTube 播放器从精确的开始时间(如果可能的话精确到毫秒)开始播放视频。
最佳答案
这不是错误,这是可搜索压缩视频文件的标准行为。
简短且 super 简化的解释
压缩视频文件由一系列帧组成。帧有两种宏类型:全帧 (F) 和部分帧 (p*):- 全帧:包含特定时间的完整真实帧(如完整的 JPEG 图像)
- 部分帧只是与前一帧相关的一组差异,通常表示为运动向量。
原始视频序列:
F F F F F F F F F F F F F F F F F F ... (eof)
压缩视频序列:
F p p p p F p p p p F p p p p p F p p ... (eof)
像这样的压缩结构允许创建较小的文件(因为部分帧比完整帧小),但也引入了一个愚蠢的问题:不可能直接从部分帧开始播放,因为为了正确解码,您需要上升直到第一个完整帧!
This is exactly the problem you are experiencing: you are seeking to a specific time which is mapped on a partial frame, so you need to go back to the nearest full frame and start the playback from there.
在像 YouTube 这样的流媒体环境中,问题甚至更加困难,因为 header 使用快进方法等来欺骗此限制。
如上所述,这是一个非常简单的解释。您可以找到更多信息here .
关于android - YouTube Android APIeekToMillis() 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29317205/