Android 视频播放器加载缓慢
因此,我正在为ExoPlayer使用自定义控制器布局,如果Android 视频播放器加载缓慢,android,performance,exoplayer,Android,Performance,Exoplayer,因此,我正在为ExoPlayer使用自定义控制器布局,如果DefaultTimeBar的搜索时间为00:01,而我转到00:03,则会有3或4秒的时间 延迟。我试图播放的视频在我的SD卡中 视频大小为813kb,mp4 我需要增加缓冲区段大小还是需要自定义加载控件 玩家: 公共类VideoPlayer扩展了AppCompative活动{ PlayerView PlayerView; SimpleXoplayer SimpleXoplayer; @凌驾 创建时受保护的void(Bundle sav
DefaultTimeBar
的搜索时间为00:01,而我转到00:03,则会有3或4秒的时间
延迟。我试图播放的视频在我的SD卡中
视频大小为813kb,mp4
我需要增加缓冲区段大小还是需要自定义加载控件
玩家:
公共类VideoPlayer扩展了AppCompative活动{
PlayerView PlayerView;
SimpleXoplayer SimpleXoplayer;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u video\u player);
}
@凌驾
受保护的void onStart(){
super.onStart();
playerView=findviewbyd(R.id.exoPlayer);
File File=新文件(“sdcard/”+Environment.DIRECTORY_DOWNLOADS+“/”+“playthis.mp4”);
Uri=Uri.fromFile(文件);
uri1=Uri.parse(“文件:/”+Uri);
LoadControl LoadControl=新的DefaultLoadControl()
带宽计带宽计=新的默认带宽计();
TrackSelector TrackSelector=新的默认TrackSelector(新的AdaptiveTrackSelection.Factory(带宽计));
simpleExoPlayer=ExoPlayerFactory.newSimpleInstance(this、trackSelector、loadControl);
MediaSource=buildMediaSource(uri1);
playerView.setPlayer(simpleExoPlayer);
playerView.setKeepScreenOn(真);
simpleExoPlayer.prepare(mediaSource);
simpleExoPlayer.setplaywhenrady(true);
simpleExoPlayer.addListener(新的Player.EventListener(){
@凌驾
PlayerStateChanged上的公共无效(布尔playWhenReady,int playbackState){
if(playWhenReady&&playbackState==ExoPlayer.STATE\u READY){
}
if(playbackState==ExoPlayer.STATE_结束){
完成();
}
}
});
}
公共媒体源buildMediaSource(Uri){
返回新的extractoremiasource.Factory(新的DefaultDataSourceFactory(这个“Test3”)).createMediaSource(uri);
}
}
自定义控制器的xml:
如何修复延迟?检查以下内容:
如果您查看答案,您可以找到最小化缓冲时间的方法:
//Minimum Video you want to buffer while Playing
private int MIN_BUFFER_DURATION = 2000;
//Max Video you want to buffer during PlayBack
private int MAX_BUFFER_DURATION = 5000;
//Min Video you want to buffer before start Playing it
private int MIN_PLAYBACK_START_BUFFER = 1500;
//Min video You want to buffer when user resumes video
private int MIN_PLAYBACK_RESUME_BUFFER = 2000;
LoadControl loadControl = new DefaultLoadControl.Builder()
.setAllocator(new DefaultAllocator(true, 16))
.setBufferDurationsMs(MIN_BUFFER_DURATION,
MAX_BUFFER_DURATION,
MIN_PLAYBACK_START_BUFFER,
MIN_PLAYBACK_RESUME_BUFFER)
.setTargetBufferBytes(-1)
.setPrioritizeTimeOverSizeThresholds(true).createDefaultLoadControl();
TrackSelector trackSelector = new DefaultTrackSelector();
player = ExoPlayerFactory.newSimpleInstance(this, trackSelector, loadControl);
选中此项:
如果您查看答案,您可以找到最小化缓冲时间的方法:
//Minimum Video you want to buffer while Playing
private int MIN_BUFFER_DURATION = 2000;
//Max Video you want to buffer during PlayBack
private int MAX_BUFFER_DURATION = 5000;
//Min Video you want to buffer before start Playing it
private int MIN_PLAYBACK_START_BUFFER = 1500;
//Min video You want to buffer when user resumes video
private int MIN_PLAYBACK_RESUME_BUFFER = 2000;
LoadControl loadControl = new DefaultLoadControl.Builder()
.setAllocator(new DefaultAllocator(true, 16))
.setBufferDurationsMs(MIN_BUFFER_DURATION,
MAX_BUFFER_DURATION,
MIN_PLAYBACK_START_BUFFER,
MIN_PLAYBACK_RESUME_BUFFER)
.setTargetBufferBytes(-1)
.setPrioritizeTimeOverSizeThresholds(true).createDefaultLoadControl();
TrackSelector trackSelector = new DefaultTrackSelector();
player = ExoPlayerFactory.newSimpleInstance(this, trackSelector, loadControl);
我确实试过了,但是延迟仍然存在@纳扎里尔莫申斯基也尝试过,但拖延仍然存在@纳扎里尔莫申斯基