我想使用mplayer通过命名管道播放文件流。
从here我读到 MPlayer可以从stdin(非命名管道)读取。
命名管道仍可以这种方式用于bash脚本:
mkfifo pipe
cat pipe | mplayer -cache 1024 -cache-min 10 -really-quiet - &
cat test.wav > pipe
这个问题是,在mplayer收到EOF后,它会退出,我不能传递多个文件,而我希望mplayer继续通过管道播放文件。问题在某种程度上类似于this,以下脚本旨在保持管道的打开,受到启发:
mkfifo pipe
cat pipe | mplayer -cache 1024 -cache-min 10 -really-quiet - &
exec 3>pipe
cat test1.wav >&3
cat test2.wav >&3
..
exec 3>&- # close the pipe
管子确实打开了;然而,现在尽管mplayer的缓存已经填满,除非我关闭管道,否则我不会播放,在这种情况下它只播放第一个文件。我试图在文件后发送一个EOF信号:
mkfifo pipe
cat pipe | mplayer -cache 1024 -cache-min 10 -really-quiet - &
exec 3>pipe
cat test1.wav >&3
echo >&3
..
exec 3>&- # close the pipe
但仍然没有运气。
有关如何将mplayer用作命名管道中的流播放器的任何建议吗?
答案 0 :(得分:0)
您是否检查了此one?在您的情况下,您应该封装所有cat
命令:
mkfifo pipe
cat pipe | mplayer -cache 1024 -cache-min 10 -really-quiet - &
exec 3>pipe
(cat test1.wav test2.wav ) >&3
3>&- # close the pipe
这样,当命令符合右括号时,也发送一个EOF ...
老实说,我不确定这是答案,但评论太长了......:)
如果这样可行,主要缺点是内存使用......