2016-02-24 38 views
0

我想爲Linux編寫一個簡單的命令行m3u8播放器。 (讓我知道如果已經有一個。)mplayer無法從golang獲取stdin流

m3u8文件中有幾個ts文件URL。 m3u8文件是從網絡動態更改的。通常,一個ts文件只有幾秒鐘。所以我需要一次又一次下載m3u8文件和ts文件。然後我使用mplayer繼續播放流。我想這是一個網絡收音機。

這裏是我做了什麼:

首先,我勞克mplayer的過程,並獲得標準輸入:

mplayer_cmd := exec.Command("sh", "-c", "mplayer -msglevel all=9 -cache 80 -") 
mplayer_writer, mplayer_err := mplayer_cmd.StdinPipe() 

然後,我得到M3U8文件和TS網址,在它和TS文件的wget的內容並寫入mplayer的stdin。我一次又一次地做這一步:

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出來。相較於從命令行運行成功,有這樣相關的錯誤訊息話題:

Cache empty, consider increasing -cache and/or -cache-min. [performance issue] 

嫌疑人的信息是 - mplayer的叉子進程時勞克。在這種情況下,stdin/stdout管道是否會破裂?

| |  \-+- 03027 hgneng mplayer -msglevel all=9 -cache 80 - 
| |   \--- 03033 hgneng mplayer -msglevel all=9 -cache 80 - 

回答

0

對不起,這是我的錯。我在某處調用了mplayer的stdout管道。但是,代碼因爲沒有輸出而掛在那裏。我用godebug發現了這個。