android - YouTube Android APIeekToMillis() 无法正常工作

标签 android android-youtube-api

使用 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/

相关文章:

android - 如何以编程方式打开和显示手机的消息收件箱..?

java - 广告横幅不显示

android - 是否可以在 youtube 播放器 API 上播放非 youtube 视频?

android - 在 Android 应用程序中嵌入 YouTube 直播

android - 无法在 Android 中解析符号 Youtube

android - 如何在360度视频VR android应用的MediaPlayer中流式传输Youtube视频?

youtube - 如何获取 Youtube Vevo 视频的视频信息?

java - 如何知道我的 apk 何时已在 Play 商店中更新?

android - org.gradle.api.ProjectConfigurationException :A problem occurred configuring root project after updated to AndroidStudio - 3. 5.3

java - fragment -E/RecyclerView : No adapter attached; skipping layout