2014年3月15日 星期六

PulseAudio 跨越『不同子網路』的連線設定

在深入研究 PulseAudio 這個『網路聲音伺服』系統,愈覺得它的功能強大,難怪許多『開放原始碼』作業系統都選擇它作為聲音次系統。之前幾篇發文:
都鎖定同一個子網域中兩台電腦的連線,一個『受音端(伺服端)』廣播所提供的 PulseAudio 服務訊息,另一個『音源端(用戶端)』電腦則將音訊經網路送到『受音端』播放。
  最近在試著將不同子網路的兩台電腦建立連線,想知道 PulseAudio 是否仍能夠補償線路的延遲。使用的測試網路架構如下:
  • 兩部電腦 PC_A 及 PC_B 分別位於 A、B 兩個子網路。
  • 子網路 B 是透過分享器接上子網路 A,且分享器無特別設定。
  • PC_A 無法連線 PC_B,而 PC_B 則可以連線 PC_A。
在以上情況下,PC_A 與 PC_B 分別設定為 PulseAudio 之『受音端』或『音源端』,雙向皆無法正常透過前面發文的步驟建立連線。當然,聲音的傳送也不能成功,幾經測試終於找到建立 PulseAudio 連線的方法,而且兩個方向的傳輸都可建立。步驟說明如下:
  在介紹步驟之前,先說明測試的電腦名稱及 IP 位址等資訊,方便讀者看懂步驟內容。
文章名稱測試電腦的名稱使用帳號IP 位址SSH 埠號
PC_ACeleron-DSiB192.168.10.135566
PC_BM2400SiB192.168.20.246677
以上電腦設定,請讀者依本身電腦的設定加以修改。

一、由內部電腦(PC_B)向外部電腦(PC_A)傳送聲音

因為 PC_B 可以直接連線 PC_A,只要手動將『音源端』(位在 PC_B)連上『伺服端』(位在 PC_A)即可,
[SiB@M2400 ~]$ pacmd load-module module-tunnel-sink server=192.168.10.13
『音源端』的 PulseAudio 系統就會看到『伺服端』所提供的音效服務了。其它操作與平常 PulseAudio 無異,不再敘述。

:如果『音源端』(即 PC_B)用『pulseaudio --kill』命令重啟 PulseAudio 音效系統,則手動連線的命令要再重下一次。

  如果這個使用情況是固定的,每次手動下命令是有些麻煩。可以將這個設定放在『音源端』的 PulseAudio 之設定檔『~/.config/pulse/default.pa』(位於使用者根目錄之下,可複製自 /etc/pulse/default.pa),在其中加入一列命令,
load-module module-tunnel-sink server=192.168.10.13
存回,再用『pulseaudio --kill』重啟 PulseAudio 音效系統即可。

:如果是聲音傳輸方向改變,即『音源端』及『受音端』角色變換,有時要將電腦重新開機才行。

二、由外部電腦(PC_A)向內部電腦(PC_B)傳送聲音

因為 PC_A 不能直接連線 PC_B,所以要從 PC_B 這一端,先用 SSH 建立由 PC_A 到 PC_B 的逆向通道,
[SiB@M2400 ~]$ ssh 192.168.10.13 -p 5566 -R 4713:127.0.0.1:4713 -R 16001:127.0.0.1:16001
命令中的『-R ...』是 SSH 建立逆向通道的參數,『127.0.0.1』是指 PC_A 電腦的本地網路位址。這樣可以將 PC_A 的 4713, 16001 這兩個 PulseAudio 連線所需的埠號,由 PC_A 轉送到 PC_B。接下來,還要在 PC_A 電腦用手動將『音源端』(現在是 PC_A)連上『伺服端』(現在是 PC_B),
[SiB@Celeron ~]$ pacmd load-module module-tunnel-sink server=127.0.0.1
上個命令中的 IP 位址『127.0.0.1』就是前個命令中 PC_A 電腦的本地網路位址。接下來的操作與平常的 PulseAudio 無異,不再敘述。

已測試版本:

  • Fedora: (20 → 19), (20 → 19)

參考資料:

沒有留言:

張貼留言

感謝你耐心看完本文,歡迎留下任何指正、建議,筆者會儘快回應。(English is also welcome.)