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。
在 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。