PulseAudio सिंक कैसे सेट करें?


16

मैं अपने पीसी से सभी सिस्टम ध्वनियों को स्ट्रीम करने के लिए अपने रास्पबेरी पाई पर पल्सएडियो सिंक स्थापित करने की कोशिश कर रहा हूं। ऐसा करने का सबसे अच्छा तरीका क्या है?

उदाहरण के लिए, क्या फिल्में देखना संभव है या विलंबता बहुत अधिक है? मैंने कुछ समय पहले gstreamer का उपयोग करके यह कोशिश की, लेकिन लगभग 2 सेकंड की विलंबता के साथ, जो मेरी आवश्यकताओं के लिए बेकार है।


1
मुझे दूसरी या दो लेटेंसी मिलती हैं।
गोल्डीलॉक्स

जवाबों:


19

सरकारी निर्देश एक नेटवर्क पर एक "सीधा संबंध" ज्यादातर लोगों के लिए उम्मीद है कि सिर्फ काम बनाने के लिए है, लेकिन यह पल्सऑडियो लगता है और मुझे लगता है कि अच्छी तरह से साथ नहीं मिलता है: यह मुझे ले गया घंटे । ["प्रत्यक्ष कनेक्शन" के अलावा, आप नीचे वर्णित "सुरंग" विधि का भी उपयोग कर सकते हैं, लेकिन मैं इसे पहले पढ़ने की सलाह देता हूं।]

अब मेरे पास एक (फेडोरा 17) डेस्कटॉप स्ट्रीमिंग साउंड टू पी है। मैंने /etc/pulseदोनों तरफ की कॉन्फिग फाइलों को छोटा कर दिया है । डेस्कटॉप पक्ष पर:

/etc/pulse/client.conf

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

डिफ़ॉल्ट pulseaudio पोर्ट के साथ मेरी पाई का LAN पता। लेकिन यहाँ कुछ है जो तब मुझे थोड़ी देर के लिए उलझन में था - निर्दिष्ट सर्वर के साथ, पल्सेडियो भी शुरू नहीं होगा:

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

यह अग्रभूमि में चलेगा (शायद इसलिए कि यह पल्स-क्लाइंट.कॉन्फ़ नहीं पढ़ता है?)। हालाँकि , जैसा कि यह पता चला है, आपको इसे डेस्कटॉप (भेजने) की तरफ बिल्कुल भी चलाने की ज़रूरत नहीं है , ऐसा कुछ जो पल्सीडियो डॉक्स में नहीं है। lsof -i -Pइसका उपयोग करने से प्रतीत होता है कि विभिन्न मीडिया प्लेयर के लिए निचले स्तर के प्लगइन्स काम करते हैं।

तो, वह एक लाइन "client.conf" वास्तव में आप सभी को डेस्कटॉप / क्लाइंट साइड पर चाहिए, अगर आप जो करने जा रहे हैं वह नेटवर्क का उपयोग करना है (लेकिन नीचे "अभी भी अधिक जटिलताएं देखें")।

हालाँकि पल्सीडियो डेमॉन (प्राप्त करने / सर्वर की तरफ) को एक सिस्टम सेवा के रूप में चलाया जा सकता है, लेकिन पल्स के डेवलपर्स इसके खिलाफ सलाह देते हैं , और वास्तव में पाई इनिट स्क्रिप्ट पर सिर्फ चेतावनी जारी करने का कारण बनता है: आपको अभी भी शुरू करना है तुम्हरे द्वारा। फेडोरा में इसके लिए एक सिस्टम बूट सेवा प्रविष्टि भी शामिल नहीं है।

इसलिए, pi पक्ष पर, आपको स्पष्ट रूप से प्रारंभ करना चाहिए और इस तरह कॉन्फ़िगर किया गया pulseaudio सर्वर प्रक्रिया को रोकना चाहिए:

/etc/pulse/daemon.conf

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

आप exit-idle-timeडेमन को अनिश्चित काल तक चालू रखने के लिए -1 का उपयोग कर सकते हैं । खबरदार है कि यह सेकंड है और डिफ़ॉल्ट 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समूह के सदस्यों के लिए स्वचालित रूप से करेगा , यदि निष्पादन योग्य "सेट्यूड" है, तो इसका अर्थ है कि यह कुछ रूट प्राइवेटिज का उपयोग कर सकता है और फिर सही अनप्रिडल यूआईडी में बदल सकता है ( pingऔर passwdयह भी करने की जरूरत है)। तो (रूट, या sudo के रूप में):

chmod u+s /usr/bin/pulseaudio

