ฉันได้ติดตั้ง raspbian บน Pi ของฉันและกำหนดค่าอ่างล้างจาน PulseAudio ด้วยความตั้งใจที่จะสตรีมเสียงทั้งหมดจากเดสก์ท็อปของฉันไปยัง Pi ขับลำโพง
ฉันได้ปฏิบัติตามคำอธิบายที่ดีนี้: http://www.raspberrypi.org/phpBB3/viewtopic.php?f=38&t=11124
ตอนแรกสิ่งนี้ดูเหมือนว่าจะทำงานได้โดยไม่มีปัญหา อย่างไรก็ตามเสียงที่ส่งจากเดสก์ท็อปนั้นติดอยู่บน Pi อย่างต่อเนื่องราวกับว่ามีบัฟเฟอร์คงที่อยู่ภายใต้บัฟเฟอร์ที่มีตัวอย่างเพียงไม่กี่ตัวอย่างที่ขาดหายไป
ฉันใช้เวลาทั้งวันพยายามหาสาเหตุ แต่ก็ไม่มีประโยชน์ การตั้งค่าพื้นฐานคือ:
- การเชื่อมต่อ LAN แบบผ่านสาย
- raspbian pi ล่าสุด (26 ก.ย. 2556) พร้อมอัพเดตเฟิร์มแวร์ล่าสุด
- PulseAudio 2.0 ทั้งสองด้าน (เดสก์ท็อป Ubuntu)
- เล่นผ่าน mplayer, totem, ffplay
- การส่งผ่านเครือข่ายผ่านโมดูล-native-protocol-tcp
นี่คือสิ่งที่ฉันพยายาม:
- การเล่นเสียงโดยตรงบน Pi ทำงานได้อย่างสมบูรณ์แบบ
- การสตรีมไปยังคอมพิวเตอร์อื่น ๆ (เดสก์ท็อป) นั้นใช้งานได้ดี
- การส่งเสียงด้วยการเชื่อมต่อโดยตรง (ระบุ $ PULSE_SERVER) ทำงานได้ค่อนข้างดีด้วยการพูดติดอ่างเพียงเล็กน้อย แต่ก็ยังมีแนวโน้มที่จะเกิดปัญหา -2 (ดูด้านล่าง)
- การส่งเสียงผ่านเดสก์ท็อป PulseAudio tunneling ช่วยให้การพูดติดอ่างคงที่
- การเพิ่มลำดับความสำคัญ / การตั้งเวลาตามเวลาจริง ... ไม่ได้ช่วย
- การแก้ไขอัตราการสุ่มตัวอย่างเป็น 48 kHz ... ไม่ได้ช่วย
- การตั้งอัลกอริทึมการสุ่มตัวอย่างใหม่เป็น "trivial" ... ไม่ได้ช่วยอะไร
- การปรับขนาดเริ่มต้น / ชิ้นส่วน - ขนาด ... ไม่ได้ช่วย
ฉันไม่พบข้อบ่งชี้ของปัญหาในบันทึกของ PulseAudio (แสดงจากเวลาที่ฉันเริ่มเล่น):
D: [alsa-sink] protocol-native.c: Requesting rewind due to end of underrun. D: [alsa-sink] sink-input.c: Requesting rewind due to uncorking D: [pulseaudio] sink.c: Suspend cause of sink alsa_output.platform-bcm2835_AUD0.0.analog-stereo is 0x0000, resuming I: [alsa-sink] alsa-sink.c: Trying resume... I: [alsa-sink] alsa-util.c: cannot disable ALSA period wakeups D: [alsa-sink] alsa-util.c: Maximum hw buffer size is 341 ms D: [alsa-sink] alsa-util.c: Set buffer size first (to 16384 samples), period size second (to 16384 samples). I: [alsa-sink] alsa-util.c: ALSA period wakeups were not disabled D: [alsa-sink] alsa-sink.c: Latency set to 25.00ms D: [alsa-sink] alsa-sink.c: hwbuf_unused=60736 D: [alsa-sink] alsa-sink.c: setting avail_min=15665 I: [alsa-sink] alsa-sink.c: Time scheduling watermark is 15.00ms I: [alsa-sink] alsa-sink.c: Resumed successfully... I: [alsa-sink] alsa-sink.c: Starting playback. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [pulseaudio] module-suspend-on-idle.c: Sink alsa_output.platform-bcm2835_AUD0.0.analog-stereo becomes busy. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] alsa-sink.c: Cutting sleep time for the initial iterations by half. D: [alsa-sink] ratelimit.c: 115 events suppressed D: [alsa-sink] alsa-sink.c: Wakeup from ALSA! ... no more output, but stuttering continues ...
ปัญหาที่ 2: ดังที่ได้กล่าวไว้ข้างต้นฉันสามารถรับเสียงได้ค่อนข้างดีด้วยการเชื่อมต่อโดยตรง อย่างไรก็ตามหลังจากข้ามไปสองสามครั้งในสตรีม (โดยใช้ mplayer) เซิร์ฟเวอร์ PulseAudio จะหยุดทำงานและไม่เล่นเสียงใด ๆ เลย บางครั้งสามารถฟื้นฟูได้ด้วยการเริ่ม mplayer ใหม่ บางครั้งแฮงค์แย่มากจนต้องเริ่ม PulseAudio ใหม่ บางครั้งมันก็หยุดทำงานเมื่อฉันเปลี่ยนระดับเสียงเท่านั้น
จาก PulseAudio docs ข้อได้เปรียบของการเชื่อมต่อโดยตรงผ่านการเชื่อมต่อแบบ tunnelled คือการควบคุมบัฟเฟอร์ที่ดีกว่าซึ่งดูเหมือนจะบ่งบอกว่าทำไมฉันถึงได้เสียงที่ดีด้วยการเชื่อมต่อโดยตรง: http://www.freedesktop.org/wiki/Software / PulseAudio / เอกสาร / ผู้ใช้ / เครือข่าย /
ตอนนี้ฉันหมดความคิดแล้ว สิ่งที่อาจทำให้เกิดการพูดติดอ่างและปัญหาที่ 2? เพียงแค่ความคิดวิธีการดำเนินการแก้ไขข้อบกพร่องก็จะได้รับการชื่นชม