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