pulse-rtजब रसियन पर पल्सेडियो स्थापित होता है, तब कोई समूह नहीं बनता है, इसलिए:

groupadd pulse-rt

यह आपको 1003 की तरह एक gid देगा। उस समूह में उपयोगकर्ता pi जोड़ें (जैसे):

usermod -aG pulse-rt pi

लेकिन रसियन पर, आप अभी भी पाई के रूप में त्याग नहीं कर पाएंगे। उसके लिए, इसमें जोड़ें /etc/security/limits.conf:

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

इन परिवर्तनों को करने से पहले आपको वास्तव में एक लॉग चलाना होगा; यदि आप पीआई के साथ ssh का उपयोग करते हैं, तो उपयोग करें login। अब आप pulseaudio शुरू कर सकते हैं और यह अपने आप -11 का नाम बदल देगा, जो कि संभवतः अन्य प्रक्रियाओं (एनआईसीई मूल्य को देखें top) की तुलना में अधिक है ।

नेटवर्क से ध्वनि प्रवाहित करते हुए, pi पर pulseaudio लगभग 10% CPU और एक तुच्छ मेमोरी का उपयोग करता है। :) यह और मेरा डेस्कटॉप एक वायर्ड लैन पर हैं; पल्स स्ट्रीम पीएमसी डेटा (मेरा मानना ​​है), इसलिए बैंडविड्थ उपयोग स्रोत के नमूना दर, 1 केबी / एस और ऊपर से मेल खाती है। यदि आप वीडियो देख रहे हैं, तो दुर्भाग्य से, ध्यान देने योग्य अंतराल है।

फिर भी अधिक जटिलताओं ...

दुर्भाग्य से, मेरे पीसी से विभिन्न ध्वनि अनुप्रयोगों में से किसी ने भी तुरंत काम नहीं किया; mpg123बिल्कुल नहीं चलेगा। उसके लिए, फेडोरा पर, आपको mpg123-plugins-pulseaudioपैकेज की आवश्यकता है । ब्राउज़र में फ्लैश सामान के लिए (उदाहरण के लिए, youtude) आपको ज़रूरत है alsa-plugins-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 शुरू नहीं होगा। sinkअनुकरणीय पक्ष है, जो तब भी एक नाम की आवश्यकता है पर सिंक नाम करने के लिए संदर्भित करता है; एक इसी जोड़ने sink_nameके लिए module-alsa-sinkमें लाइन default.paवहाँ:

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

सर्वर को दोनों तरफ से शुरू करें और presto ... सॉर्ट करें। जबकि केडीई ब्लिप्स सहित सब कुछ अब किया गया था, ब्राउज़र फ्लैश प्लेबैक बुरी तरह से लड़खड़ा गया। हालांकि, एक अन्य डेस्कटॉप वातावरण के तहत (वास्तव में, सिर्फ एक खिड़की प्रबंधक, fvwm) यह ठीक था।

मैं केडीई को पसंद करता हूं, लेकिन बिना धुंधले रह सकता हूं, इसलिए अब मैं सीधे कनेक्शन के साथ रहना चाहता हूं।

समस्या निवारण

यदि आपको समस्या है, pulseaudio -vvvv --log-level=debugतो पाई पर उपयोग करने से बहुत सारे डीबगिंग संदेश मिलते हैं। प्रारंभ में जब मुझे पाई पर ध्वनि नहीं मिल रही थी, तो यह एक समस्या "एएलएसए bcm2835 ड्राइवर में एक बग से संबंधित है" जो मुझे अजीब लग रहा था क्योंकि ध्वनि बस एल्सा के साथ ठीक थी, और मुझे यकीन है कि इसके चारों ओर पाई सॉफ्टवेयर है जो निर्भर करता है pulseaudio पर - apt-get remove pulseaudioऔर फिर से स्थापित करने के apt-get install pulseaudioलिए यह तय लग रहा था ... एक समाधान मुझे देखना पसंद नहीं है, लेकिन हे, कम से कम अब मैं हर बॉक्स में वक्ताओं को प्लग किए बिना टीश को सुन सकता हूं। अधिकतर।


व्यापक उत्तर के लिए धन्यवाद। हालांकि एक सवाल: क्या ऑडियो सीधे पाई से आता है?
विन्सेंट

डन्नो अगर मैंने कभी कोशिश की कि (मैं अब ऐसा नहीं कर रहा हूं) लेकिन पल्सेडियो को मल्टीप्लेक्स माना जाता है, इसलिए इसे काम करना चाहिए।
गोल्डीलॉक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.