命令行下怎樣遠(yuǎn)程控制VLC播放

開宗明義尤误,在Headless ( i.e. without a monitor or input device)的服務(wù)器(例如诵姜,各類嵌入式「玩具板子」)上如果架起VLC進行多媒體播放氛雪,怎樣才是最方便的控制方式瞻离?

同時神郊,因為希望是可以腳本控制,所以最好是可以做到非互動式的指令放棒。

如下是簡單的步驟:

使能VLC的Remote Control接口

VLC實際上擁有靈活強大的控制方式,由于我們上來就限定了Headless己英,那么命令行顯然是先決條件间螟,VLC文檔中已經(jīng)列出了支持的幾種Remote方式:

  • rc interface
  • ncurses interface
  • telnet interface

考慮到三者中rc應(yīng)該是最強大和靈活的(ncurses需要configure,telnet更多的是互動型损肛,何況rc本身就可以支持telnet訪問)厢破,我們就focus在rc 接口上。

使能方法非常簡單治拿,調(diào)用vlc的時候摩泪,用:

cvlc -I rc --rc-fake-tty --rc-host <ip>:<port>

選項 意義
'-I rc' 啟動rc接口;
'--rc-fake-tty' 強迫將標(biāo)準(zhǔn)輸入當(dāng)做tty
'--rc-host' 選定的監(jiān)聽地址和端口

注意:如果需要局域網(wǎng)內(nèi)訪問劫谅,請?zhí)顚懕緳Cip见坑,如果只要本機訪問,用localhost就可以了

得到如下信息(忽略那些錯誤吧捏检,畢竟Headless么荞驴,很多接口對VLC來說都缺失,但是不影響使用)

cvlc -I rc --rc-fake-tty --rc-host localhost:8888
VLC media player 2.0.3 Twoflower (revision 2.0.2-93-g77aa89e)
[0x11eed70] inhibit interface error: Failed to connect to the D-Bus session daemon: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
[0x11eed70] main interface error: no suitable interface module
[0x11eed70] main interface error: no suitable interface module
[0x10858f0] main libvlc error: interface "globalhotkeys,none" initialization failed
[0x11eed70] [cli] lua interface: Listening on host "localhost:8888".

RC 接口指令

直接借助幫助文件, 可見還是非常強大的:

