我目前正在开发一个 java 项目,该项目使用 vlc 套接字远程控制接口(interface)来播放视听内容(例如 vlc -I rc --rc-host=localhost:[portnumber]
)。该接口(interface)导致一些看起来处理起来很复杂的特殊情况:
根据vlc远程控制帮助,暂停命令是一个切换功能,因此您可以 必须跟踪玩家的当前状态。
仅当当前视频未暂停时,
add
命令才会启动视频。无论是否暂停,
is_playing
命令始终输出 1,并且status
命令没有说明它是否已暂停。
客户端的一个限制是视频需要在最后一帧暂停。幸运的是,有一个参数可以处理它:--play-and-pause
。
问题如下。如果 vlc 到达最后一帧并自行暂停视频,我怎么知道呢?目前,我使用 get_time
希望在倒计时等于 0 时简单地考虑视频暂停。但是,vlc 在 0:01 处暂停视频本身,迫使我也将 0:01 视为结束值。当用户在最后一帧之前确实还剩下一秒时开始另一个视频时,这会导致出现故障,因为 0:01 检查将其视为已暂停,而实际上并未暂停。以下是所发生情况的摘要:
0:20(未暂停)+ 播放按钮: send("添加[文件路径]");
很好
0:00(暂停)+ 播放按钮: 发送(“暂停”); send("添加[文件路径]");
很好
0:01(暂停)+ 播放按钮: 发送(“暂停”); send("添加[文件路径]");
很好
0:01(未暂停)+ 播放按钮: 发送(“暂停”); send("添加[文件路径]");
意外行为:它不会播放,因为它已暂停,而我们不知道
是否有一种安全的方法来处理玩家状态,以便不存在未定义的行为?我注意到,当 vlc 自行暂停时,远程控制台有时会输出一些内容。但是,这似乎不安全,因为它可能会输出一些在此事件之前或之后触发的事件。
谢谢。
最佳答案
倒计时器的粒度是多少?您能否对剩余时间进行两次采样,间隔等于支持的最小时间单位?例如,如果是秒,则检查时间,等待一秒钟,然后再次检查。如果时间改变了,则仍在播放,如果没有改变,则暂停。唯一的缺点是,它会给应用程序的响应带来一秒的延迟。
关于java - 获取VLC远程控制界面播放器状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8649756/