для создания сеанса прямой трансляции из очень плохой полосы пропускания я генерирую из нескольких сегментов потока rtmp сегмент mp4 evry 40 se c и преобразовал каждый из них в один файл mpd, поэтому у меня есть эта структура со стороны сервера
-rw-r--r-- 1 nginx nginx 322714 May 29 13:48 0_dashinit.mp4
-rw-r--r-- 1 nginx nginx 328564 May 29 13:48 0.mp4
-rw-rw-rw- 1 nginx nginx 1263 May 29 13:49 1.mpd
-rw-r--r-- 1 nginx nginx 336904 May 29 13:49 1_dashinit.mp4
-rw-r--r-- 1 nginx nginx 342958 May 29 13:48 1.mp4
-rw-rw-rw- 1 nginx nginx 1263 May 29 13:49 1.mpd
-rw-r--r-- 1 nginx nginx 337680 May 29 13:50 2_dashinit.mp4
-rw-r--r-- 1 nginx nginx 343774 May 29 13:49 2.mp4
-rw-rw-rw- 1 nginx nginx 1263 May 29 13:50 2.mpd
у меня вопрос, как читать каждую из них в exoplayer, как будто я играю в плейлист. Я пробую этот подход ниже, но после завершения первого файла mpd exoplayer не переключается на следующий mpd
int k = 0 ;
String mpdurl = "http://MY_IP_SERVER_ADRESS/dash/" + Endpoind + "/" + k + ".mpd";
initializePlayer(mpdurl )
private void initializePlayer(String url ) {
DemoPlayer.RendererBuilder DashrendererBuilder = new DashRendererBuilder(getApplicationContext(), "live", url, null);
player = new DemoPlayer(DashrendererBuilder);
player.prepare();
player.setPlayWhenReady(true);
player.addListener(new DemoPlayer.Listener() {
@Override
public void onStateChanged(boolean playWhenReady, int playbackState) {
if (playWhenReady && playbackState == STATE_READY) {
if (currentPositionTracker == null) {
registerCurrentPositionTracker();
}
ToastFromHandler("Playback is playing");
playerstate = "playing";
} else if (playWhenReady) {
if (player.getDuration() != 0 && player.getDuration() <= player.getCurrentPosition()) {
unRegisterCurrentPositionTracker();
playerstate = "hascompleted";
releasePlayer();
k++; // increment indice to switch to next mpd file when previous mpd has completed
initializePlayer(mpdurl);
} else {
//The player is not able to immediately play from its current position. This mostly happens because more data needs to be loaded.
//Create a custom load control which continuously keeps the buffer filled up based on max buffer — a technique called Drip-Feeding.
ToastFromHandler("Playback is buffering or paused automatically");
playerstate ="buffering";
}
} else {
unRegisterCurrentPositionTracker();
ToastFromHandler("Playback is paused");
playerstate ="paused";
}
}
@Override
public void onError(Exception e) {
}
@Override
public void onVideoSizeChanged(int width, int height, int unappliedRotationDegrees, float pixelWidthHeightRatio) {
}
});
}
Любая поддержка приветствуется. спасибо