Exoplayer:播放本地文件中的视频时,循环会创建OutOfMemoryError

当我尝试从.mp4中的本地文件(假定为ExoPlayer 2.10.6)播放视频时,我得到了OutOfMemoryError。我从firebase数据库下载了视频,然后用Exoplayer加载了视频。 fragmentExoplayer存在两次,但我在Exoplayer中释放了onPause

在这里初始化Exoplayer,在displayVideo中调用onResume,随后在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中的视频文件为

编辑:

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。没关系,如果我使用setRepeatModeLoopingMediaSource或通过添加调用exoPlayer.prepare的侦听器来循环播放视频。

唯一停止OutOfMemoryError的事情是添加一个侦听器,并在每个循环中使用releaseMediaPlayer()释放所有内容,然后重新实例化ExoplayerMediasource等上。但是,在每个循环之间都有一个黑框,因此使用CPU的方式不必要。内存消耗从180 MB急剧下降,其中发生OutOfMemory

为什么我不能按常规方式循环播放?我该怎么办才能消除黑框或优化CPU使用率?

lmy87488860 回答:Exoplayer:播放本地文件中的视频时,循环会创建OutOfMemoryError

好的,这是它创建OutOfMemoryError的原因:

如果是循环播放模式,则Exoplayer最好缓冲一定长度的视频。如果此缓冲区长度(以秒为单位)大于视频长度,则exoplayer会使用大量内存将视频多次缓冲。 如果exoplayer想要缓冲10秒,而视频对象的长度为3sec,则exoplayer将缓冲整个视频> 3次。

有一种方法可以修改exoplayer的设置,因此您可以设置应该缓冲多少秒。我减少了秒数,不再使用OOME。

本文链接:https://www.f2er.com/3155792.html

大家都在问