Я только что наткнулся на проблему с этим не столь очевидным решением и подумал, что это может быть полезно для некоторых, если я поделюсь своими выводами.
Есть много похожих вопросов, но они не помогли мне решить мой. (разные)
У меня есть действие, которое воспроизводит видео со звуком, затем отображает изображение в течение 3 секунд, затем отображает анимированный просмотр карты в течение 10 секунд, а затем воспроизводит другое видео.
- video1 (~ 60se c)
- изображение (~ 3se c)
- анимированное отображение карты (~ 10se c)
- video2 (~ 30se c)
возникла при попытке воспроизведения аудио с момента окончания первого видео. звук воспроизводился нормально во время просмотра карты, затем остановился. Я пробовал все виды сценариев ios, но musi c всегда останавливался, когда что-то менялось, хотя некоторые комбинации работали (например, без карты и видео2 (вместо этого просто черный экран)). Я очень внимательно изучил все журналы, но не нашел ничего полезного.
Проблема в , а не в том, что медиаплеер g c 'd или каким-то образом завершен перед завершением.
private static MediaPlayer mediaplayer;
и в OnCreate:
mediaplayer = new MediaPlayer();
AudioFocusRequest.Builder mp;
mediaplayer.setAudioAttributes(
new AudioAttributes
.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build());
try {
mediaplayer.setDataSource(getApplicationContext(), Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.audio));
} catch (IOException e) {
e.printStackTrace();
Log.e("audio_management","error trying to set data source for audio");
}
try {
mediaplayer.prepare();
} catch (IOException e) {
e.printStackTrace();
Log.e("audio_management","error preparing");
}
Вот пример того, как я проигрываю видео
z.schedule(new TimerTask() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
playPart2();
}
});
}
}, PARTONELENGTH + MAPDISPLAYTIME + IMAGEDISPLAYTIME);
, и это функция playPart2 ():
public void playPart2() {
ImageView imgbg = findViewById(R.id.imageView);
ImageView agO = findViewById(R.id.agent1);
ImageView agTw = findViewById(R.id.agent2);
ImageView agTh = findViewById(R.id.agent3);
ImageView agFo = findViewById(R.id.agent4);
ImageView agFi = findViewById(R.id.agent5);
ImageView agSi = findViewById(R.id.agent6);
VideoView player = findViewById(R.id.videoView);
MapView mMap = findViewById(R.id.map);
mMap.setVisibility(View.INVISIBLE);
imgbg.setVisibility(View.INVISIBLE);
agO.setVisibility(View.INVISIBLE);
agTw.setVisibility(View.INVISIBLE);
agTh.setVisibility(View.INVISIBLE);
agFo.setVisibility(View.INVISIBLE);
agFi.setVisibility(View.INVISIBLE);
agSi.setVisibility(View.INVISIBLE);
player.setVisibility(View.VISIBLE);
Uri uri = Uri.parse("android.resource://" + getPackageName() + "/" + R.raw.part2);
player.setVideoURI(uri);
player.start();
}
Я действительно не знаю, что происходит - я прочитал всю документацию, касающуюся MediaPlayer и VideoViews. Это говорит о том, что можно выводить 2 потока аудио одновременно. Но это не работает.