exoplayer 加载具有 (.mkv) 格式的大视频文件有点慢

exoplayer load little bit slow with the big video files that have (.mkv) format

我们在我的一个视频播放器应用程序中集成了 exoplayer 来播放本地视频

EXOPLAYER 版本:2.11.0

我们观察到 MP4 可以通过前进和后退视频完美播放,但是当 尝试播放大 MKV 文件时,Exoplayer 最初在我们启动 MKV 视频时卡住了,而当前进和后退 mkv 视频时,播放器卡住了大约 10 秒,然后播放视频

我们已经通过 android studio profiler 工具进行了检查,观察到当我们播放 MKV 视频时,内存消耗增加了 1.1 GB 以上,但当我们播放 MP4 视频时,内存消耗约为 600MB

当我们转发视频后,我们得到了关注logcat

2020-07-09 18:26:05.854 13217-13217/com.videoplayer.easylife4u D/ViewRootImpl@814bf6d[PlayerActivity]: ViewPostIme pointer 0
2020-07-09 18:26:05.926 13217-13217/com.videoplayer.easylife4u D/distance =>: 76.0
2020-07-09 18:26:05.926 13217-13217/com.videoplayer.easylife4u D/seeking position  =>: newPosition=>4391    duration=>28237 percentOfDuration=>4391.0605
2020-07-09 18:26:05.928 13217-14563/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] signalFlush
2020-07-09 18:26:05.928 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] ExecutingState flushing now (codec owns 0/5 input, 3/15 output).
2020-07-09 18:26:05.928 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] Now Flushing
2020-07-09 18:26:05.930 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] FlushingState onOMXEvent(0,1,0)
2020-07-09 18:26:05.932 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] FlushingState onOMXEvent(0,1,1)
2020-07-09 18:26:05.932 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] Now Executing
2020-07-09 18:26:05.950 13217-13217/com.videoplayer.easylife4u D/distance =>: 125.0
2020-07-09 18:26:05.950 13217-13217/com.videoplayer.easylife4u D/seeking position  =>: newPosition=>5355    duration=>28237 percentOfDuration=>5355.15
2020-07-09 18:26:05.951 13217-14563/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] signalFlush
2020-07-09 18:26:05.951 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] ExecutingState flushing now (codec owns 5/5 input, 11/15 output).
2020-07-09 18:26:05.951 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] Now Flushing
2020-07-09 18:26:05.974 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] FlushingState onOMXEvent(0,1,0)
2020-07-09 18:26:05.975 13217-13217/com.videoplayer.easylife4u D/distance =>: 174.0
2020-07-09 18:26:05.975 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] FlushingState onOMXEvent(0,1,1)
2020-07-09 18:26:05.975 13217-13217/com.videoplayer.easylife4u D/seeking position  =>: newPosition=>6304    duration=>28237 percentOfDuration=>6304.176
2020-07-09 18:26:05.975 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] Now Executing
2020-07-09 18:26:05.976 13217-14563/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] signalFlush
2020-07-09 18:26:05.978 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] ExecutingState flushing now (codec owns 0/5 input, 11/15 output).
2020-07-09 18:26:05.978 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] Now Flushing
2020-07-09 18:26:05.981 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] FlushingState onOMXEvent(0,1,0)
2020-07-09 18:26:05.984 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] FlushingState onOMXEvent(0,1,1)
2020-07-09 18:26:05.984 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] Now Executing
2020-07-09 18:26:05.998 13217-13217/com.videoplayer.easylife4u D/distance =>: 290.0
2020-07-09 18:26:05.998 13217-13217/com.videoplayer.easylife4u D/seeking position  =>: newPosition=>8597    duration=>28237 percentOfDuration=>8597.168
2020-07-09 18:26:05.999 13217-14563/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] signalFlush
2020-07-09 18:26:05.999 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] ExecutingState flushing now (codec owns 5/5 input, 11/15 output).
2020-07-09 18:26:06.002 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] Now Flushing
2020-07-09 18:26:06.019 13217-13217/com.videoplayer.easylife4u D/distance =>: 337.0
2020-07-09 18:26:06.019 13217-13217/com.videoplayer.easylife4u D/seeking position  =>: newPosition=>9513    duration=>28237 percentOfDuration=>9513.098
2020-07-09 18:26:06.025 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] FlushingState onOMXEvent(0,1,0)
2020-07-09 18:26:06.031 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] FlushingState onOMXEvent(0,1,1)
2020-07-09 18:26:06.032 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] Now Executing
2020-07-09 18:26:06.033 13217-14563/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] signalFlush
2020-07-09 18:26:06.033 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] ExecutingState flushing now (codec owns 0/5 input, 11/15 output).
2020-07-09 18:26:06.034 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] Now Flushing
2020-07-09 18:26:06.034 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] FlushingState onOMXEvent(0,1,0)
2020-07-09 18:26:06.038 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] FlushingState onOMXEvent(0,1,1)
2020-07-09 18:26:06.038 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] Now Executing
2020-07-09 18:26:06.042 13217-13217/com.videoplayer.easylife4u D/distance =>: 378.0
2020-07-09 18:26:06.042 13217-13217/com.videoplayer.easylife4u D/seeking position  =>: newPosition=>10321   duration=>28237 percentOfDuration=>10321.019
2020-07-09 18:26:06.044 13217-14563/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] signalFlush
2020-07-09 18:26:06.044 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] ExecutingState flushing now (codec owns 0/5 input, 11/15 output).
2020-07-09 18:26:06.044 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] Now Flushing
2020-07-09 18:26:06.044 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] FlushingState onOMXEvent(0,1,0)
2020-07-09 18:26:06.047 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] FlushingState onOMXEvent(0,1,1)
2020-07-09 18:26:06.047 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] Now Executing
2020-07-09 18:26:06.062 13217-13217/com.videoplayer.easylife4u D/distance =>: 442.0
2020-07-09 18:26:06.062 13217-13217/com.videoplayer.easylife4u D/seeking position  =>: newPosition=>11560   duration=>28237 percentOfDuration=>11560.341
2020-07-09 18:26:06.063 13217-14563/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] signalFlush
2020-07-09 18:26:06.063 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] ExecutingState flushing now (codec owns 5/5 input, 11/15 output).
2020-07-09 18:26:06.064 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] Now Flushing
2020-07-09 18:26:06.081 13217-13217/com.videoplayer.easylife4u D/distance =>: 467.0
2020-07-09 18:26:06.081 13217-13217/com.videoplayer.easylife4u D/seeking position  =>: newPosition=>12066   duration=>28237 percentOfDuration=>12065.866
2020-07-09 18:26:06.087 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] FlushingState onOMXEvent(0,1,0)
2020-07-09 18:26:06.091 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] FlushingState onOMXEvent(0,1,1)
2020-07-09 18:26:06.091 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] Now Executing
2020-07-09 18:26:06.092 13217-14563/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] signalFlush
2020-07-09 18:26:06.094 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] ExecutingState flushing now (codec owns 0/5 input, 11/15 output).
2020-07-09 18:26:06.094 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] Now Flushing
2020-07-09 18:26:06.095 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] FlushingState onOMXEvent(0,1,0)
2020-07-09 18:26:06.103 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] FlushingState onOMXEvent(0,1,1)
2020-07-09 18:26:06.103 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] Now Executing
2020-07-09 18:26:06.109 13217-13217/com.videoplayer.easylife4u D/distance =>: 494.0
2020-07-09 18:26:06.109 13217-13217/com.videoplayer.easylife4u D/seeking position  =>: newPosition=>12596   duration=>28237 percentOfDuration=>12596.404
2020-07-09 18:26:06.109 13217-14563/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] signalFlush
2020-07-09 18:26:06.109 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] ExecutingState flushing now (codec owns 0/5 input, 11/15 output).
2020-07-09 18:26:06.110 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] Now Flushing
2020-07-09 18:26:06.110 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] FlushingState onOMXEvent(0,1,0)
2020-07-09 18:26:06.111 13217-13217/com.videoplayer.easylife4u D/ViewRootImpl@814bf6d[PlayerActivity]: ViewPostIme pointer 1
2020-07-09 18:26:06.115 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] FlushingState onOMXEvent(0,1,1)
2020-07-09 18:26:06.115 13217-14564/com.videoplayer.easylife4u I/ACodec: [OMX.Exynos.avc.dec] Now Executing
2020-07-09 18:26:06.562 13217-13230/com.videoplayer.easylife4u I/MediaMetadataRetrieverJNI: release
2020-07-09 18:26:06.825 13217-14379/com.videoplayer.easylife4u D/PlayerActivity: ekta1:1
2020-07-09 18:26:07.887 13217-14376/com.videoplayer.easylife4u V/FA: Inactivity, disconnecting from the service
2020-07-09 18:26:10.070 13217-14379/com.videoplayer.easylife4u D/PlayerActivity: ekta1:1

检查下方 URL 产生 MKV 文件问题并且 URL 是:https://drive.google.com/file/d/1c3sitERi_6fo2e_WjyI7FpVTTqsNXWYW/view?usp=sharing

实际上我在使用 exoplayer 版本 2.10.0 时遇到了同样的问题。这实际上是 exoplayer 中的一个错误,您可以获得有关相同内容的更多信息 here. A new version will fix this issue. You can find the details here