Ini terus muncul karena orang-orang sepertinya sangat menyukai visualisator ncmpcpp
Trik untuk membuat wastafel FIFO yang andal ada dua. Anda perlu menggunakan penulisan non-blocking, yang berarti membuka soket tulis akan gagal kecuali ada pembaca, maka Anda memerlukan pembaca juga. Kedua, jika buffer terisi karena pembaca eksternal tertinggal atau tidak ada sama sekali, pembaca internal Anda perlu mengosongkan buffer.
Kode berikut menangkap inti dasar dari ini, tetapi masih membutuhkan lebih banyak pekerjaan sehubungan dengan penanganan kesalahan.
import errno
import os
import stat
LINUX_FIFO_BUFFER_SIZE = 65536
class FifoStreamer(object):
def __init__(self, location):
self.location = location
self.reader = None
self.writer = None
def create(self):
try:
mode = os.stat(self.location).st_mode
if not stat.S_ISFIFO(mode):
raise Exception('File exists but is not a FIFO')
except OSError as e:
if e.errno == errno.ENOENT:
os.mkfifo(self.location)
else:
raise
# TODO: wrap in could not open reader / writer?
self.reader = os.open(self.location, os.O_NONBLOCK | os.O_RDONLY)
self.writer = os.open(self.location, os.O_NONBLOCK | os.O_WRONLY)
def close(self):
# TODO: make closing robust
os.close(self.writer)
os.close(self.reader)
def write(self, data):
while data:
try:
written = os.write(self.writer, data)
data = data[written:]
except OSError as e:
if e.errno == errno.EINTR:
continue
elif e.errno in (errno.EAGAIN, errno.EWOULDBLOCK):
self.flush()
else:
raise
def flush(self):
while True:
try:
if not os.read(self.reader, LINUX_FIFO_BUFFER_SIZE):
break
except OSError as e:
if e.errno in (errno.EAGAIN, errno.EWOULDBLOCK):
break
elif e.errno == errno.EINTR:
continue
else:
raise
Kode di atas sekarang perlu diintegrasikan dengan GStreamer. Dengan asumsi 0,10 ini sebenarnya sangat bisa dilakukan, alasan saya ragu adalah bahwa kami merencanakan pindah ke 1.x dan pengikatan gir tidak cocok untuk membuat elemen dengan python. Dalam kasus kode ini di 1.x masalahnya bermuara pada tidak dapat membuat template pad yang BaseSink harapkan untuk ditemukan. Membuat ini sebagai elemen biasa mungkin bisa dilakukan, tetapi Anda perlu menerapkan kembali cara untuk menangani sebagian besar BaseSink untuk memastikan Anda melakukannya dengan benar.
import gobject
import pygst
pygst.require('0.10')
import gst
class FifoSink(gst.BaseSink):
__gstdetails__ = (
'FifoSink',
'Sink',
'Sink designed to handle FIFO output.',
'Mopidy')
__gsttemplates__ = (gst.PadTemplate('sink', gst.PAD_SINK, gst.PAD_ALWAYS,
gst.caps_new_any()),)
# TODO: don't allow changing location in flight, i.e. create getter/setter
location = gobject.property(type=str)
def __init__(self):
gst.BaseSink.__init__(self)
self.streamer = None
def do_start(self):
self.streamer = FifoStreamer(self.location)
self.streamer.create()
return True
def do_stop(self):
self.streamer.close()
return True
def do_render(self, buf):
try:
self.streamer.write(bytes(buf))
return gst.FLOW_OK
except OSError as e:
self.error("Failed: %s", e)
return gst.FLOW_ERROR
gobject.type_register(FifoSink)
gst.element_register(
FifoSink, 'fifosink', gst.RANK_MARGINAL)
if __name__ == '__main__':
import gobject
gobject.threads_init()
output = """
capsfilter caps="audio/x-raw-int,width=16,rate=44100,channels=1" !
tee name=t
t. ! queue ! alsasink
t. ! queue ! fifosink location=/tmp/test2.fifo
"""
sink = gst.parse_bin_from_description(
output, ghost_unconnected_pads=True)
playbin = gst.element_factory_make('playbin2')
playbin.set_property('audio_sink', sink)
Perhatikan bahwa satu masalah yang saya hadapi dalam pengujian ini sebenarnya lupa untuk mencocokkan format audio yang diharapkan oleh ncmpcpp, jadi pastikan mono/stereo memang cocok.
Kemana perginya ini? apakah ini akan ditambahkan ke paket utama?
Ini tidak sedang dikerjakan karena kami perlu mengonversinya ke GStreamer 1.0, dan semua eksperimen saya dengan itu sejauh ini telah menemukan masalah saat melakukan elemen khusus dengan python. Ada cara lain untuk mungkin menyelesaikan semuanya, tetapi bukan sesuatu yang saya punya waktu untuk dikerjakan.
Saya ingin melihat dukungan FIFO ditambahkan :)
Saya baru saja menemukan ini mencari cara untuk membuat visualisator musik ncmpcpp bekerja dengan mopidy. Saya mendukung.
Ya, itulah alasan yang sama mengapa saya menemukan ini. Akan sangat bagus untuk
dapat memvisualisasikan musik yang dialirkan,
06-11-2014 2:19 GMT-05:00 Blake [email protected] :
Saya baru saja menemukan ini mencari cara untuk mendapatkan visualisator musik ncmpcpp ke
bekerja dengan mopidy. Saya mendukung.—
Balas email ini secara langsung atau lihat di GitHub
https://github.com/mopidy/mopidy/issues/775#issuecomment -61936376.
Ada plugin visualisasi gstreamer, tidak bisakah Anda menggunakannya saja?
Pada 6 Nov 2014 08:35, "Diego Berrocal" [email protected] menulis:
Ya, itulah alasan yang sama mengapa saya menemukan ini. Akan sangat bagus untuk
dapat memvisualisasikan musik yang dialirkan,
06-11-2014 2:19 GMT-05:00 Blake [email protected] :
Saya baru saja menemukan ini mencari cara untuk mendapatkan visualisator musik ncmpcpp
ke
bekerja dengan mopidy. Saya mendukung.—
Balas email ini secara langsung atau lihat di GitHub
https://github.com/mopidy/mopidy/issues/775#issuecomment -61936376.
—
Balas email ini secara langsung atau lihat di GitHub
https://github.com/mopidy/mopidy/issues/775#issuecomment -62007426.
Perhatikan bahwa itu sedang dalam perjalanan keluar di rilis berikutnya.
Apakah ada seseorang yang mengerjakan ini? Akan sangat menyenangkan untuk dapat menggunakan visualisator ncmpcpp dengan mopidy.
Bukannya saya tahu, dan kami mungkin tidak ingin melakukan ini sebagai elemen GStreamer karena akan memblokir migrasi kami ke GStreamer 1.x.
Ini IMO juga diblokir untuk menambahkan kembali dukungan yang tepat untuk output.
Hanya menambahkan bahwa saya juga menemukan masalah ini ketika mencoba menambahkan dukungan visualizer ke Mopidy/ncmpcpp. Akan senang untuk memiliki ini di masa depan bahkan jika itu tidak sedang dikerjakan saat ini. Saya juga ingin menyampaikan rasa hormat saya yang setinggi-tingginya kepada mereka yang menyumbangkan waktu mereka untuk proyek-proyek open source. :senyum:
Idealnya ini akan bekerja dari jarak jauh. Kekuatan Mopidy benar-benar terletak pada menjadi solusi yang bisa ada di cloud pribadi Anda.
Secara umum, FIFO bukanlah metode komunikasi antarproses yang sangat portabel dan harus dihindari IMO. Mereka juga memiliki beberapa efek samping yang buruk, yang telah disebutkan di utas ini. Saya pikir Anda lebih baik membuang paket Anda menggunakan wastafel UDP secara pribadi .... itu solusi yang lebih umum dan dapat dengan mudah disesuaikan dengan sesuatu yang menulis ke FIFO (jika perlu) di luar Mopidy .... itu tunggal baris skrip shell untuk membaca data dari port UDP (menggunakan netcat) dan menulisnya ke FIFO.
Boleh juga. Mungkin klien berbohong ncmpcpp juga akan mengizinkan menggunakannya sebagai input.
Ide lain adalah menggunakan PulseAudio secara langsung karena tidak memerlukan implementasi tambahan di pihak Mopidy. Wadah Docker yang saya buat menggunakan TCP untuk mengakses PulseAudio melalui jaringan. ncmpcpp sebenarnya bisa menggunakannya secara langsung.
Dari apa yang saya baca, visualizer hanya menjalankan FFT pada blok sampel yang dibaca dari file FIFO. Maksud saya adalah Anda dapat membuat FIFO di luar Mopidy menggunakan mkfifo
dan kemudian membaca data UDP dari Mopidy menggunakan netcat
dan mengarahkan output dari netcat
ke berkas FIFO. Jadi tidak ada yang perlu diubah sejauh menyangkut ncmpcpp
, itu hanya membaca file FIFO.
Untuk mencapai apa yang Anda tuju di Mopidy tidak memerlukan upaya implementasi karena Anda dapat mengubah properti output audio menjadi output ke elemen udpsink GStreamer. Kemungkinan besar Anda ingin mengaturnya sebagai bagian dari "tee" yang menampilkan wastafel ALSA/Pulse dan udpsink Anda.
Berikut ini harus bekerja .... tidak diuji jadi mungkin perlu beberapa penyesuaian.
Dalam konfigurasi audio Mopidy:
output = tee name=t ! queue ! autoaudiosink t. ! queue ! udpsink port=5555
Di host Linux Anda, luncurkan netcat untuk mendengarkan data UDP di localhost pada port 5555 dan keluaran sampel ke FIFO:
mkfifo /tmp/mopidy.fifo
nc -u -l 127.0.0.1 5555 > /tmp/mopidy.fifo &
Di mpd.conf Anda:
audio_output {
type "fifo"
name "my_fifo"
path "/tmp/mopidy.fifo"
format "44100:16:2"
}
Catatan: Jika Anda menggunakan output PulseAudio, Anda dapat melakukan sesuatu yang serupa dengan modul koneksi arah TCP-nya. Namun, Anda mungkin perlu merekayasa balik protokol apa pun yang dijalankannya di atas koneksi TCP, misalnya, tidak mungkin memperlakukannya sebagai raw sink.
Terima kasih @liamw9534 untuk berbagi. Butuh beberapa saat bagi saya untuk cukup memahami konfigurasi untuk melakukan itu atau bahkan tahu saya bisa. Saya akan mencoba menambahkannya ke wadah Docker untuk melihat apakah itu berfungsi.
Ini mungkin mengalami masalah jika Anda tidak memiliki sesuatu yang mengosongkan fifo. Karena netcat akan mengisi buffer kernel dan kemudian gagal. Dan tergantung pada bagaimana FIFO dibuka, Anda mungkin juga mengalami masalah karena FIFO dapat meminta pembaca untuk hadir agar dapat ditulis:/
Tetapi Anda dapat mengadaptasi kode FifoStreamer saya untuk menerima data UDP dan menangani ini untuk Anda karena semoga saya telah menangani sebagian besar kasus kesalahan yang dapat Anda hadapi di sana.
@adamcik Jika Anda memiliki skrip yang berfungsi, saya akan dengan senang hati memasukkannya sebagai bagian dari docker-ncmpcpp untuk digunakan orang. Saya juga akan mengubah docker-mopidy untuk disiarkan di UDP secara default menggunakan trik keluaran di atas.
Saya melakukan beberapa eksperimen dasar pada baris perintah dan semuanya berfungsi dengan baik asalkan Anda menggunakan batas waktu koneksi misalnya, nc -kluw 1 127.0.0.1 5555 > /tmp/mopidy.fifo
. Ini memaksa netcat untuk selalu mendengarkan koneksi port sumber baru setelah koneksi terakhir terputus (batas waktu 1 detik).
Perintah di atas berfungsi terlepas dari apakah ada yang membaca dari file FIFO atau tidak dan juga berfungsi jika proses membaca dari file FIFO berhenti dan menutup file.
@wernight lihat deskripsi bug ini, hanya itu kode yang saya miliki.
Dan hanya untuk sabuk dan kawat gigi, saya akan menempelkan perintah dalam loop sementara misalnya, while :; do nc -kluw 1 127.0.0.1 5555> /tmp/mopidy.fifo; sleep 1; done
- jika keluar, itu hanya akan diluncurkan lagi setelah penundaan 1 detik.
@liamw9534 Anda memiliki mpd.conf di sana. Saya bingung dengan ini. Anda menjalankan server MPD mandiri selain mopidy-mpd?
@lrvick ya kesalahan saya, tentu saja memikirkan konfigurasi yang perlu ditambahkan ke ~/.ncmpcpp/config
.config/mopidy/mopidy.conf
...
[audio]
output = tee name=t ! queue ! autoaudiosink t. ! queue ! udpsink port=5555
$ mkfifo /tmp/mopidy.fifo
$ while :; do nc -kluw 1 127.0.0.1 -p 5555> /tmp/mopidy.fifo; sleep 1; done
(ditambahkan -p
sini).
~/.ncmpcpp/config
audio_output {
type "fifo"
name "my_fifo"
path "/tmp/mopidy.fifo"
format "44100:16:2"
}
(selesai juga di wernight/docker-mopidy dan wernight/docker-ncmpcpp )
Namun tampaknya tidak dapat terhubung ke 5555 meskipun log Mopidy menunjukkan bahwa ia memahami konfigurasi output
. netstat
menunjukkan juga tidak ada UDP terbuka pada 5555. Saya tidak sepenuhnya memahami baris output
: tee
adalah perintah bash, sisanya terlihat seperti barang Mopidy.
Namun saya menemukan udp6 [::]:51307
saat memutar musik.
output
ditafsirkan sebagai elemen GstBin
yang diteruskan ke playbin2
sebagai bagian dari Mopidy - sebenarnya ini hanyalah pipeline Gstreamer, sebenarnya tidak ada yang istimewa. Oleh karena itu, tee
sebenarnya adalah elemen Gstreamer. Itu tidak ada hubungannya dengan perintah Shell tee
.
Jadi Anda dapat memperkirakan apa yang terjadi di dalam Mopidy pada baris perintah dengan melakukan sesuatu seperti:
gst-launch audiotestsrc ! tee name=t ! queue ! autoaudiosink t. ! queue ! udpsink port=5555 &
Ini akan mulai memainkan nada sinusoidal. Kemudian jalankan perintah berikut:
nc -kluw 1 127.0.0.1 5555
Saya kemudian dapat mulai melihat banyak karakter aneh di layar saya.... ini adalah tes audio stream yang dikeluarkan ke stdout dari nc
. Ini secara efektif membuktikan pendekatan yang mendasarinya berhasil. Bisakah Anda mengonfirmasi bahwa Anda dapat meniru perilaku yang sama?
Anda kemudian dapat mencoba menambahkan FIFO sebagai langkah kedua dan mengonfirmasi bahwa Anda dapat cat
FIFO ke stdout dan melihat karakter aneh yang sama.
Saya juga akan memeriksa ulang format konfigurasi yang dibutuhkan oleh ncmpcpp
. Saya telah melihat sekilas https://wiki.archlinux.org/index.php/Ncmpcpp#Enabling_visualization dan dapat melihat bahwa mungkin format konfigurasi yang diperlukan berbeda misalnya,
visualizer_fifo_path = "/tmp/mpd.fifo"
visualizer_output_name = "my_fifo"
visualizer_sync_interval = "30"
visualizer_in_stereo = "yes"
visualizer_type = "spectrum" (spectrum/wave)
Saya tidak menggunakan ncmpcpp
, jadi masalahnya bisa di sini juga...
$ apt-get install gstreamer-tools
$ gst-launch audiotestsrc ! tee name=t ! queue ! autoaudiosink t. ! queue ! udpsink port=5555 &
Setting pipeline to PAUSED ...
Pipeline is PREROLLING ...
Pipeline is PREROLLED ...
Setting pipeline to PLAYING ...
New clock: GstPulseSinkClock
$ nc -kluw 1 127.0.0.1 -p 5555
no connection : Connection timed out
(dengan nc ... -p
kalau tidak saya mendapatkan kesalahan)
Aku mendengar nada bermain sekalipun.
Distro apa yang Anda gunakan? Juga ketika Anda mengetik nc -h
apa hasilnya?
$ nc -h
OpenBSD netcat (Debian patchlevel 1.89-4ubuntu1)
This is nc from the netcat-openbsd package. An alternative nc is available
in the netcat-traditional package.
usage: nc [-46DdhklnrStUuvzC] [-i interval] [-P proxy_username] [-p source_port]
[-s source_ip_address] [-T ToS] [-w timeout] [-X proxy_protocol]
[-x proxy_address[:port]] [hostname] [port[s]]
Command Summary:
-4 Use IPv4
-6 Use IPv6
-D Enable the debug socket option
-d Detach from stdin
-h This help text
-i secs Delay interval for lines sent, ports scanned
-k Keep inbound sockets open for multiple connects
-l Listen mode, for inbound connects
-n Suppress name/port resolutions
-P proxyuser Username for proxy authentication
-p port Specify local port for remote connects
-q secs quit after EOF on stdin and delay of secs
-r Randomize remote ports
-S Enable the TCP MD5 signature option
-s addr Local source address
-T ToS Set IP Type of Service
-C Send CRLF as line-ending
-t Answer TELNET negotiation
-U Use UNIX domain socket
-u UDP mode
-Z DCCP mode
-v Verbose
-w secs Timeout for connects and final net reads
-X proto Proxy protocol: "4", "5" (SOCKS) or "connect"
-x addr[:port] Specify proxy address and port
-z Zero-I/O mode [used for scanning]
Port numbers can be individual or ranges: lo-hi [inclusive]
Opsi -p
tidak diperlukan dengan nc
saya gunakan di Ubuntu. Halaman manual juga menyiratkan bahwa seharusnya menjadi kesalahan untuk menentukan -p
dalam hubungannya dengan -l
:
-l Used to specify that nc should listen for an incoming connection
rather than initiate a connection to a remote host. It is an error
to use this option in conjunction with the -p, -s, or -z options.
Additionally, any timeouts specified with the -w option are ignored.
Menggunakan Debian Wheezy.
Berikut adalah langkah-langkah lengkap untuk Ubuntu dimulai dengan menginstal Docker :
$ wget -qO- https://get.docker.com/ | sh
$ sudo gpasswd -a ${USER} docker
$ docker run --rm -it \
-e PULSE_SERVER=tcp:$(hostname -i):4713 \
-e PULSE_COOKIE_DATA=$(pax11publish -d | grep --color=never -Po '(?<=^Cookie: ).*') \
debian:wheezy
$ apt-get update && apt-get install -y netcat
$ nc -h
[v1.10-40]
connect to somewhere: nc [-options] hostname port[s] [ports] ...
listen for inbound: nc -l -p port [-options] [hostname] [port]
options:
-c shell commands as `-e'; use /bin/sh to exec [dangerous!!]
-e filename program to exec after connect [dangerous!!]
-b allow broadcasts
-g gateway source-routing hop point[s], up to 8
-G num source-routing pointer: 4, 8, 12, ...
-h this cruft
-i secs delay interval for lines sent, ports scanned
-k set keepalive option on socket
-l listen mode, for inbound connects
-n numeric-only IP addresses, no DNS
-o file hex dump of traffic
-p port local port number
-r randomize local and remote ports
-q secs quit after EOF on stdin and delay of secs
-s addr local source address
-T tos set Type Of Service
-t answer TELNET negotiation
-u UDP mode
-v verbose [use twice to be more verbose]
-w secs timeout for connects and final net reads
-z zero-I/O mode [used for scanning]
port numbers can be individual or ranges: lo-hi [inclusive];
hyphens in port names must be backslash escaped (e.g. 'ftp\-data').
$ nc -kluw 1 127.0.0.1 5555
UDP listen needs -p arg
$ apt-get install -y net-tools gstreamer-tools gstreamer0.10-plugins-good
$ echo -ne $(echo $PULSE_COOKIE_DATA | sed -e 's/../\\x&/g') >$HOME/pulse.cookie
$ export PULSE_COOKIE=$HOME/pulse.cookie
$ gst-launch audiotestsrc ! tee name=t ! queue ! autoaudiosink t. ! queue ! udpsink port=5555 &
$ nc -kluw 1 127.0.0.1 -p 5555
no connection : Connection timed out
Mencoba dengan paket netcat-openbsd
yang memberikan:
$ nc -h
OpenBSD netcat (Debian patchlevel 1.105-7)
...
Sekarang nc
tidak menunjukkan apa-apa saat nada diputar (yang tampaknya agak lebih baik):
$ nc -kluw 1 127.0.0.1 5555
(nothing here)
Ok, buka dua terminal dan di terminal pertama jalankan:
nc -kluw 1 127.0.0.1 5555
Kemudian di terminal kedua jalankan:
nc -u 127.0.0.1 5555
Masukkan beberapa karakter pada stdin di terminal kedua dan tekan ENTER. Apakah Anda melihat karakter yang sama muncul di terminal pertama di stdout?
Ya itu berhasil. Bahkan membuatnya bekerja lintas Dockers:
$ docker run --rm --name nc1 -it my-debian-with-nc nc -kluw 1 0.0.0.0 5555
Hello
$ docker run --rm --link nc1:nc1 -it my-debian-with-nc nc -u nc1 5555
Hello
Jadi ini tidak menjelaskan mengapa nc
tidak menunjukkan apa-apa dengan gst-launch
. Namun saya menemukan bahwa saya perlu mengatur host=SOMETHING
agar berfungsi di seluruh wadah. Ini akan bermasalah. Sepertinya tidak bisa disiarkan. Tapi itu sesuatu yang bisa saya selesaikan setelah berfungsi setidaknya pada satu wadah.
Ah! Jika saya mengatur host=0.0.0.0
itu berfungsi!
Apakah Anda perlu mengirim data melalui jaringan? Saya berasumsi Anda hanya membutuhkan paket di mesin lokal. Menggunakan udpsink host=0.0.0.0 port=5555
akan menyiarkan paket di mana saja di jaringan Anda. Mungkin bukan yang Anda inginkan ...
Anda seharusnya dapat mengatakan host=127.0.0.1
alih-alih membatasi paket ke loopback lokal.
Saya menduga masalah sebenarnya adalah karena konfigurasi perutean default. Secara default, pada sistem Anda, paket keluar disalurkan ke antarmuka yang berbeda. Kemungkinan versi yang berbeda dari elemen gstreamer atau perbedaan dalam pengaturan perutean ip.
Dari wadah saya harus menggunakan 0.0.0.0 atau mungkin IP mesin. Pengaturan default tidak berfungsi bahkan pada satu mesin/wadah.
Tapi ya saya harus menggunakan jaringan sekarang karena praktik yang baik untuk menyimpan ncmpcpp dan mopidy dalam wadah Docker terpisah, yang berarti mereka berada di jaringan yang berbeda. Itu sangat bagus untuk keamanan dan isolasi dan semacamnya, tetapi itu menciptakan sedikit masalah:
klien ncmpcpp terhubung ke server MPD untuk meminta streaming musik, dan hanya setelah itu IP ncmpcpp diketahui dan paket UDP harus disiarkan ke IP-nya; tetapi saat ini IP di-hardcode dalam konfigurasi Mopidy.
Saya tidak punya solusi sekarang. Saya sedang memikirkan solusi:
--net=container:NAME_or_ID
yang menambahkan parameter lain untuk diketik pengguna, tetapi itu akan sangat menyederhanakan!Ada solusi untuk ketergantungan melingkar ini. Masih terasa seperti peretasan yang mengerikan tetapi pada akhirnya akan cukup mudah bagi pengguna untuk digunakan. Terima kasih liamw9534 untuk membantu terutama dengan perintah nc
yang saya asing dengannya.
FIFO berfungsi kecuali There is no output named "my_fifo"!
. Tampaknya namanya harus cocok dengan yang ada di mdp.conf
:
audio_output {
type "fifo"
name "my_fifo"
path "/tmp/mpd.fifo"
format "44100:16:2"
}
Saya dapat mencoba membagikan file FIFO jika saya tahu cara menambahkan output audio ini ke Mopidy. mual (visualizer-ony sederhana) tampaknya memiliki persyaratan yang sama.
Saya menemukan dokumentasi visualizer_output_name
:
Saya tidak yakin apa yang Anda maksud dengan mengatakan "pada jaringan yang berbeda". Jika Anda ingin mengisolasi lalu lintas audio ke mesin lokal maka Anda harus menggunakan 127.0.0.1
untuk udpsink
. Jika Anda memilih 0.0.0.0
maka itu akan mengarahkan paket menggunakan rute default yang kemungkinan berarti mengirim paket UDP melalui jaringan.... secara umum, saya akan mengatakan ini adalah ide yang buruk karena lalu lintas jaringan akan menghabiskan banyak waktu. banyak bandwidth yaitu, 2 x 16 x 44100 = 1,41 Mbps.
Secara teori, seharusnya dimungkinkan untuk mengonfigurasi nc
dengan 0.0.0.0
terlepas dari antarmuka jaringan mana yang digunakan oleh udpsink
. Ini akan mendengarkan di semua antarmuka jaringan. Tidak apa-apa selama Anda tidak menggunakan nomor port IP yang sama untuk layanan lain pada antarmuka jaringan yang berbeda.
Saya menggunakan saran terakhir saya dan meletakkan keduanya di jaringan yang sama. Jaringan itu tetap lokal, itu hanya pemisahan logis. Itu berfungsi untuk membangun FIFO, hanya ncmpcpp yang tidak menginginkannya (lihat respons saya sebelumnya, 2 di atas).
Ada ide tentang nama saluran itu? Atau jika ada cara lain untuk FIFO seperti mpd.conf
? Tampaknya tidak berfungsi sama sekali tanpa.
Saya pikir mpd.conf
hanya digunakan untuk konfigurasi daemon MPD. Dalam hal ini, itu seharusnya berlebihan karena mopidy adalah daemon MPD dan buruh pelabuhan Anda membuat file FIFO. Dalam hal ini, satu-satunya hal yang diperlukan adalah memastikan .ncmpcpp/config
cocok untuk klien, bukan?
Agak. Apa sebenarnya yang dilakukannya aku tidak tahu. Tetapi seperti yang Anda lihat visualizer_output_name = "my_fifo"
harus cocok dengan audio_output { name "my_fifo" }
. Saat ini ncmpcpp menunjukkan There is no output named "my_fifo"
. Deskripsi visualizer_output_name
hanya 5 posting di atas. Sepertinya itu benar-benar terhubung langsung entah bagaimana ke output untuk disinkronkan.
Saya tidak menggunakan semua ini tetapi bagi saya sepertinya visualizer_output_name
harus cocok dengan salah satu output MPD (protokol, bukan program) Anda (yaitu sesuatu dalam mpc outputs
). Mopidy saat ini tidak mengizinkan keluaran yang dapat dikonfigurasi dan hanya memiliki satu keluaran MPD: "Bungkam".
Anda mungkin ingin menghapus visualizer_output_name
, jika memungkinkan.
Mencoba tidak mengaturnya. Masih tidak ada visualisator yang terlihat. Saya ingin tahu tentang format output udpsink
: Seharusnya 44100:16:2
agar visualizer berfungsi ( ncmpcpp
atau nausea
).
Mencoba Mute
berjaga-jaga, mendapat pengalaman yang sangat lucu: Itu hanya mematikan suara, tanpa menampilkan kesalahan tetapi juga tanpa menampilkan visualisator. Atau lebih tepatnya itu menonaktifkan output Mute
.
Saya bertanya-tanya tentang di mana fungsi FFT dilakukan untuk visualizer.
Apakah dilakukan pada keluaran FIFO atau pada masukan ke FIFO? Anda
perlu memeriksa kode klien MPD untuk melihat cara menangani data FIFO.
Apakah ada cara untuk mendukung keduanya, hanya untuk pengujian, bahkan jika itu biasanya membuat file yang sangat besar.
Anda juga tidak perlu mendukung. Anda perlu mencari tahu di mana FFT berada
seharusnya dilakukan dan kemudian memilih pendekatan yang benar. Jika FFT adalah
dilakukan di visualizer maka itu hanya akan membuang-buang usaha untuk
menerapkannya lagi.
Pada 13 Mei 2015 pukul 15:09, Werner Beroux [email protected] menulis:
Apakah ada cara untuk mendukung keduanya, hanya untuk pengujian, meskipun itu akan
biasanya membuat file yang sangat besar.—
Balas email ini secara langsung atau lihat di GitHub
https://github.com/mopidy/mopidy/issues/775#issuecomment -101676033.
FFT dilakukan oleh visualizer dan memerlukan format audio khusus di FIFO agar berfungsi untuk itu. Referensi: http://git.2f30.org/nausea/about/
Bagus - maka tidak ada alasan untuk tidak bekerja! Sudahkah kamu melakukan
perbandingan berdampingan dari sistem yang menjalankan daemon MPD standar dengan a
klien ncmpcpp lokal? Apa yang terjadi jika Anda mengganti nama file FIFO di keduanya?
file konfigurasi? Apakah itu masih berfungsi? Hanya mencoba untuk melihat apakah a
jalur hardcoded ada di suatu tempat ...
Pada 13 Mei 2015 pukul 15:57, Werner Beroux [email protected] menulis:
FFT dilakukan oleh visualizer dan memerlukan format audio tertentu
di FIFO untuk bekerja untuk itu. Referensi: http://git.2f30.org/nausea/about/—
Balas email ini secara langsung atau lihat di GitHub
https://github.com/mopidy/mopidy/issues/775#issuecomment -101702624.
Komentar saya didasarkan dari sumber ncmpcpp .
Keluaran Mopidy's Mute dinonaktifkan secara default yaitu audio tidak dimatikan. Visualiser ncmpcpp akan mengambil output yang Anda berikan, menonaktifkannya (tidak ada efek) dan kemudian mengaktifkannya, sehingga mematikan audio. Bisa dibilang mereka hanya harus mengaktifkannya dua kali.
Audio berada dalam format yang salah adalah kemungkinan yang baik. Anda tidak memiliki apa pun di pipa gstreamer Anda untuk memastikannya benar tidak seperti yang dimiliki @adamcik dalam kodenya di atas.
Sulit untuk melihat bagaimana formatnya bisa menjadi masalah .... ini ditandatangani 16-bit
bilangan bulat. Hal terburuk yang bisa terjadi adalah Anda menukar saluran L/R?
Pada 13 Mei 2015 pukul 16:33, Nick Steel [email protected] menulis:
Komentar saya didasarkan dari sumber ncmpcpp
http://git.musicpd.org/cgit/mirror/ncmpcpp.git/tree/src/visualizer.cpp.Keluaran Mopidy's Mute dinonaktifkan secara default yaitu audio tidak dimatikan.
Visualiser ncmpcpp akan mengambil output yang Anda berikan, menonaktifkannya (tidak
efek) dan kemudian mengaktifkannya, sehingga mematikan audio. Bisa dibilang mereka harus
hanya beralih dua kali.Audio berada dalam format yang salah adalah kemungkinan yang baik. Kamu punya
tidak ada apa pun di pipa gstreamer Anda untuk memastikannya benar tidak seperti @adamcik
https://github.com/adamcik ada dalam kodenya di atas.—
Balas email ini secara langsung atau lihat di GitHub
https://github.com/mopidy/mopidy/issues/775#issuecomment -101716947.
Dan bahkan jika urutan byte salah, Anda mungkin hanya mengharapkan FFT
output untuk menghasilkan respons frekuensi yang salah ...... tetapi Anda masih akan melihat
sesuatu.
Pada 13 Mei 2015 pukul 16:37, Liam Wickins [email protected] menulis:
Sulit untuk melihat bagaimana formatnya bisa menjadi masalah .... ini ditandatangani 16-bit
bilangan bulat. Hal terburuk yang bisa terjadi adalah Anda menukar saluran L/R?Pada 13 Mei 2015 pukul 16:33, Nick Steel [email protected] menulis:
Komentar saya didasarkan dari sumber ncmpcpp
http://git.musicpd.org/cgit/mirror/ncmpcpp.git/tree/src/visualizer.cpp.Keluaran Mopidy's Mute dinonaktifkan secara default yaitu audio tidak dimatikan.
Visualiser ncmpcpp akan mengambil output yang Anda berikan, menonaktifkannya (tidak
efek) dan kemudian mengaktifkannya, sehingga mematikan audio. Bisa dibilang mereka harus
hanya beralih dua kali.Audio berada dalam format yang salah adalah kemungkinan yang baik. Kamu punya
tidak ada apa pun di pipa gstreamer Anda untuk memastikannya benar tidak seperti
@adamcik https://github.com/adamcik ada di kode nya di atas.—
Balas email ini secara langsung atau lihat di GitHub
https://github.com/mopidy/mopidy/issues/775#issuecomment -101716947.
yeh benar, jadi mungkin itu karena membiarkan keluaran Mute Mopidy diaktifkan berarti udpsink tidak akan mengirim data apa pun.
cat /tmp/mdp.fifo
(dibuat dari UDP seperti di atas) dengan benar menunjukkan aliran data yang konstan.
Saya melihat kode ncmpcpp visualizer:
O_RDONLY | O_NONBLOCK
Siapa pun juga dapat mencoba dari cabang saya (setelah menginstal Docker):
git clone https://github.com/wernight/docker-mopidy.git
cd docker-mopidy
git checkout udpsink
docker build -t mopidy .
cd ..
git clone https://github.com/wernight/docker-ncmpcpp.git
cd docker-ncmpcpp
git checkout udpsink
docker build -t ncmpcpp .
cd ..
# Remember to enable PulseAudio over network
docker run --name mopidy -d \
-e PULSE_SERVER=tcp:$(hostname -i):4713 \
-e PULSE_COOKIE_DATA=$(pax11publish -d | grep --color=never -Po '(?<=^Cookie: ).*') \
mopidy
docker run --rm -it --link mopidy:mopidy ncmpcpp --host mopidy
Harus menghabiskan cukup banyak waktu untuk berdebat tentang netcat karena -k tidak berhasil untuk saya, tetapi inilah yang saya buat untuk memulai ulang secara otomatis pada sakelar lagu:
while :; do yes $'\n' | nc -lu 127.0.0.1 5555 > /tmp/mopidy.fifo; done
pilihan lain seperti di atas pada dasarnya.
@ S0lll0s @wernight netcat -k juga tidak berfungsi untuk saya dan harus dimulai ulang setelah perubahan lagu. Sementara solusi Anda berfungsi, saya menemukan socat berfungsi lebih baik:
while :; do socat -d -d -T 1 -u UDP4-LISTEN:5555 OPEN:/tmp/mopidy.fifo; done
Untuk pengguna arch linux:
Untuk mendapatkan nc
dengan dukungan -k
Anda perlu menginstal paket openbsd-netcat
, tetapi itu tidak berhasil untuk saya juga, jadi coba gunakan skrip @SjRNMzU - Anda perlu paket socat
untuk menjalankannya.
@johnhamelink (saya kira Anda menjalankan Arch dari komentar Anda) Apakah Anda memiliki masalah dengan visualizer yang mencoba "mengejar ketinggalan" setelah Anda menjeda lagu menggunakan solusi socat
?
@theos-space Saya tidak bisa mengatakan bahwa saya telah memperhatikannya sendiri
Saya menggunakan Arch dan tidak dapat membuatnya bekerja dengan nc
(baik gnu
dan openbsd
) atau socat
. Selain itu, saya tidak dapat membaca dari gst-launch-1.0 ... udpsink port=5555
dengan nc -kluw 1 127.0.0.1 5555
, karena tidak mencetak apa pun ke layar.
Dapat mengonfirmasi bahwa ini berfungsi pada debian buster (4.11.6-1), mopidy 2.1.0-1, gstreamer1.0-tools 1.12.2-1, ncmpcpp 0.7.4-1+b3, socat 1.7.3.2-1:
mulai socat di startup sistem:
open_mpd_fifo() {
local fifo
readonly fifo='/tmp/mpd.fifo'
mkfifo "$fifo"
while :; do socat -d -d -T 1 -u UDP4-LISTEN:5555 OPEN:"$fifo"; done
}
mopidy [audio] conf (catatan Host harus ditentukan untuk udpsink):
[audio]
output = tee name=t ! queue ! autoaudiosink t. ! queue ! udpsink host=127.0.0.1 port=5555
ranisalt untuk Arch Anda harus mengkompilasi ncmpcpp dengan dukungan fifo periksa di sini: https://bbs.archlinux.org/viewtopic.php?id=99915
Inilah pengaturan Arch saya yang berfungsi, setelah membaca sisa utas + dokumen + halaman manual + berbagai macam blog. Saya menjalankan Mopidy sebagai layanan sistem dan mengirimkan audio ke layanan pengguna PulseAudio melalui TCP. Saya telah menyertakan beberapa anotasi tambahan yang diharapkan akan membantu mereka yang kurang berpengalaman.
Semua ini dari repo Arch resmi:
gstreamer 1.12.3-1
mopidy 2.1.0
ncmpcpp 0.8.1 # this had fifo support without any special compiling for me
openbsd-netcat 1.178_3-1 # gnu-netcat lacks the -k flag, as discussed above
pulseaudio 11.1
Aktifkan layanan sistem mopidy:
sudo systemctl enable mopidy.service
Ganti konfigurasi sistem mopidy dengan symlink ke konfigurasi pengguna untuk kemudahan pengeditan (opsional):
sudo ln -sf ~/.config/mopidy/mopidy.conf /etc/mopidy/mopidy.conf
Buat file fifo:
mkfifo "/tmp/mpd.fifo"
di ~/.config/mopidy/mopidy.conf
(atau /etc/mopidy/mopidy.conf
jika Anda tidak membuat symlink): Beri tahu mopidy untuk mengirim audio ke server pulseaudio yang mendengarkan di localhost dan ke sink UDP di localhost:5555
[audio]
output = tee name=t ! queue ! pulsesink server=127.0.0.1 t. ! queue ! udpsink host=127.0.0.1 port=5555
di ~/.ncmpcpp/config
: Beri tahu ncmpcpp di mana menemukan file fifo yang perlu didengarkan, dan beberapa pengaturan lain-lain
visualizer_fifo_path = "/tmp/mpd.fifo"
visualizer_output_name = "my_fifo"
visualizer_sync_interval = "30"
visualizer_in_stereo = "yes"
visualizer_type = "spectrum"
visualizer_look = "+|"
di ~/.config/pulse/default.pa
: Beri tahu pulseaudio untuk menerima audio melalui TCP dari localhost (pengaturannya mungkin sudah ada dan tidak dapat dikomentari)
load-module module-native-protocol-tcp auth-ip-acl=127.0.0.1
di ~/.zshrc
(juga harus bekerja di ~/.bashrc
): Buat fungsi pembungkus "nplayer" untuk menangani memulai dan menghentikan netcat
dengan ncmpcpp
:
nplayer () (nc -kluw 1 127.0.0.1 5555 > /tmp/mpd.fifo & trap "kill $!" EXIT; ncmpcpp)
Apa yang dilakukan ini:
netcat
di latar belakang untuk mendengarkan data audio yang dikirim ke wastafel UDP dan mengarahkannya ke fifo yang dibuat sebelumnya. Bendera:-k
terus mendengarkan setelah koneksi saat ini selesai-l
mengaktifkan mode mendengarkan-u
aktifkan mode UDP-w NUM
batas waktu koneksi idle setelah NUM detik (1 detik dalam kasus ini)netcat
ketika proses ncmpcpp
berakhir dan menyebabkan subkulit fungsi keluarncmpcpp
di latar depanSaya menjalankan mopidy di Manjaro (distro lengkung). Saya mengalami masalah dengan mendapatkan output apa pun melalui socat atau netcat. Saya dapat mengamati paket yang masuk dengan tcpdump:
sudo tcpdump -i lo -n udp port 5555 -XX
Butuh waktu lama dan saya tidak akan menemukan masalah tanpa @mosbasik .
Masalahnya adalah tidak memiliki host=127.0.0.1
setelah udpsink, mengapa ini bekerja untuk orang lain dan bukan saya, saya tidak tahu. Tetapi jika Anda tidak mendapatkan output apa pun, mungkin ini masalahnya. 2 ini bekerja untuk saya:
[audio]
output = tee name=t ! queue ! autoaudiosink server=127.0.0.1 t. ! queue ! udpsink host=127.0.0.1 port=5555↪
atau
[audio]
output = tee name=t ! queue ! autoaudiosink t. ! queue ! udpsink host=127.0.0.1 port=5555↪
Di samping catatan: Saya tidak bisa mendapatkan pulsesink
untuk bekerja jadi saya harus meninggalkannya di autoaudiosink
, yang juga telah saya atur sebelumnya. Namun visualizer tampaknya sangat lambat untuk beberapa alasan, saya tidak yakin apakah itu karena Berfungsi Sempurna setelah Reboot .. masih sedikit lambat. Dengan pulselink itu terus mengeluh tentang plugin gstreamer. Bahkan setelah (saya berasumsi) saya menginstal setiap paket plugin untuk gst di repo Arch resmi. Catatan autoaudiosink
flump3dec
dan mad
Keluaran
mopidy deps
Executable: /usr/bin/mopidy
Platform: Linux-4.16.7-1-MANJARO-x86_64-with-glibc2.2.5
Python: CPython 2.7.15 from /usr/lib/python2.7
Mopidy: 2.2.1 from /usr/lib/python2.7/site-packages
Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
requests>=2.0: 2.20.1 from /usr/lib/python2.7/site-packages
chardet>=3.0.2: 3.0.4 from /usr/lib/python2.7/site-packages
idna>=2.5: 2.7 from /usr/lib/python2.7/site-packages
urllib3>=1.21.1: 1.24.1 from /usr/lib/python2.7/site-packages
setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
tornado>=4.4: 5.1.1 from /usr/lib/python2.7/site-packages
futures: 3.2.0 from /usr/lib/python2.7/site-packages
singledispatch: 3.4.0.3 from /usr/lib/python2.7/site-packages
six: 1.11.0 from /usr/lib/python2.7/site-packages
backports_abc>=0.4: 0.5 from /usr/lib/python2.7/site-packages
Mopidy-Iris: 3.4.9 from /usr/lib/python2.7/site-packages
setuptools>=3.3: 40.5.0 from /usr/lib/python2.7/site-packages
pylast>=1.6.0: 2.3.0 from /usr/lib/python2.7/site-packages
six: 1.11.0 from /usr/lib/python2.7/site-packages
Mopidy>=2.0: 2.2.1 from /usr/lib/python2.7/site-packages
Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
requests>=2.0: 2.20.1 from /usr/lib/python2.7/site-packages
chardet>=3.0.2: 3.0.4 from /usr/lib/python2.7/site-packages
idna>=2.5: 2.7 from /usr/lib/python2.7/site-packages
urllib3>=1.21.1: 1.24.1 from /usr/lib/python2.7/site-packages
setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
tornado>=4.4: 5.1.1 from /usr/lib/python2.7/site-packages
futures: 3.2.0 from /usr/lib/python2.7/site-packages
singledispatch: 3.4.0.3 from /usr/lib/python2.7/site-packages
six: 1.11.0 from /usr/lib/python2.7/site-packages
backports_abc>=0.4: 0.5 from /usr/lib/python2.7/site-packages
Mopidy-Local-Images>=1.0: 1.0.0 from /usr/lib/python2.7/site-packages
setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
Mopidy>=1.1: 2.2.1 from /usr/lib/python2.7/site-packages
Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
requests>=2.0: 2.20.1 from /usr/lib/python2.7/site-packages
chardet>=3.0.2: 3.0.4 from /usr/lib/python2.7/site-packages
idna>=2.5: 2.7 from /usr/lib/python2.7/site-packages
urllib3>=1.21.1: 1.24.1 from /usr/lib/python2.7/site-packages
setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
tornado>=4.4: 5.1.1 from /usr/lib/python2.7/site-packages
futures: 3.2.0 from /usr/lib/python2.7/site-packages
singledispatch: 3.4.0.3 from /usr/lib/python2.7/site-packages
six: 1.11.0 from /usr/lib/python2.7/site-packages
backports_abc>=0.4: 0.5 from /usr/lib/python2.7/site-packages
Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
uritools>=1.0: 1.0.1 from /usr/lib/python2.7/site-packages
ipaddress>=1.0.6: 1.0.22 from /usr/lib/python2.7/site-packages
ipaddress>=1.0.6: 1.0.22 from /usr/lib/python2.7/site-packages
ConfigObj>=5.0.6: 5.0.6 from /usr/lib/python2.7/site-packages
raven>=6.1.0: 6.9.0 from /usr/lib/python2.7/site-packages
contextlib2: 0.5.5 from /usr/lib/python2.7/site-packages
Mopidy-Local-Images: 1.0.0 from /usr/lib/python2.7/site-packages
setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
Mopidy>=1.1: 2.2.1 from /usr/lib/python2.7/site-packages
Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
requests>=2.0: 2.20.1 from /usr/lib/python2.7/site-packages
chardet>=3.0.2: 3.0.4 from /usr/lib/python2.7/site-packages
idna>=2.5: 2.7 from /usr/lib/python2.7/site-packages
urllib3>=1.21.1: 1.24.1 from /usr/lib/python2.7/site-packages
setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
tornado>=4.4: 5.1.1 from /usr/lib/python2.7/site-packages
futures: 3.2.0 from /usr/lib/python2.7/site-packages
singledispatch: 3.4.0.3 from /usr/lib/python2.7/site-packages
six: 1.11.0 from /usr/lib/python2.7/site-packages
backports_abc>=0.4: 0.5 from /usr/lib/python2.7/site-packages
Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
uritools>=1.0: 1.0.1 from /usr/lib/python2.7/site-packages
ipaddress>=1.0.6: 1.0.22 from /usr/lib/python2.7/site-packages
ipaddress>=1.0.6: 1.0.22 from /usr/lib/python2.7/site-packages
Mopidy-Spotify-Tunigo: 1.0.0 from /usr/lib/python2.7/site-packages
Mopidy>=0.19.0: 2.2.1 from /usr/lib/python2.7/site-packages
Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
requests>=2.0: 2.20.1 from /usr/lib/python2.7/site-packages
chardet>=3.0.2: 3.0.4 from /usr/lib/python2.7/site-packages
idna>=2.5: 2.7 from /usr/lib/python2.7/site-packages
urllib3>=1.21.1: 1.24.1 from /usr/lib/python2.7/site-packages
setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
tornado>=4.4: 5.1.1 from /usr/lib/python2.7/site-packages
futures: 3.2.0 from /usr/lib/python2.7/site-packages
singledispatch: 3.4.0.3 from /usr/lib/python2.7/site-packages
six: 1.11.0 from /usr/lib/python2.7/site-packages
backports_abc>=0.4: 0.5 from /usr/lib/python2.7/site-packages
Mopidy-Spotify>=1.2.0: 3.1.0 from /usr/lib/python2.7/site-packages
Mopidy>=2.0: 2.2.1 from /usr/lib/python2.7/site-packages
Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
requests>=2.0: 2.20.1 from /usr/lib/python2.7/site-packages
chardet>=3.0.2: 3.0.4 from /usr/lib/python2.7/site-packages
idna>=2.5: 2.7 from /usr/lib/python2.7/site-packages
urllib3>=1.21.1: 1.24.1 from /usr/lib/python2.7/site-packages
setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
tornado>=4.4: 5.1.1 from /usr/lib/python2.7/site-packages
futures: 3.2.0 from /usr/lib/python2.7/site-packages
singledispatch: 3.4.0.3 from /usr/lib/python2.7/site-packages
six: 1.11.0 from /usr/lib/python2.7/site-packages
backports_abc>=0.4: 0.5 from /usr/lib/python2.7/site-packages
Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
pyspotify>=2.0.5: 2.0.5 from /usr/lib/python2.7/site-packages
cffi>=1.0.0: 1.11.5 from /usr/lib/python2.7/site-packages
pycparser: 2.19 from /usr/lib/python2.7/site-packages
requests>=2.0: 2.20.1 from /usr/lib/python2.7/site-packages
chardet>=3.0.2: 3.0.4 from /usr/lib/python2.7/site-packages
idna>=2.5: 2.7 from /usr/lib/python2.7/site-packages
urllib3>=1.21.1: 1.24.1 from /usr/lib/python2.7/site-packages
setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
tunigo>=1.0.0: 1.0.0 from /usr/lib/python2.7/site-packages
requests>=2.0.0: 2.20.1 from /usr/lib/python2.7/site-packages
chardet>=3.0.2: 3.0.4 from /usr/lib/python2.7/site-packages
idna>=2.5: 2.7 from /usr/lib/python2.7/site-packages
urllib3>=1.21.1: 1.24.1 from /usr/lib/python2.7/site-packages
setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
Mopidy-SoundCloud: 2.1.0 from /usr/lib/python2.7/site-packages
setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
Mopidy>=1.0: 2.2.1 from /usr/lib/python2.7/site-packages
Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
requests>=2.0: 2.20.1 from /usr/lib/python2.7/site-packages
chardet>=3.0.2: 3.0.4 from /usr/lib/python2.7/site-packages
idna>=2.5: 2.7 from /usr/lib/python2.7/site-packages
urllib3>=1.21.1: 1.24.1 from /usr/lib/python2.7/site-packages
setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
tornado>=4.4: 5.1.1 from /usr/lib/python2.7/site-packages
futures: 3.2.0 from /usr/lib/python2.7/site-packages
singledispatch: 3.4.0.3 from /usr/lib/python2.7/site-packages
six: 1.11.0 from /usr/lib/python2.7/site-packages
backports_abc>=0.4: 0.5 from /usr/lib/python2.7/site-packages
Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
requests>=2.0.0: 2.20.1 from /usr/lib/python2.7/site-packages
chardet>=3.0.2: 3.0.4 from /usr/lib/python2.7/site-packages
idna>=2.5: 2.7 from /usr/lib/python2.7/site-packages
urllib3>=1.21.1: 1.24.1 from /usr/lib/python2.7/site-packages
Mopidy-Spotify: 3.1.0 from /usr/lib/python2.7/site-packages
Mopidy>=2.0: 2.2.1 from /usr/lib/python2.7/site-packages
Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
requests>=2.0: 2.20.1 from /usr/lib/python2.7/site-packages
chardet>=3.0.2: 3.0.4 from /usr/lib/python2.7/site-packages
idna>=2.5: 2.7 from /usr/lib/python2.7/site-packages
urllib3>=1.21.1: 1.24.1 from /usr/lib/python2.7/site-packages
setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
tornado>=4.4: 5.1.1 from /usr/lib/python2.7/site-packages
futures: 3.2.0 from /usr/lib/python2.7/site-packages
singledispatch: 3.4.0.3 from /usr/lib/python2.7/site-packages
six: 1.11.0 from /usr/lib/python2.7/site-packages
backports_abc>=0.4: 0.5 from /usr/lib/python2.7/site-packages
Pykka>=1.1: 1.2.1 from /usr/lib/python2.7/site-packages
pyspotify>=2.0.5: 2.0.5 from /usr/lib/python2.7/site-packages
cffi>=1.0.0: 1.11.5 from /usr/lib/python2.7/site-packages
pycparser: 2.19 from /usr/lib/python2.7/site-packages
requests>=2.0: 2.20.1 from /usr/lib/python2.7/site-packages
chardet>=3.0.2: 3.0.4 from /usr/lib/python2.7/site-packages
idna>=2.5: 2.7 from /usr/lib/python2.7/site-packages
urllib3>=1.21.1: 1.24.1 from /usr/lib/python2.7/site-packages
setuptools: 40.5.0 from /usr/lib/python2.7/site-packages
GStreamer: 1.14.4.0 from /usr/lib/python2.7/site-packages/gi
Detailed information:
Python wrapper: python-gi 3.30.2
Relevant elements:
Found:
uridecodebin
souphttpsrc
appsrc
alsasink
osssink
oss4sink
pulsesink
id3demux
id3v2mux
lamemp3enc
mpegaudioparse
mpg123audiodec
vorbisdec
vorbisenc
vorbisparse
oggdemux
oggmux
oggparse
flacdec
flacparse
shout2send
Not found:
flump3dec
mad
Saya mengalami masalah saat mencoba membuat udpsink bekerja dengan Mopidy dan semua klien ncmpcpp jarak jauh. Mopidy diatur dengan MacVLAN di lingkungan buruh pelabuhan. Saya berhasil melihat port pada wadah.
nc -vz -u mopidy.lan 5555
found 0 associations
found 1 connections:
1: flags=82<CONNECTED,PREFERRED>
outif (null)
src x.x.x.x port 50630
dst x.x.x.x port 5555
rank info not available
Connection to mopidy.lan port 5555 [udp/personal-agent] succeeded!
Saat ini Mopidy menggunakan sedikit konfigurasi berikut:
[audio]
mixer = software
mixer_volume = 100
output = tee name=t ! queue ! lamemp3enc ! shout2send async=false mount=mopidy ip="mopidy.lan" port=8092 username="some username" password="some password" t. ! queue ! udpsink host=0.0.0.0 port=5555
Adakah pemikiran tentang bagaimana saya bisa menggunakan netcat agar berhasil memasukkan data mentah ke mpd.fifo? Menggunakan yang berikut ini tidak berfungsi, saya pikir karena saya menggunakan netcat dengan cara yang salah. Beberapa penelitian belum memberikan jawaban apa pun, jadi semoga seseorang dapat mengarahkan saya ke arah yang benar.
#!/bin/bash
mkfifo /tmp/mpd.fifo
while :; do yes $'\n' | nc -lu mopidy 5555 > /tmp/mpd.fifo; done
Saya mendapatkan kesalahan berikut:
nc: Can't assign requested address
Adakah pemikiran tentang bagaimana saya bisa membuat ini berfungsi?
Bersulang!
FYI Saya menambahkan dukungan untuk udpsink
gstreamer ke ncmpcpp jadi sekarang dapat digunakan secara langsung tanpa peretasan fifo.
Lihat https://github.com/ncmpcpp/ncmpcpp/commit/fb886f687014e22b2fe1477da855be5201063ea8 untuk detail lebih lanjut.
Di bawah teaser. Ini adalah mopidy + mopidy-spotify + mopidy-mpd + ncmpcpp.
https://user-images.githubusercontent.com/387658/102549720-e41bf980-40bc-11eb-8127-70889011e52f.mp4
@arybczak Luar biasa! Anda harus memposting ini ke https://discourse.mopidy.com/c/show-and-tell/9
@adamcik Bukankah ini berarti bahwa masalah hampir 7 tahun ini "tidak digunakan lagi" demi resolusi yang lebih baik untuk masalah dunia nyata yang memicunya (mendukung visualisasi di ncmpcpp)?
@pspeder , apa sebenarnya yang anda maksud? Apakah ada masalah dengan menggunakan https://github.com/mopidy/mopidy/issues/775#issuecomment -747725806 ?
@kingosticks Hanya menyarankan agar masalah ini ditutup
Saya setuju dengan itu.
Komentar yang paling membantu
FYI Saya menambahkan dukungan untuk
udpsink
gstreamer ke ncmpcpp jadi sekarang dapat digunakan secara langsung tanpa peretasan fifo.Lihat https://github.com/ncmpcpp/ncmpcpp/commit/fb886f687014e22b2fe1477da855be5201063ea8 untuk detail lebih lanjut.
Di bawah teaser. Ini adalah mopidy + mopidy-spotify + mopidy-mpd + ncmpcpp.
https://user-images.githubusercontent.com/387658/102549720-e41bf980-40bc-11eb-8127-70889011e52f.mp4