ฉันตีความความคิดเห็นของคุณว่า "การใช้ Pulseaudio เพื่อทำเช่นนั้นก็โอเค" ฉันยังไม่ได้ทดสอบสิ่งนี้ แต่นี่คือสิ่งที่ฉันจะทำ:
ก่อนอื่นให้สร้างอ่างล้างจาน "null" Pulseaudio:
pacmd load-module module-null-sink sink_name=icecast sink_properties=device.description=Icecast
ใน Pulseaudio อ่างล้างจานแต่ละอันมีส่วนเกี่ยวข้อง .monitor
แหล่งที่มาดังนั้นด้วยวิธีนี้คุณสามารถส่งสัญญาณเสียงไปยัง icecast
ซิงค์และประมวลผลในแอปพลิเคชั่นอื่นโดยใช้ icecast.monitor
แหล่ง
ถ้าฉันเข้าใจคุณอย่างถูกต้องคุณต้องการ รับ สตรีม icecast บนคอมพิวเตอร์ของคุณ เพื่อส่งกระแสข้อมูลไปยัง icecast
อ่างทำสิ่งที่ชอบ
mplayer http://your.icecast.server -ao pulse::icecast
เมื่อสตรีม icecast สิ้นสุดลง mplayer
จะหยุดเช่นกันดังนั้นให้ห่อคำว่า shell script ไว้ภายใน infinite while
ห่วง ฯลฯ
ฉันไม่แน่ใจว่าฉันเข้าใจสิ่งที่คุณพยายามทำกับส่วน "สตรีมถึง udp ผ่าน ffmpeg" ไม่ว่าในกรณีใดคุณสามารถอ่านได้จากตอนนี้ icecast.monitor
กับ
ffmpeg -f alsa -i pulse ...
ในขณะที่ใช้ pavucontrol
หรือ pamcd
เพื่อเลือกแหล่งสัญญาณที่ถูกต้องหรือหากคุณ ffmpeg
สามารถคอมไพล์ด้วยการสนับสนุน pulseaudio โดยตรง
ffmpeg -f pulse -i icecast.monitor ...
อย่างไรก็ตามหากแนวคิดคือ "ฉันต้องการกระจายสตรีม icecast นั้นไปยังคอมพิวเตอร์เครื่องอื่นในเครือข่ายในบ้านของฉัน" อาจเป็นการดีกว่าถ้าใช้ โมดูล Pulseaudio RTP เหมือนอ่างล้างจานในตอนแรก
ดังที่ฉันได้กล่าวมาแล้วสิ่งเหล่านี้ไม่ผ่านการทดสอบคุณอาจต้องปรับแต่งชิ้นส่วนเพื่อให้ทำงานได้
แก้ไข
ฉันยังไม่แน่ใจว่าอุปกรณ์จำลอง ALSA จะทำงานได้ตั้งแต่แรกเพราะความเข้าใจของฉันว่าเป็นเพียงอุปกรณ์ "จำลอง" และไม่ให้ลูปแบ็ค คุณต้องใช้ snd-aloop
อุปกรณ์ลูปแบ็คสำหรับเรื่องนั้นและอันนี้เป็นบิตของความเจ็บปวดเพราะคุณพบปัญหาอัตราการสุ่มตัวอย่างเป็นต้น
ดังนั้นคุณจะดีกว่าการใช้โครงสร้างพื้นฐาน Pulseaudio