mur*_*rkr 7 android out-of-memory firebase exoplayer2.x
当我尝试播放 中的本地文件(我假设是.mp4)中的视频时ExoPlayer 2.10.6,我得到一个OutOfMemoryError. 我从数据库下载视频firebase,然后使用Exoplayer. 和fragment存在Exoplayer两次,但我释放了Exoplayerin onPause。
在这里,我初始化Exoplayer,并在运行时displayVideo调用:onResumefragment
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);
}
Run Code Online (Sandbox Code Playgroud)
我在这里发布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);
}
Run Code Online (Sandbox Code Playgroud)
视频文件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
Run Code Online (Sandbox Code Playgroud)
编辑2:
好的,如果没有视频循环,则不会OutOfMemoryError抛出任何异常。setRepeatMode如果我使用 、LoopingMediaSource或 通过添加调用 的监听器循环播放视频,这并不重要exoPlayer.prepare。
唯一停止的OutOfMemoryError是添加一个侦听器,并在每个循环中释放所有内容releaseMediaPlayer(),然后重新实例化Exoplayer,Mediasource等等。但是每个循环之间都会出现黑框,并且 CPU 的使用量超出了必要的范围。内存消耗从 180 MB 急剧下降OutOfMemory到 < 100 MB。
为什么我不能按常规方式循环?我该如何消除黑框或优化 CPU 使用率?
好的,这就是它创建 OutOfMemoryError 的原因:
Exoplayer 有一个好主意,可以在循环模式下缓冲一定长度的视频。如果此缓冲长度(以秒为单位)比视频长度长,则 exoplayer 只会多次缓冲视频,从而使用大量内存。如果 exoplayer 想要缓冲 10 秒并且视频长度为 3 秒,则 exoplayer 将缓冲整个视频 > 3 次。
有一种方法可以修改 exoplayer 的设置,这样您就可以设置应该缓冲多少秒。我减少了秒数并停止了 OOME。
| 归档时间: |
|
| 查看次数: |
4081 次 |
| 最近记录: |