Я пытаюсь сделать телевизор из raspberry pi, в javascript, типа, который снова и снова проигрывает один и тот же плейлист. Воспроизведение файлов не проблема, но я застрял в асинхронной части javascript. Вот код, который меня беспокоит:
function play (file)
{
exec('home/pi/play.sh', [file], function (error, stdout, stderr){
if (PIndice != Playlist.length-1){
PIndice=PIndice+1;
}else{
PIndice=0;
}
play(Playlist[PIndice]);
});
Другая функция вызывает его с Playlist[0], когда я уверен, что в нем есть путь.
Мой вопрос: это безопасно? Разве рекурсия не убьет процессор? Я думал об использовании setTimeOut, но не нашел способа получить продолжительность видео.
Я пытался вызвать воспроизведение в цикле, но мне просто удалось воспроизвести весь плейлист за одно и то же время.
Я не прошу готового решения, просто намекаю, где я могу найти способ сделать это правильно. Есть ли способ дождаться окончания воспроизведения, прежде чем вызывать его снова, даже если javascript асинхронный?
РЕДАКТИРОВАТЬ: все файлы в формате MPEG4, список воспроизведения - это просто массив строк, который содержит путь к видеофайлу для воспроизведения. Он должен воспроизводиться без интернета, поэтому браузера нет, и я не могу использовать html-запрос, чтобы получить метаданные видео, чтобы получить его продолжительность.
EDIT2: я забыл сказать, что play.sh просто запускает проигрыватель, если нет другого его экземпляра, это просто остаток от предыдущей версии, где я не знал об обратном вызове execFile.