私はラズベリーパイからテレビを作ろうとしています.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] でそれを呼び出します。
私の質問は: 安全ですか? 再帰はCPUを殺してしまうのではないですか? setTimeOut の使用については考えましたが、ビデオの長さを取得する方法が見つかりませんでした。
ループで再生を呼び出してみましたが、プレイリスト全体を同時に再生することに成功しました。
私は完全な解決策を求めるのではなく、それを適切に行う方法を見つけることができる場所を示唆するだけです javascriptが非同期であっても、再生が終了するのを待ってから再度呼び出す方法はありますか?
編集: すべてのファイルは MPEG4 です。プレイリストは、再生するビデオ ファイルのパス名を含む単なる文字列の配列です。インターネットなしで再生することになっているため、ブラウザがなく、html リクエストを使用してビデオのメタデータを取得して長さを取得することはできません。
EDIT2: play.sh は、他にインスタンスがない場合はプレーヤーを開始するだけであることを忘れていました。これは、execFile のコールバックについて知らなかった以前のバージョンのままです。