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 -