คำแนะนำอย่างเป็นทางการสำหรับการสร้าง "การเชื่อมต่อโดยตรง" บนเครือข่ายหวังว่าเพียงแค่การทำงานสำหรับคนส่วนใหญ่ แต่ดูเหมือนว่า 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_name
pulseaudio จะไม่เริ่ม 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 โดยไม่ต้องเสียบลำโพงเข้าในทุกช่อง ส่วนใหญ่