Vlc检查流状态

时间:2015-07-30 08:45:54

标签: linux bash stream vlc

我正在使用VLC来重播一个流,事情的这一方面运作良好。几个小时后,我需要重新验证并重新请求流。 我有一个只需要运行的脚本,这将处理重新身份验证和启动vlc。 我遇到的问题是如何判断流是否不再有效。

使用时说:

pidof vlc

我得到了流程VLC的pid。检查顶部时,我可以看到VLC正在运行并消耗cpu。但是,当我尝试播放流时没有任何反应。如果我再次运行我的脚本,流重新启动,然后我可以再次观看它。 因此,即使流已停止,VLC也会继续运行,不会指示流本身是否正在运行或只是VLC。

到目前为止,我唯一发现的是,当流未运行时,根据top,CPU使用量似乎达到峰值。

当流正在运行时,cpu使用率大约是1%标记,当它没有运行时,它似乎超过40%。我已经观察了几次,但我只能假设这可能是我可以确保流运行的一种方式,但我对这种方法并不是100%有信心。

有没有人知道如何确认实际流是否正在运行或者是否只是VLC流程?

2 个答案:

答案 0 :(得分:1)

易。使用VLM接口。

  

vlc -I telnet --vlm-conf vlm.conf

调整命令行以将sout放在vlm.conf中,如下例所示:

new channel1 broadcast enabled
setup channel1 input http://host.mydomain/movie.mpeg
setup channel1 output #std{access=udp,mux=ts,dst=239.192.174.105:1234}

control channel1 play

然后,您可以登录到telnet界面并输入show以查看当前广播及其状态。

> show
show
media : ( 1 broadcast - 0 vod )
channel1
        type : broadcast
        enabled : yes
        loop : yes
        inputs
            1 : http://host.mydomain/movie.mpeg
        output : #std{access=udp,mux=ts,dst=239.192.174.105:1234}
        options
        instances
            instance
                name : default
                state : playing
                position : 0.058974
                time : 6473336
                length : 109766611
                rate : 1.000000
                title : 0
                chapter : 0
                can-seek : 1
                playlistindex : 1

您可以在此处阅读更多内容https://wiki.videolan.org/Documentation:Streaming_HowTo/VLM/

PS:我会增加log -v(vv),也许可以使用syslog来保存它并跟踪之后的任何问题。

答案 1 :(得分:1)

应该给@mundu

提供学分

这是我创建的用于检查vlc是否正在流式传输的脚本。

// vlc_verify1.sh
#!/bin/bash

VLC_CONF="$1"
VLC_COMMAND="$2"
VLC_PASS="videolan"

echo "" > nohup.out

nohup vlc --intf telnet --vlm-conf $VLC_CONF --telnet-password $VLC_PASS &
vlc_pid=$!
echo "vlc has a pid of $vlc_pid"

sleep 5

echo  "nc start"
nc localhost 4212 < $VLC_COMMAND

kill $vlc_pid
exit 0

// vlm-conf, you have to replace $url with the actual url
new channel1 broadcast enabled
setup channel1 input $url
control channel1 play
show

// command.txt
videolan
show

vlc_verify1.sh将输出@mundu提到的当前播放状态。我做的是grep输出,看看它的状态是“正在播放”。

注意,我没有像setup channel1 output #std{access=udp,mux=ts,dst=239.192.174.105:1234}那样指定输出。

原因是有时候vlc会使用100%的cpu时间。我不知道为什么会这样。但如果我摆脱它,我没有遇到类似的问题。这样做的缺点是会有一个弹出窗口播放流。但我不认为这是一个大问题。