2016-02-24 4 views
0

Я хочу написать простую командную строку 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 - 

ответ

0

Извините, это моя вина. Я получаю трубку stdout mplayer где-то для отладки. Однако код там висит, потому что нет выхода. Я нашел это с godebug.