Я хочу написать простую командную строку m3u8 для Linux. (Дайте мне знать, если там уже один.)mplayer не может получить поток stdin из golang
В файле m3u8 имеется несколько URL-адресов ts-файлов. Файл m3u8 динамически изменяется из сети. Обычно один файл имеет всего несколько секунд. Поэтому мне нужно снова и снова загружать файлы m3u8 и ts. Затем я использую mplayer для непрерывного воспроизведения потока. Полагаю, это сетевое радио.
Вот что я сделал:
Во-первых, я Lauch процесс mplayer'а и получить стандартный ввод:
mplayer_cmd := exec.Command("sh", "-c", "mplayer -msglevel all=9 -cache 80 -")
mplayer_writer, mplayer_err := mplayer_cmd.StdinPipe()
Затем я получаю m3u8 файлов и тс URLs в нем и Wget содержание TS файла и записать его в stdin mplayer. И я делаю этот шаг снова и снова:
out, err = exec.Command("sh", "-c", "wget " + m3u8_url + " -qO - | grep '.ts'").Output()
...
out, err = exec.Command("sh", "-c", "wget " + ts_url + " -qO -").Output()
...
n, err = mplayer_writer.Write(out)
fmt.Println("wrote ", n)
Звук не вышел из mplayer. По сравнению с успешной работы от командной строки, есть такая связанная messsage ошибка:
Cache empty, consider increasing -cache and/or -cache-min. [performance issue]
Подозреваемый информация является то, что - MPlayer вилка дочернего процесса, когда Lauch. Будет ли труба stdin/stdout нарушена в этой ситуации?
| | \-+- 03027 hgneng mplayer -msglevel all=9 -cache 80 -
| | \--- 03033 hgneng mplayer -msglevel all=9 -cache 80 -