mplayer fail to get stdin stream from golang
<p>I want to write a simple command line m3u8 player for Linux. (Let me know if there already one.)</p>

<p>There are several ts file urls in m3u8 file. m3u8 file is dynamically changed from network. Usually, one ts file has only a few seconds. So I need to download m3u8 file and ts files in it again and again. Then I use mplayer to play the stream continuesly. I suppose this is a network radio.</p>

<p>Here is what I have done:</p>

<p>First, I lauch mplayer process and get the stdin:</p>

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

<p>Then, I get m3u8 file and ts urls in it and wget content of ts file and write it to stdin of mplayer. And I do this step again and again:</p>

<pre><code>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)
</code></pre>

<p>No sound come out from mplayer. Comparing to a successful running from command line, there is such related error messsage:</p>

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

<p>A suspect info is that - mplayer fork a child process when lauch. Will stdin/stdout pipe broken in this situation?</p>

<pre><code> | |       \-+- 03027 hgneng mplayer -msglevel all=9 -cache 80 -
 | |         \--- 03033 hgneng mplayer -msglevel all=9 -cache 80 -
</code></pre>