go - mplayer 无法从 golang 获取标准输入流

标签 go mplayer

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

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 url,然后获取 ts 文件的内容并将其写入 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 没有声音。与从命令行成功运行相比,有这样的相关错误消息:

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

一个可疑的信息是 - mplayer 在启动时 fork 一个子进程。在这种情况下,stdin/stdout 管道会损坏吗?

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

最佳答案

对不起,是我的错。我在某处获取 mplayer 的标准输出管道进行调试。但是,代码卡在那里,因为没有输出。我用 godebug 找到了这个。

关于go - mplayer 无法从 golang 获取标准输入流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35591888/

相关文章:

go - 使用 gob 打包递归定义的结构体

Windows 上的 JAVA IPC

ios - SWIFT:MediaPlayer - 完成按钮不执行任何操作

video - 用 30fps 的视频录制制作蓝光视频专辑?

go - 循环映射时去追加很奇怪

json - 新手Go,试图梳理如何处理JSON

go - 结构不能为零,但这是编译

go - IIS 作为 golang socket.io 的反向代理

linux - 当从 cron 启动时,mplayer 无法在线播放 .pls 文件

python - 在 PyGTK 中嵌入 MPlayer 时避免视觉瑕疵