วิธีการตั้งค่าอ่างล้างจาน PulseAudio?


16

ฉันกำลังพยายามตั้งค่า PulseAudio บน Raspberry Pi ของฉันเพื่อสตรีมเสียงระบบทั้งหมดจากพีซีของฉันที่นั่น วิธีที่ดีที่สุดที่จะทำคืออะไร?

ตัวอย่างเช่นเป็นไปได้หรือไม่ที่จะรับชมภาพยนตร์หรือความล่าช้าสูงเกินไป? ฉันลองสิ่งนี้เมื่อไม่นานมานี้โดยใช้ gstreamer แต่ด้วยความล่าช้าประมาณ 2 วินาทีซึ่งไร้ประโยชน์สำหรับความต้องการของฉัน


1
ฉันจะได้รับความล่าช้าสองหรือสอง
goldilocks

คำตอบ:


19

คำแนะนำอย่างเป็นทางการสำหรับการสร้าง "การเชื่อมต่อโดยตรง" บนเครือข่ายหวังว่าเพียงแค่การทำงานสำหรับคนส่วนใหญ่ แต่ดูเหมือนว่า PulseAudio และฉันไม่ได้รับพร้อมที่ดี: มันเอาฉันชั่วโมง [นอกจาก "การเชื่อมต่อโดยตรง" คุณสามารถใช้วิธี "tunnel" ที่อธิบายเพิ่มเติมได้ แต่ฉันขอแนะนำให้อ่านก่อนนี้]

ตอนนี้ฉันมีเดสก์ท็อป (fedora 17) สตรีมเสียงไปยังไพ ฉันย่อเล็กสุด/etc/pulseไฟล์ config ทั้งสองด้าน ทางด้านเดสก์ท็อป:

/etc/pulse/client.conf

# See man pulse-client.conf
default-server = tcp:192.168.2.13:4713

ที่อยู่ LAN ของฉันของฉันด้วยพอร์ต pulseaudio เริ่มต้น แต่นี่คือบางสิ่งที่ทำให้ฉันสับสนอยู่ครู่หนึ่งด้วยการระบุเซิร์ฟเวอร์ pulseaudio จะไม่เริ่มด้วยซ้ำ:

> pulseaudio --start
N: [pulseaudio] main.c: User-configured server at tcp:192.168.2.13:4713, refusing to start/autospawn.

มันจะทำงานในเบื้องหน้า (อาจเป็นเพราะมันไม่ได้อ่าน Pulse-client.conf?) อย่างไรก็ตาม , ตามที่ปรากฎ, คุณไม่จำเป็นต้องรันมันเลยบนเดสก์ท็อป (กำลังส่ง) , สิ่งที่ไม่ได้สะกดในเอกสาร pulseaudio. ใช้lsof -i -Pมันปรากฏว่าปลั๊กอินระดับต่ำกว่าสำหรับเครื่องเล่นสื่อต่าง ๆ ทำงาน

ดังนั้นบรรทัดหนึ่ง "client.conf" จึงเป็นสิ่งที่คุณต้องการบนเดสก์ท็อป / ไคลเอ็นต์หากทั้งหมดที่คุณต้องทำคือใช้เครือข่าย (แต่ดูที่ "ยังมีอาการแทรกซ้อนมากขึ้น" ด้านล่าง)

แม้ว่า pulseaudio daemon (ฝั่งรับ / เซิร์ฟเวอร์) สามารถเรียกใช้เป็นบริการของระบบได้ แต่ผู้พัฒนาระบบแนะนำให้ใช้กับพัลส์และในความเป็นจริงเกี่ยวกับ pi สคริปต์เริ่มต้นเพียงทำให้เกิดการเตือน: คุณยังต้องเริ่มต้น ด้วยตัวคุณเอง Fedora ไม่ได้รวมรายการบริการการบูต systemd ไว้

ดังนั้นในด้าน pi คุณควรเริ่มและหยุดกระบวนการเซิร์ฟเวอร์ pulseaudio อย่างชัดเจนโดยกำหนดค่าดังนี้:

/etc/pulse/daemon.conf

