mplayer无法从golang获取stdin流

时间:2016-02-24 02:00:21

标签: go mplayer

我想为Linux编写一个简单的命令行m3u8 player。 (如果已有,请告诉我。)

m3u8文件中有几个ts文件网址。 m3u8文件是从网络动态更改的。通常,一个ts文件只有几秒钟。所以我需要一次又一次地下载m3u8文件和ts文件。然后我用mplayer继续播放流。我想这是一个网络电台。

这就是我所做的:

首先,我执行mplayer进程并获取stdin:

repo B

然后,我在其中获取m3u8文件和ts网址并输入ts文件的内容并将其写入mplayer的stdin。我一次又一次地这样做:

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

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在lauch时分叉一个子进程。在这种情况下,stdin / stdout管会破裂吗?

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

1 个答案:

答案 0 :(得分:0)

对不起,这是我的错。我得到了mplayer的stdout管道用于调试。但是,代码挂起,因为没有输出。我用godebug找到了这个。