Seekbar/Seek Exoplayer 中的按钮在 .mkv 文件中被禁用

Seekbar/Seek Buttons are disabled in Exoplayer for .mkv files

在 Android 应用程序中,我正在尝试使用 Exoplayer 播放来自 URL 的视频。对于 .mp4 个文件,它可以正常播放,包括搜索功能。但是当我尝试播放 .mkv 视频时,它会播放但搜索栏(时间栏)看起来像进度条(不支持用户搜索)。搜索按钮也不会被激活,点击时没有任何反应。 测试了 50 多个视频。它们的文件大小在 20mb 到 150mb 之间。

另一个令人困惑的观察结果是,一切都适用于另一个 .mkv 时长为 13 秒且大小小于 1mb 的视频。

搜索功能不适用于大型 .mkv 文件。测试了以下 link [Link 在得到解决方案后删除]

搜索功能适用于任何 .mp4 文件和小型 .mkv 文件。适用于以下 link- [Link得到解决后删除]

这是我在 android 方面的代码-

依赖-

implementation 'com.google.android.exoplayer:exoplayer:2.10.5'

VideoPlayerActivity.java

DefaultHttpDataSourceFactory dataSourceFactory = new DefaultHttpDataSourceFactory(Util.getUserAgent(this, getString(R.string.app_name)));
Map<String, String> headers = new HashMap<>();
headers.put("accept", "application/json");
headers.put(..., ...);
dataSourceFactory.getDefaultRequestProperties().set(headers);

//Also tested with
//DataSource.Factory dataSourceFactory = new DefaultHttpDataSourceFactory(Util.getUserAgent(this, getString(R.string.app_name)));


MediaSource videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory)
        .createMediaSource(mUri);

player.prepare(videoSource);
player.setPlayWhenReady(true);
player.addListener(this);

也试过申请-

DefaultExtractorsFactory extractorsFactory = new DefaultExtractorsFactory();
extractorsFactory.setConstantBitrateSeekingEnabled(true);

MediaSource videoSource = new ExtractorMediaSource.Factory(dataSourceFactory)
            .setExtractorsFactory(extractorsFactory)
            .createMediaSource(mUri);

是否有任何选项可以启用搜索大型 .mkv 视频文件?任何其他图书馆也将不胜感激。

更新

如果我尝试以编程方式寻找 player.seekTo(15000); 视频会重新开始。

我发现 Exoplayer works fine with videos codec H.264 and audio codec AAC (May not be limited to) (Source: medium.com).

我使用 ffmpeg 和下面的命令转换了我的视频,现在持续时间长的 mkv 文件对我来说工作正常。

ffmpeg -i input.mkv -vcodec libx264 -acodec aac -crf 28 output.mkv

-crf 28 用于减小文件大小,同时保持质量几乎相同。 就我而言-

  • crf 138M 的文件大小变成了 54M。
  • 没有crf 138M 的文件大小变成了107M。