gpt4 book ai didi

mplayer - MPlayer 从模式获取当前播放文件

转载 作者:行者123 更新时间:2023-12-01 12:47:06 26 4
gpt4 key购买 nike

问题:我找不到任何方法可靠地获取 MPlayer 播放列表中的当前播放文件。

这是我已经走了多远。这个有效的 ash 脚本监视一个带有当前播放列表路径的文本文件。当我更新文件时,脚本会关闭 MPlayer 的旧实例并打开一个包含新播放列表的新实例:

# POLL PLAYLIST FILE FOR CHANGES
CURRENTPLAYLISTPATH=/home/tc/currentplaylist
INFIFO=/tmp/mplayer-in

CURRENTPLAYLIST="NEVERMATCHAPLAYLIST"
FIRSTRUN=1

while [ 1 ];
do
# CHECK FOR NEW PLAYLIST
NEWPLAYLIST=$(head -n 1 $CURRENTPLAYLISTPATH)
if [[ "$NEWPLAYLIST" != "$CURRENTPLAYLIST" ]]; then
if [ "$FIRSTRUN" == 0 ]; then
echo "quit" > "$INFIFO"
fi

# CREATE NAMED PIPE, IF NEEDED
trap "rm -f $INFIFO" EXIT
if [ ! -p $INFIFO ]; then
mkfifo $INFIFO
fi

# START MPLAYER
mplayer -fixed-vo -nolirc -vc ffmpeg12vdpau,ffh264vdpau, -playlist $NEWPLAYLIST -loop 0 -geometry 1696x954 -slave -idle -input file=$INFIFO -quiet -msglevel all=0 -identify | tee -a /home/tc/mplayer.log &

CURRENTPLAYLIST=$NEWPLAYLIST
FIRSTRUN=0
fi

sleep 5;
done

我最初的计划只是使用“-identify”标志并解析日志文件。这实际上工作得很好,直到我需要截断日志文件以防止它变得太大。一旦我的截断脚本运行,MPlayer 就会停止写入日志文件:

FILENAME=/home/tc/mplayer.log
MAXCOUNT=100
if [ -f "$FILENAME" ]; then
LINECOUNT=`wc -l "$FILENAME" | awk '{print $1}'`

if [ "$LINECOUNT" -gt "$MAXCOUNT" ]; then
REMOVECOUNT=`expr $LINECOUNT - $MAXCOUNT`
sed -i 1,"$REMOVECOUNT"d "$FILENAME"
fi
fi

我搜索了又搜索,但无法找到任何其他方法来获取当前播放的文件。

我试过将输出通过管道传输到另一个命名管道,然后对其进行监控,但只工作了几秒钟,然后 MPlayer 就完全死机了。

我也尝试过使用 bash(而不是 ash)并将输出通过管道传递给如下函数,但遇到了同样的卡住问题:

function parseOutput()
{
while read LINE
do
echo "get_file_name" > /tmp/mplayer-in
if [[ "$LINE" == *ANS_FILENAME* ]]
then
echo ${LINE##ANS_FILENAME=} > "$CURRENTFILEPATH"
fi
sleep 1
done

}

# START MPLAYER
mplayer -fixed-vo -nolirc -vc ffmpeg12vdpau,ffh264vdpau, -playlist $NEWPLAYLIST -loop 0 -geometry 1696x954 -slave -idle -input file=/tmp/mplayer-in -quiet | parseOutput &

我怀疑我在这里遗漏了一些非常明显的东西,所以任何帮助、想法和正确方向的观点都将不胜感激。

饲料

最佳答案

那好吧,那我也来发一下。

试一试(假设只有一个实例在运行,就像在 fodder 的机器上一样):

basename "$(readlink /proc/$(pidof mplayer)/fd/* | grep -v '\(/dev/\|pipe:\|socket:\)')"

这可能是更安全的方法,因为文件描述符在所有系统上的顺序可能并不总是相同。然而,这个可以被缩短,但有一点风险:

basename "$(readlink /proc/$(pidof mplayer)/fd/*)" | head -1

你可能也想安装这个: http://mplayer-tools.sourceforge.net/

关于mplayer - MPlayer 从模式获取当前播放文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14886358/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com