首页 > 解决方案 > 在 Exoplayer 中为 .mkv 文件禁用了搜索栏/搜索按钮

问题描述

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

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

搜索功能不适用于大.mkv文件。使用以下链接进行测试[获得解决方案后删除链接]

搜索功能不适用于大型 mkv 文件

搜索功能适用于任何.mp4文件和小.mkv文件。适用于以下链接- [获得解决方案后删除链接] 搜索功能适用于 mp4 文件

这是我的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);视频,则从头开始。

标签: androidexoplayerexoplayer2.x

解决方案


我发现Exoplayer可以很好地与视频编解码器H.264和音频编解码器AAC配合使用 (可能不限于)(来源:medium.com)。

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

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

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

  • 138M的文件变成了crf54M的大小。
  • 没有crf138M 的文件大小变成了 107M。

推荐阅读