gpt4 book ai didi

android - Exoplayer : Loop creates OutOfMemoryError when playing video from local file

转载 作者:行者123 更新时间:2023-12-03 19:23:05 36 4
gpt4 key购买 nike

当我尝试从 .mp4 中的本地文件(我假设它是 ExoPlayer 2.10.6 )播放视频时,我得到一个 OutOfMemoryError .我从 firebase 下载视频DB 然后用 Exoplayer 加载它. fragmentExoplayer存在两次,但我释放了 ExoplayeronPause .

在这里我初始化 Exoplayer , displayVideoonResume 中调用之后 fragment在跑:

private void displayVideo() {       
releaseMediaPlayer();
exoPlayer = ExoPlayerFactory.newSimpleInstance(getContext());
mMediaPlayerView.setPlayer(exoPlayer);
DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(getContext(), com.google.android.exoplayer2.util.Util.getUserAgent(getContext(), getContext().getString(R.string.app_name)));
MediaSource videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(Uri.fromFile(new File(getContext().getExternalFilesDir(null), profilePicVideoName)));
exoPlayer.prepare(videoSource);
exoPlayer.setPlayWhenReady(true);
exoPlayer.setRepeatMode(Player.REPEAT_MODE_ONE);
mMediaPlayerView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_ZOOM);
}

我在这里发布 Exoplayer :
@Override
public void onPause() {
super.onPause();
releaseMediaPlayer();
}

@Override
public void onDestroy() {
super.onDestroy();
releaseMediaPlayer();
}

private void releaseMediaPlayer() {
if (exoPlayer != null) {
exoPlayer.release();
exoPlayer = null;
}
mMediaPlayerView.setPlayer(null);
}
firebase 中的视频文件< 1MB。

编辑:
new File(getContext().getExternalFilesDir(null), Helper.profilePicVideoName).length() = 629440

错误消息 非常没用:
E/art: Throwing OutOfMemoryError "Failed to allocate a 65548 byte allocation with 10220 free bytes and 9KB until OOM"
E/LoadTask: OutOfMemory error loading stream
java.lang.OutOfMemoryError: Failed to allocate a 65548 byte allocation with 19092 free bytes and 18KB until OOM

编辑 2:

好的,没有视频循环,没有 OutOfMemoryError被抛出。没关系,如果我用 setRepeatMode 循环播放视频, 带有 LoopingMediaSource或者通过添加一个调用 exoPlayer.prepare 的监听器.

唯一能阻止 OutOfMemoryError正在添加一个监听器,并在每个循环中使用 releaseMediaPlayer() 释放所有内容然后重新实例化 Exoplayer , Mediasource等等。但是每个循环之间都有一个黑框,并且 CPU 的使用方式超出了必要的范围。内存消耗从 180 MB 急剧下降,其中 OutOfMemory发生 < 100 MB。

为什么我不能以常规方式循环?我该怎么做才能摆脱黑框或优化 CPU 使用率?

最佳答案

好的,这就是它创建 OutOfMemoryError 的原因:
如果在循环模式下,Exoplayer 有一个很棒的想法来缓冲一定长度的视频。如果此缓冲区长度(以秒为单位)比视频长度长,则 exoplayer 只是多次缓冲视频,使用大量内存。
如果 exoplayer 想要缓冲 10sec 而视频是 3sec 时长,exoplayer 将缓冲完整视频 > 3 次。
有一种方法可以修改 exoplayer 的设置,因此您可以设置应该缓冲多少秒。我减少了秒数并停止了 OOME。

关于android - Exoplayer : Loop creates OutOfMemoryError when playing video from local file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58721016/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com