+----[ CLI commands ]
| add XYZ . . . . . . . . . . . . . . . . . . . . add XYZ to playlist
| enqueue XYZ . . . . . . . . . . . . . . . . . queue XYZ to playlist
| playlist . . . . . . . . . . . . . show items currently in playlist
| search [string] . . search for items in playlist (or reset search)
| sort key . . . . . . . . . . . . . . . . . . . . . sort the playlist
| sd [sd] . . . . . . . . . . . . . show services discovery or toggle
| play . . . . . . . . . . . . . . . . . . . . . . . . . . play stream
| stop . . . . . . . . . . . . . . . . . . . . . . . . . . stop stream
| next . . . . . . . . . . . . . . . . . . . . . . next playlist item
| prev . . . . . . . . . . . . . . . . . . . . previous playlist item
| goto, gotoitem . . . . . . . . . . . . . . . . . goto item at index
| repeat [on|off] . . . . . . . . . . . . . . toggle playlist repeat
| loop [on|off] . . . . . . . . . . . . . . . . toggle playlist loop
| random [on|off] . . . . . . . . . . . . . . toggle playlist random
| clear . . . . . . . . . . . . . . . . . . . . . clear the playlist
| status . . . . . . . . . . . . . . . . . . . current playlist status
| title [X] . . . . . . . . . . . . . . set/get title in current item
| title_n . . . . . . . . . . . . . . . . next title in current item
| title_p . . . . . . . . . . . . . . previous title in current item
| chapter [X] . . . . . . . . . . . . set/get chapter in current item
| chapter_n . . . . . . . . . . . . . . next chapter in current item
| chapter_p . . . . . . . . . . . . previous chapter in current item
|
| seek X . . . . . . . . . . . seek in seconds, for instance `seek 12'
| pause . . . . . . . . . . . . . . . . . . . . . . . . toggle pause
| fastforward . . . . . . . . . . . . . . . . . . set to maximum rate
| rewind . . . . . . . . . . . . . . . . . . . . . set to minimum rate
| faster . . . . . . . . . . . . . . . . . . faster playing of stream
| slower . . . . . . . . . . . . . . . . . . slower playing of stream
| normal . . . . . . . . . . . . . . . . . . normal playing of stream
| rate [playback rate] . . . . . . . . . . set playback rate to value
| frame . . . . . . . . . . . . . . . . . . . . . play frame by frame
| fullscreen, f, F [on|off] . . . . . . . . . . . . toggle fullscreen
| info . . . . . . . . . . . . . information about the current stream
| stats . . . . . . . . . . . . . . . . show statistical information
| get_time . . . . . . . . . seconds elapsed since stream's beginning
| is_playing . . . . . . . . . . . . 1 if a stream plays, 0 otherwise
| get_title . . . . . . . . . . . . . the title of the current stream
| get_length . . . . . . . . . . . . the length of the current stream
|
| volume [X] . . . . . . . . . . . . . . . . . . set/get audio volume
| volup [X] . . . . . . . . . . . . . . . raise audio volume X steps
| voldown [X] . . . . . . . . . . . . . . lower audio volume X steps
| adev [X] . . . . . . . . . . . . . . . . . . . set/get audio device
| achan [X] . . . . . . . . . . . . . . . . . set/get audio channels
| atrack [X] . . . . . . . . . . . . . . . . . . . set/get audio track
| vtrack [X] . . . . . . . . . . . . . . . . . . . set/get video track
| vratio [X] . . . . . . . . . . . . . . . set/get video aspect ratio
| vcrop, crop [X] . . . . . . . . . . . . . . . . set/get video crop
| vzoom, zoom [X] . . . . . . . . . . . . . . . . set/get video zoom
| vdeinterlace [X] . . . . . . . . . . . . . set/get video deintelace
| vdeinterlace_mode [X] . . . . . . . . set/get video deintelace mode
| snapshot . . . . . . . . . . . . . . . . . . . . take video snapshot
| strack [X] . . . . . . . . . . . . . . . . . set/get subtitles track
|
| vlm . . . . . . . . . . . . . . . . . . . . . . . . . load the VLM
| description . . . . . . . . . . . . . . . . . describe this module
| help, ? [pattern] . . . . . . . . . . . . . . . . . a help message
| longhelp [pattern] . . . . . . . . . . . . . . a longer help message
| lock . . . . . . . . . . . . . . . . . . . . lock the telnet prompt
| logout . . . . . . . . . . . . . . exit (if in a socket connection)
| quit . . . . . . . . quit VLC (or logout if in a socket connection)
| shutdown . . . . . . . . . . . . . . . . . . . . . . . shutdown VLC
+----[ end of help ]

如何訪問:

實際上贯城,在一些討論中看到熊楼,如果只是需要本機訪問,更高效的辦法是借助一個unix socket文件,從而通過socket文件來訪問能犯,簡單說就是將上面提到的-rc-host選項變成-rc-unix然后用一個文件作為輸入鲫骗;

這樣可以用類似于形如下面指令的方法來模擬socket訪問 (作者以O(shè)SX為例,應(yīng)當(dāng)是沒有問題的):

echo normal | nc -U /Users/vlc.sock

我的例子悲雳,Debian中挎峦,nc似乎是不適用,更多人推薦用socat (需要安裝)

echo “pause” | socat – UNIX-CONNECT:/Users/vlc.sock

上面可以理解成將管道化之后的ECHO字符向這個Unix的Socket發(fā)送合瓢√菇海可是在我這里死活都會遇到文件connection refused,作為菜鳥晴楔,實在無力解決顿苇,特別是看到有強者遇到類似問題交叉比較得出可能和特定版本的kernel stock存在bug有關(guān)之后,不管看不看得懂税弃,我都理直氣壯的放棄了——直接轉(zhuǎn)向了上面提到的host:port的方案纪岁。

所以:

OSX

如果是互動式,直接 nc <host> <port>则果,就可以進入這個接口界面了:

$ nc 192.168.199.105 8888
VLC media player 2.0.3 Twoflower
Command Line Interface initialized. Type `help' for help.
$ status
( new input: file:///home/user/test.mp3 )
( audio volume: 256 )
( state playing )
$ info
+----[ Stream 0 ]
|
| Bitrate: 160 kb/s
| Type: Audio
| Channels: Stereo
| Sample rate: 44100 Hz
| Codec: MPEG Audio layer 1/2/3 (mpga)
|
+----[ end of stream info ]

如果不需要互動:

參考上節(jié):

echo status | nc -w 0 <ip> <port>

-w是指示說該命令之后幔翰,立刻退出漩氨,實際上OSX下并不一定需要,只是為了和下面Linux對照一下遗增。

LINUX

大致相同叫惊,區(qū)別只是在非互動式下,

echo status | nc -q 0 <ip> <port>

兩者區(qū)別只是一個用了' wait'之意做修,另外一個是' quit'罷了霍狰,想想還挺風(fēng)趣....風(fēng)趣個妹啊,這不是折騰跨平臺用戶嗎饰及?蔗坯!

結(jié)論

至此,該問題解決燎含,不論是想在遠(yuǎn)程控制無輸入(顯示)設(shè)備上的播放宾濒,還是想用腳本對其他線程的VLC播放進行自動化的干預(yù)控制,都不成問題了瘫镇。

——怪不得有那么多人喜歡用VLC啊鼎兽,我恍然。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末铣除,一起剝皮案震驚了整個濱河市谚咬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌尚粘,老刑警劉巖择卦,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異郎嫁,居然都是意外死亡秉继,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進店門泽铛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來尚辑,“玉大人,你說我怎么就攤上這事盔腔「懿纾” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵弛随,是天一觀的道長瓢喉。 經(jīng)常有香客問我,道長舀透,這世上最難降的妖魔是什么栓票? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮愕够,結(jié)果婚禮上走贪,老公的妹妹穿的比我還像新娘佛猛。我一直安慰自己,他們只是感情好厉斟,可當(dāng)我...
    茶點故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布挚躯。 她就那樣靜靜地躺著,像睡著了一般擦秽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上漩勤,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天感挥,我揣著相機與錄音,去河邊找鬼越败。 笑死触幼,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的究飞。 我是一名探鬼主播置谦,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼亿傅!你這毒婦竟也來了媒峡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤葵擎,失蹤者是張志新(化名)和其女友劉穎谅阿,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酬滤,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡签餐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了盯串。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片氯檐。...
    茶點故事閱讀 40,030評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖体捏,靈堂內(nèi)的尸體忽然破棺而出冠摄,到底是詐尸還是另有隱情,我是刑警寧澤译打,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布耗拓,位于F島的核電站,受9級特大地震影響奏司,放射性物質(zhì)發(fā)生泄漏乔询。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一韵洋、第九天 我趴在偏房一處隱蔽的房頂上張望竿刁。 院中可真熱鬧黄锤,春花似錦、人聲如沸食拜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽负甸。三九已至流强,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間呻待,已是汗流浹背打月。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蚕捉,地道東北人奏篙。 一個月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像迫淹,于是被迫代替她去往敵國和親秘通。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,976評論 2 355

推薦閱讀更多精彩內(nèi)容