# See man pulse-daemon.conf
log-level = info
exit-idle-time = 10800 # 3 hours

คุณสามารถใช้ -1 สำหรับexit-idle-timeเพื่อให้ daemon ทำงานอย่างไม่มีกำหนด ระวังนี่เป็นวินาทีและค่าเริ่มต้นคือ 20 (หมายถึงมันจะทำให้ "ลึกลับ" ตายไปถ้าคุณไม่ได้ตั้งค่านี้)

/etc/pulse/default.pa

# See man default.pa
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1;192.168.2.0/24
load-module module-alsa-sink device=hw:0,0

เนื่องจากนี่เป็นแอปเครือข่ายจึงไม่ควรเรียกใช้เป็นรูท อย่างไรก็ตามดังที่กล่าวไว้ในman pulseaudioมันเป็นความคิดที่ดีที่จะ "ยกเลิก" กระบวนการเพื่อให้ความสำคัญสูงกว่า คุณสามารถทำได้ด้วยตนเองniceแต่ pulseaudio จะทำโดยอัตโนมัติสำหรับรูทหรือสมาชิกของpulse-rtกลุ่มถ้าเอ็กซีคิวต์คือ "setuid" ซึ่งหมายความว่ามันสามารถใช้สิทธิ์พิเศษรูตบางอย่างจากนั้นเปลี่ยนเป็น uid ที่ไม่ถูกตรึง ( pingและpasswdยังต้องทำเช่นนี้) ดังนั้น (เป็น root หรือ sudo):

chmod u+s /usr/bin/pulseaudio

ไม่มีpulse-rtกลุ่มที่สร้างขึ้นเมื่อมีการติดตั้ง pulseaudio บน raspbian ดังนั้น:

groupadd pulse-rt

สิ่งนี้จะทำให้คุณมี gid เช่น 1003 เพิ่ม (เช่น) user pi ให้กับกลุ่มนั้น:

usermod -aG pulse-rt pi

แต่สำหรับราสเบียนคุณยังคงไม่สามารถเปลี่ยนเป็นไพได้ เพื่อที่จะเพิ่ม/etc/security/limits.conf:

@pulse-rt       hard nice -20
@pulse-rt       soft nice -20

คุณต้องเข้าสู่ระบบก่อนที่จะมีการเปลี่ยนแปลงเหล่านี้ ถ้าคุณใช้ SSH loginกับปี่ใช้เพียง ตอนนี้คุณสามารถเริ่มต้น pulseaudio และมันจะยกเลิกตัวเอง -11 ซึ่งน่าจะเป็นลำดับความสำคัญสูงกว่ากระบวนการอื่น ๆ ส่วนใหญ่ (ดูที่ค่า NICE ในtop)

ในขณะที่เล่นเสียงที่สตรีมจากเครือข่าย pulseaudio บน pi ใช้ CPU ประมาณ 10% และหน่วยความจำเล็กน้อย :) มันและเดสก์ทอปของฉันอยู่บน LAN แบบมีสาย; พัลส์สตรีมข้อมูล pcm แบบ raw (ฉันเชื่อ) ดังนั้นการใช้แบนด์วิดท์สอดคล้องกับอัตราตัวอย่างของแหล่งที่มาคือ 1 kB / s ขึ้นไป โชคไม่ดีที่เสียงล่าช้าหากคุณดูวิดีโอ

ยังมีอาการแทรกซ้อนมากขึ้น ...

น่าเสียดายที่ไม่มีแอปพลิเคชั่นเสียงต่าง ๆ จากพีซีของฉันทำงานได้ทันที mpg123จะไม่วิ่งเลย สำหรับสิ่งนั้นใน fedora คุณต้องมีmpg123-plugins-pulseaudioแพ็คเกจ สำหรับแฟลชในเบราว์เซอร์ (เช่นคุณต้อง) คุณต้องการalsa-plugins-pulseaudio(สิ่งเหล่านี้คือสิ่งที่เชื่อมต่อกับเซิร์ฟเวอร์ระยะไกล) สิ่งรบกวนอื่น ๆ ควรมีแพ็คเกจที่คล้ายกัน หากคุณเคยใช้ pulseaudio มาก่อน (ไม่ใช่ฉัน) คุณอาจติดตั้งซอฟต์แวร์เหล่านั้นแล้ว

