0
ExoPlayer 2로 mp3 파일을 스트리밍하려고합니다. 그러나 초기로드가 너무 오래 걸립니다. 그러나 때로는 동일한 파일 인 1-2 초 안에 재생되기 시작하지만 때로는 10-20 초 동안 멈출 수 있습니다. 아마도 스트리밍에 잘못된 초기화가 수행되고 있습니까?Android : ExoPlayer - 스트림 mp3
class AudioPlayer {
private static final DefaultBandwidthMeter BANDWIDTH_METER = new DefaultBandwidthMeter();
private Context mContext;
private SimpleExoPlayer mPlayer;
private String extraData;
private int state;
private ExoPlayer.EventListener mEventListener;
private ExtractorsFactory extractorsFactory;
private boolean shouldAutoPlay;
private DataSource.Factory mediaDataSourceFactory;
public SimpleExoPlayer getPlayer() {
return mPlayer;
}
AudioPlayer(Context context, ExoPlayer.EventListener eventListener){
shouldAutoPlay = true;
mEventListener = eventListener;
mContext = context;
state = 0;
mediaDataSourceFactory = buildDataSourceFactory(true);
extractorsFactory = new DefaultExtractorsFactory();
initializePlayer();
}
void play(String url){
extraData = url;
state = 1;
setMediaSource(url);
}
private void setMediaSource(String audioUrl) {
MediaSource mediaSource = new ExtractorMediaSource(Uri.parse(audioUrl),
mediaDataSourceFactory, extractorsFactory, null, null);
mPlayer.prepare(mediaSource, true, true);
}
boolean isPaused() {
return state == 2;
}
void setState(int state) {
this.state = state;
}
void pause() {
state = 2;
mPlayer.setPlayWhenReady(false);
}
void play() {
state = 1;
mPlayer.setPlayWhenReady(true);
}
void release(){
mPlayer.release();
}
private void initializePlayer() {
if (mPlayer == null) {
TrackSelection.Factory videoTrackSelectionFactory =
new AdaptiveVideoTrackSelection.Factory(BANDWIDTH_METER);
DefaultTrackSelector trackSelector = new DefaultTrackSelector(videoTrackSelectionFactory);
mPlayer = ExoPlayerFactory.newSimpleInstance(mContext, trackSelector, new DefaultLoadControl(),
null);
mPlayer.addListener(mEventListener);
EventLogger eventLogger = new EventLogger(trackSelector);
mPlayer.addListener(eventLogger);
mPlayer.setAudioDebugListener(eventLogger);
mPlayer.setMetadataOutput(eventLogger);
mPlayer.setPlayWhenReady(shouldAutoPlay);
}
}
private DataSource.Factory buildDataSourceFactory(boolean useBandwidthMeter) {
return ((SEApplication) mContext.getApplicationContext())
.buildDataSourceFactory(useBandwidthMeter ? BANDWIDTH_METER : null);
}
public long getDuration() {
return mPlayer.getDuration();
}
}
나는 또한 같은 문제에 붙어있어 도움이 필요하다! –
@NavjotBedi 내 솔루션을 추가했습니다. 그냥 내 오래된 자식 repo에서 그것을 파서. 나중에 작동하는지 확인하십시오. – Sermilion