ระฆังและเดสก์ท็อปของ KDE ก็ไม่ทำงานเช่นกัน นี่เป็นปัญหาที่ยากกว่าในการแก้ไขเนื่องจากค้นหาเซิร์ฟเวอร์ pulseaudio ในเครื่องและตามที่อธิบายไว้การใช้การเชื่อมต่อโดยตรงหมายความว่าไม่มีเซิร์ฟเวอร์ใดที่สามารถทำงานได้ในเครื่อง วิธีแก้ไขคือใช้วิธี "อุโมงค์"

โมดูลอุโมงค์อ่างล้างจาน

นี่เป็นวิธีอื่นที่กล่าวถึงในเอกสาร pulseaudio ในกรณีนี้คุณมีเซิร์ฟเวอร์ที่ใช้งานได้ทั้งสองด้านและอีกมือหนึ่งแยกจากกัน หากต้องการทำสิ่งนี้ให้ใส่เครื่องหมาย "เซิร์ฟเวอร์เริ่มต้น" ใน/etc/client.confและเพิ่มโลคัล/etc/default.paที่มี:

load-module module-tunnel-sink sink_name=rpi_tunnel server=tcp:192.168.2.13:4713 sink=bcm1

หากคุณไม่ได้เข้าร่วมsink_namepulseaudio จะไม่เริ่ม The sinkอ้างถึงชื่ออ่างที่ด้าน pi ซึ่งก็ต้องมีชื่อ; เพิ่มที่สอดคล้องsink_nameกับmodule-alsa-sinkบรรทัดในdefault.pa:

load-module module-alsa-sink device=hw:0,0 sink_name=bcm1 

สตาร์ทเซิร์ฟเวอร์ทั้งสองด้านและเรียงลำดับ ... ในขณะที่ทุกอย่างรวมถึงการส่งเสียงแหลม KDE ถูกนำมาใช้ในขณะนี้ อย่างไรก็ตามภายใต้สภาพแวดล้อมเดสก์ทอปอื่น (อันที่จริงเพียงแค่จัดการหน้าต่าง fvwm) มันก็ดี

ฉันชอบ KDE แต่สามารถอยู่ได้โดยปราศจากเสียงแหลมดังนั้นตอนนี้ฉันจะติดกับการเชื่อมต่อโดยตรง

การแก้ไขปัญหา

หากคุณมีปัญหาการใช้งานpulseaudio -vvvv --log-level=debugบน pi จะมีข้อความดีบั๊กมากมาย เริ่มแรกเมื่อฉันไม่สามารถรับเสียงจาก pi ได้รายงานปัญหา "เกี่ยวข้องกับข้อผิดพลาดในไดรเวอร์ ALSA bcm2835" ซึ่งดูเหมือนแปลกสำหรับฉันเนื่องจากเสียงดีด้วย alsa เพียงและฉันแน่ใจว่ามีซอฟต์แวร์ pi ที่ขึ้นอยู่กับที่ ใน pulseaudio - apt-get remove pulseaudioและการติดตั้งซ้ำapt-get install pulseaudioดูเหมือนว่าจะแก้ไขปัญหานี้ ... ไม่ใช่วิธีการแก้ปัญหาที่ฉันต้องการเห็น แต่อย่างน้อยตอนนี้ฉันสามารถฟัง tish โดยไม่ต้องเสียบลำโพงเข้าในทุกช่อง ส่วนใหญ่


ขอบคุณสำหรับคำตอบมากมาย แม้ว่าคำถามหนึ่งข้อ: เกิดอะไรขึ้นกับเสียงที่มาจาก Pi โดยตรง
Vincent

Dunno ถ้าฉันเคยลองทำ (ฉันไม่ได้ทำแบบนี้อีกแล้ว) แต่ pulseaudio ควรจะเป็นมัลติเพล็กเซอร์ดังนั้นมันจึงควรใช้งานได้
goldilocks
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.