Mopidy: Mopidy secara acak membawa judul lagu sebelumnya ke lagu berikutnya

Dibuat pada 15 Jan 2020  ·  11Komentar  ·  Sumber: mopidy/mopidy

Hai,

Setelah membiarkan Mopidy menyelesaikan trek dan pergi ke trek berikutnya, judul trek tidak diperbarui dengan benar, sehingga trek berikutnya memiliki judul yang sama dengan yang sebelumnya. Masalah ini perlahan-lahan tampaknya menjadi lebih buruk, dan seluruh daftar putar menjadi miring.
Untuk catatan; audio diputar dengan baik, artis diperbarui dengan baik, nomor trek diperbarui dengan baik, dan begitu juga panjang dan kemajuan trek.

Langkah-langkah untuk mereproduksi:

  1. Isi daftar putar dengan beberapa lagu,
  2. Mainkan satu, tanpa melewatkan atau mencari (seperti yang terjadi saat Anda membiarkan trek diputar sebentar)
  3. Biarkan trek selesai, dan perhatikan judulnya tidak berubah saat pindah ke trek berikutnya.
    Saya menjalankan Arch Linux, dengan versi Mopidy berikut dan ekstensinya:

  4. mopidy 3.0.1-2

  5. mopidy-lokal 3.1.0-1
  6. mopidy-mpd 3.0.0-1
  7. mopidy-soundcloud 3.0.0-1
    Ini semua diperbarui ke versi terbaru yang diketahui di Arch dan AUR.

Saya telah berurusan dengan ini sejak memperbarui ke Mopidy 3 di suatu tempat tahun lalu, sedangkan 2 tidak pernah memiliki perilaku ini.
Masalah ini tampaknya mirip dengan #1528 https://github.com/mopidy/mopidy/issues/1528 , namun yang satu ini berbicara tentang Mopidy 2.

Trek yang ditunjukkan di bawah ini dimainkan dari mopidy-local.

Di ncmpcpp:
Daftar lagu salah https://camo.githubusercontent.com/fa91261107d7af341374ef03a1ab2a774e813e9f/68747470733a2f2f692e696d6775722e636f6d2f5547674830477a2e706e67

Dan dalam ekstensi MPD polybar:
Polybar MPD https://camo.githubusercontent.com/5b6207e174cd0cce829d2164aba91868c451d50b/68747470733a2f2f692e696d6775722e636f6d2f374d5a69367a4a2e706e67

Ini adalah daftar lagu yang sebenarnya:
Daftar lagu yang benar https://camo.githubusercontent.com/c99c327c9505f563f9f96a92b2b54df2a4f02a28/68747470733a2f2f692e696d6775722e636f6d2f384d53666665422e706e67

Dengan album yang berbeda, saya mencoba menangkap log dengan mopidy -v saat itu terjadi.
Masuk https://camo.githubusercontent.com/76bb6011e2138c5ca800ac2b7d18618e46a8ca75/68747470733a2f2f692e696d6775722e636f6d2f6d5339375a49702e706e67

DEBUG 2020-01-15 14:07:06,594 [79919:MainThread] mopidy.audio.actor
Peristiwa audio: tags_changed(tags=['minimum-bitrate', 'bitrate'])
DEBUG 2020-01-15 14:07:06,594 [79919:MainThread] mopidy.listener
Mengirim tags_changed ke AudioListener: {'tags': ['minimum-bitrate', 'bitrate']}
DEBUG 2020-01-15 14:07:06,644 [79919:MpdSession-11] mopidy_mpd.session
Permintaan dari [:: ffff:127.0.0.1 ]:34768: nodle
DEBUG 2020-01-15 14:07:06,644 [79919:MpdSession-11] mopidy_mpd.session
Tanggapan untuk [:: ffff:127.0.0.1 ]:34768: OK
DEBUG 2020-01-15 14:07:06,644 [79919:MpdSession-11] mopidy_mpd.session
Permintaan dari [:: ffff:127.0.0.1 ]:34768: status
DEBUG 2020-01-15 14:07:06,647 [79919:MpdSession-11] mopidy_mpd.session
Tanggapan untuk [:: ffff:127.0.0.1 ]:34768:
volume: 100
ulangi: 0
acak: 0
tunggal: 0
konsumsi: 0
daftar putar: 5
panjang putar: 8
xfade: 0
negara: bermain
lagu: 2
lagu: 12
lagu berikutnya: 3
lagu berikutnya: 13
waktu: 1:270
berlalu: 1.412
kecepatan bit: 0
oke
DEBUG 2020-01-15 14:07:06,648 [79919:MpdSession-11] mopidy_mpd.session
Permintaan dari [:: ffff:127.0.0.1 ]:34768: idle
DEBUG 2020-01-15 14:07:06,656 [79919:MainThread] mopidy.audio.gst
Mendapat TAG pesan bus: tags={'artist': ['Ben Lukas Boysen'], 'title': ['Sleepers Beat Theme'], 'track-number': [3], 'track-count': [8 ], 'album': ['Spells'], 'datetime': ['2016'], 'album-artist': ['Ben Lukas Boysen'], 'organization': ['Erased Tapes Records'], 'genre ': ['Ambien/Klasik Modern'], 'isrc': ['ERATP085'], 'gambar':
Ada banyak noise dalam output debug (dari gambar) dan dengan cepat melampaui ukuran buffer terminal saya.
Jika ada informasi tambahan yang diperlukan, tolong beri tahu saya dan saya akan melakukan apa yang saya bisa.

Terima kasih.

C-bug

Komentar yang paling membantu

Lebih baik terlambat daripada tidak sama sekali, pembaruan tag ulang dan semua peristiwa ini menjadi rumit karena semuanya asinkron. Dan sudah lama sejak saya melihat hal ini secara detail. Tapi ini dia dengan diagram pipa yang sangat disederhanakan:

[SRC] --> [DECODER] --> [SINK]
  • about-to-finish terpicu ketika SRC kehabisan data
  • Pembaruan tag mungkin masih mengalir melalui node perantara dalam pipeline pada saat ini
  • Audio untuk trek saat ini masih mengalir pada tahap ini
  • Untuk kasus seperti Icecast streaming, tag ini mencapai SINK adalah saat mereka ditayangkan (saya pikir ini adalah tempat kami mengambilnya juga)
  • STREAM_START - Sejujurnya saya tidak ingat apakah kita mendapatkan acara ini ketika mencapai SINK atau ketika itu terjadi pada SRC - ini mungkin kunci untuk memperbaikinya. Melihat https://gstreamer.freedesktop.org/documentation/gstreamer/gstmessage.html?gi-language=c#gst_message_new_stream_start tampaknya pipeline/bin mungkin meneruskan ini ke bus pesan setelah semua sink melihatnya.

Jadi saya pikir kita dapat memiliki kasus di mana ada tag yang bermakna di antara about-to-finish dan trek berikutnya dimulai. Jika memperbaiki ini sulit, kami dapat mempertimbangkan untuk mengabaikannya, tetapi menambahkan TODO dalam kode dan mengajukan bug lain untuk ditindaklanjuti, jika itu kurang rusak daripada keadaan saat ini?

Semua 11 komentar

Ini terlihat terkait dengan mopidy/mopidy-mpd#23.

Tidak masalah! Kedua laporan itu datang dalam beberapa jam, dan kami masih tidak tahu komponen apa yang menjadi penyebab utama.

Saya akan mengatakan itu mungkin ada hubungannya dengan https://github.com/mopidy/mopidy/pull/1751 jika bukan karena pernyataan yang mengatakan masalah ini tidak ada di Mopidy 2.x.

Punya masalah yang sama yang saya yakini, tetapi saya sudah mengalami masalah ini selama berbulan-bulan. Juga Arch di sini, semuanya diperbarui.

Mopidy mempertahankan judul lagu sebelumnya sebagai saat ini. Yaitu trek selesai - ncmpcpp dan ekstensi polybar menunjukkan nama trek sebelumnya (hanya sebagai "Eminem - In Too Deep"). Sementara mpc menunjukkan "Godzilla: Eminem - In Too Deep", di mana Godzilla adalah lagu saat ini dan In Too Deep adalah yang sebelumnya. Itu agak aneh, salah satunya adalah bug tetapi mengapa mpc menunjukkan keduanya?

Ini adalah kombinasi dari hal-hal yang terungkap oleh https://github.com/mopidy/mopidy/pull/1751 dan juga hadir di Mopidy v2.3.0.

Dua lagu pertama dalam playlist saya adalah (1) 'Set Guitars To Kill' diikuti oleh (2) 'A Little Bit Of Solidarity Goes A Long Way'. Log di bawah ini menunjukkan bahwa setelah trek berubah dari (1) ke (2), kami mendapatkan peristiwa perubahan tag tetapi akhirnya kami mengirim stream_title_changed menggunakan data trek lama.

Dummy-21 DEBUG    2020-01-17 23:58:44,257 Got about-to-finish event.
Dummy-21 DEBUG    2020-01-17 23:58:44,257 Running about-to-finish callback.
LocalBackend-8 DEBUG    2020-01-17 23:58:44,259 Backend translated URI from local:track:And%20So%20I%20Watch%20You%20From%20Afar%20-%20Self%20Titled%20%282009%29/02-and_so_i_watch_you_from_afar-a_little_bit_of_solidarity_goes_a_long_way.mp3 to file:///home/nick/Music/And%20So%20I%20Watch%20You%20From%20Afar%20-%20Self%20Titled%20%282009%29/02-and_so_i_watch_you_from_afar-a_little_bit_of_solidarity_goes_a_long_way.mp3
Dummy-21 DEBUG    2020-01-17 23:58:44,262 Got source-setup signal: element=GstFileSrc
MainThread DEBUG    2020-01-17 23:58:44,574 Got TAG bus message: tags={'title': ['Set Guitars To Kill'], 'artist': ['And So I Watch You From Afar'], 'album': ['Self Titled'], 'datetime': ['2009-04-13'], 'track-number': [1], 'genre': ['Instrumental Rock'], 'container-format': ['ID3 tag'], 'private-id3v2-frame': [b'TLAN\x00\x00\x00\x04\x00\x00\x00eng', b'TXXX\x00\x00\x00\x14\x00\x00\x00Rip date\x002009-04-14', b'TXXX\x00\x00\x00\n\x00\x00\x00Source\x00CD', b'TXXX\x00\x00\x00\x1c\x00\x00\x00Release type\x00Normal release'], 'track-count': [11], 'encoder': ['LAME 3.97 (-V2 --vbr-new)'], 'publisher': ['Smalltown America'], 'private-data': [b'\x02\x00\xfb1K\x00'], 'has-crc': [False], 'channel-mode': ['joint-stereo'], 'audio-codec': ['MPEG-1 Layer 3 (MP3)'], 'minimum-bitrate': [95856], 'maximum-bitrate': [319725], 'bitrate': [252000]}
MainThread DEBUG    2020-01-17 23:58:44,853 Got TAG bus message: tags={'title': ['Set Guitars To Kill'], 'artist': ['And So I Watch You From Afar'], 'album': ['Self Titled'], 'datetime': ['2009-04-13'], 'track-number': [1], 'genre': ['Instrumental Rock'], 'container-format': ['ID3 tag'], 'private-id3v2-frame': [b'TLAN\x00\x00\x00\x04\x00\x00\x00eng', b'TXXX\x00\x00\x00\x14\x00\x00\x00Rip date\x002009-04-14', b'TXXX\x00\x00\x00\n\x00\x00\x00Source\x00CD', b'TXXX\x00\x00\x00\x1c\x00\x00\x00Release type\x00Normal release'], 'track-count': [11], 'encoder': ['LAME 3.97 (-V2 --vbr-new)'], 'publisher': ['Smalltown America'], 'private-data': [b'\x02\x00\xfb1K\x00'], 'has-crc': [False], 'channel-mode': ['joint-stereo'], 'audio-codec': ['MPEG-1 Layer 3 (MP3)'], 'minimum-bitrate': [79931], 'maximum-bitrate': [319725], 'bitrate': [252000]}
MainThread DEBUG    2020-01-17 23:58:45,062 Got TAG bus message: tags={'title': ['Set Guitars To Kill'], 'artist': ['And So I Watch You From Afar'], 'album': ['Self Titled'], 'datetime': ['2009-04-13'], 'track-number': [1], 'genre': ['Instrumental Rock'], 'container-format': ['ID3 tag'], 'private-id3v2-frame': [b'TLAN\x00\x00\x00\x04\x00\x00\x00eng', b'TXXX\x00\x00\x00\x14\x00\x00\x00Rip date\x002009-04-14', b'TXXX\x00\x00\x00\n\x00\x00\x00Source\x00CD', b'TXXX\x00\x00\x00\x1c\x00\x00\x00Release type\x00Normal release'], 'track-count': [11], 'encoder': ['LAME 3.97 (-V2 --vbr-new)'], 'publisher': ['Smalltown America'], 'private-data': [b'\x02\x00\xfb1K\x00'], 'has-crc': [False], 'channel-mode': ['joint-stereo'], 'audio-codec': ['MPEG-1 Layer 3 (MP3)'], 'minimum-bitrate': [63700], 'maximum-bitrate': [319725], 'bitrate': [252000]}
MainThread DEBUG    2020-01-17 23:58:45,342 Got TAG bus message: tags={'title': ['Set Guitars To Kill'], 'artist': ['And So I Watch You From Afar'], 'album': ['Self Titled'], 'datetime': ['2009-04-13'], 'track-number': [1], 'genre': ['Instrumental Rock'], 'container-format': ['ID3 tag'], 'private-id3v2-frame': [b'TLAN\x00\x00\x00\x04\x00\x00\x00eng', b'TXXX\x00\x00\x00\x14\x00\x00\x00Rip date\x002009-04-14', b'TXXX\x00\x00\x00\n\x00\x00\x00Source\x00CD', b'TXXX\x00\x00\x00\x1c\x00\x00\x00Release type\x00Normal release'], 'track-count': [11], 'encoder': ['LAME 3.97 (-V2 --vbr-new)'], 'publisher': ['Smalltown America'], 'private-data': [b'\x02\x00\xfb1K\x00'], 'has-crc': [False], 'channel-mode': ['joint-stereo'], 'audio-codec': ['MPEG-1 Layer 3 (MP3)'], 'minimum-bitrate': [55737], 'maximum-bitrate': [319725], 'bitrate': [252000]}
MainThread DEBUG    2020-01-17 23:58:45,481 Got TAG bus message: tags={'title': ['Set Guitars To Kill'], 'artist': ['And So I Watch You From Afar'], 'album': ['Self Titled'], 'datetime': ['2009-04-13'], 'track-number': [1], 'genre': ['Instrumental Rock'], 'container-format': ['ID3 tag'], 'private-id3v2-frame': [b'TLAN\x00\x00\x00\x04\x00\x00\x00eng', b'TXXX\x00\x00\x00\x14\x00\x00\x00Rip date\x002009-04-14', b'TXXX\x00\x00\x00\n\x00\x00\x00Source\x00CD', b'TXXX\x00\x00\x00\x1c\x00\x00\x00Release type\x00Normal release'], 'track-count': [11], 'encoder': ['LAME 3.97 (-V2 --vbr-new)'], 'publisher': ['Smalltown America'], 'private-data': [b'\x02\x00\xfb1K\x00'], 'has-crc': [False], 'channel-mode': ['joint-stereo'], 'audio-codec': ['MPEG-1 Layer 3 (MP3)'], 'minimum-bitrate': [47775], 'maximum-bitrate': [319725], 'bitrate': [252000]}
MainThread DEBUG    2020-01-17 23:58:46,251 Got TAG bus message: tags={'title': ['Set Guitars To Kill'], 'artist': ['And So I Watch You From Afar'], 'album': ['Self Titled'], 'datetime': ['2009-04-13'], 'track-number': [1], 'genre': ['Instrumental Rock'], 'container-format': ['ID3 tag'], 'private-id3v2-frame': [b'TLAN\x00\x00\x00\x04\x00\x00\x00eng', b'TXXX\x00\x00\x00\x14\x00\x00\x00Rip date\x002009-04-14', b'TXXX\x00\x00\x00\n\x00\x00\x00Source\x00CD', b'TXXX\x00\x00\x00\x1c\x00\x00\x00Release type\x00Normal release'], 'track-count': [11], 'encoder': ['LAME 3.97 (-V2 --vbr-new)'], 'publisher': ['Smalltown America'], 'private-data': [b'\x02\x00\xfb1K\x00'], 'has-crc': [False], 'channel-mode': ['joint-stereo'], 'audio-codec': ['MPEG-1 Layer 3 (MP3)'], 'minimum-bitrate': [31850], 'maximum-bitrate': [319725], 'bitrate': [252000]}
MainThread DEBUG    2020-01-17 23:58:47,429 Got STREAM_START bus message
Dummy-20 DEBUG    2020-01-17 23:58:47,430 Got SEGMENT pad event: rate=1.0 format=time start=0 stop=18446744073709551615 position=0
MainThread DEBUG    2020-01-17 23:58:47,431 Audio event: stream_changed(uri='file:///home/nick/Music/And%20So%20I%20Watch%20You%20From%20Afar%20-%20Self%20Titled%20%282009%29/02-and_so_i_watch_you_from_afar-a_little_bit_of_solidarity_goes_a_long_way.mp3')
Dummy-20 DEBUG    2020-01-17 23:58:47,431 Audio event: position_changed(position=0)
MainThread DEBUG    2020-01-17 23:58:47,432 Sending stream_changed to AudioListener: {'uri': 'file:///home/nick/Music/And%20So%20I%20Watch%20You%20From%20Afar%20-%20Self%20Titled%20%282009%29/02-and_so_i_watch_you_from_afar-a_little_bit_of_solidarity_goes_a_long_way.mp3'}
Dummy-20 DEBUG    2020-01-17 23:58:47,432 Sending position_changed to AudioListener: {'position': 0}
MainThread DEBUG    2020-01-17 23:58:47,433 Audio event: tags_changed(tags=dict_keys(['title', 'artist', 'album', 'datetime', 'track-number', 'genre', 'container-format', 'private-id3v2-frame', 'track-count', 'encoder', 'publisher', 'private-data', 'has-crc', 'channel-mode', 'audio-codec', 'minimum-bitrate', 'maximum-bitrate', 'bitrate']))
Core-10 DEBUG    2020-01-17 23:58:47,434 Triggering track playback ended event
Core-10 DEBUG    2020-01-17 23:58:47,437 Sending track_playback_ended to CoreListener: {'tl_track': TlTrack(tlid=10, track=Track(album=Album(date='2009-04-13', name='Self Titled', num_tracks=11, uri='local:album:md5:5bdacb653bbd94bd6d1cbc68dc1854da'), artists=[Artist(name='And So I Watch You From Afar', uri='local:artist:md5:f69d2a608336108f1d645744c63d6dea')], date='2009-04-13', genre='Instrumental Rock', last_modified=1310599762000, length=329639, name='Set Guitars To Kill', track_no=1, uri='local:track:And%20So%20I%20Watch%20You%20From%20Afar%20-%20Self%20Titled%20%282009%29/01-and_so_i_watch_you_from_afar-set_guitars_to_kill.mp3')), 'time_position': 329639}
Core-10 DEBUG    2020-01-17 23:58:47,438 Changing state: playing -> playing
Core-10 DEBUG    2020-01-17 23:58:47,439 Triggering playback state change event
MainThread DEBUG    2020-01-17 23:58:47,435 Sending tags_changed to AudioListener: {'tags': dict_keys(['title', 'artist', 'album', 'datetime', 'track-number', 'genre', 'container-format', 'private-id3v2-frame', 'track-count', 'encoder', 'publisher', 'private-data', 'has-crc', 'channel-mode', 'audio-codec', 'minimum-bitrate', 'maximum-bitrate', 'bitrate'])}
Core-10 DEBUG    2020-01-17 23:58:47,440 Sending playback_state_changed to CoreListener: {'old_state': 'playing', 'new_state': 'playing'}
Core-10 DEBUG    2020-01-17 23:58:47,451 Triggering track playback started event
Core-10 DEBUG    2020-01-17 23:58:47,453 Sending track_playback_started to CoreListener: {'tl_track': TlTrack(tlid=11, track=Track(album=Album(date='2009-04-13', name='Self Titled', num_tracks=11, uri='local:album:md5:5bdacb653bbd94bd6d1cbc68dc1854da'), artists=[Artist(name='And So I Watch You From Afar', uri='local:artist:md5:f69d2a608336108f1d645744c63d6dea')], date='2009-04-13', genre='Instrumental Rock', last_modified=1310599762000, length=205871, name='A Little Bit Of Solidarity Goes A Long Way', track_no=2, uri='local:track:And%20So%20I%20Watch%20You%20From%20Afar%20-%20Self%20Titled%20%282009%29/02-and_so_i_watch_you_from_afar-a_little_bit_of_solidarity_goes_a_long_way.mp3'))}
MpdFrontend-13 DEBUG    2020-01-17 23:58:47,452 Sending player to MpdSession: {}
Core-10 DEBUG    2020-01-17 23:58:47,458 Sending stream_title_changed to CoreListener: {'title': 'Set Guitars To Kill'}

Ini karena panggilan kita ke self.audio.get_current_tags().get() untuk mendapatkan nilai tag baru untuk (2), belum diperbarui dan masih menyimpan nilai tag untuk (1). Jadi kita akhirnya membandingkan current_track.name dari (2) dengan title dari (1), menemukan bahwa mereka berbeda, dan kemudian secara keliru memancarkan acara stream_title_changed menggunakan (1).

Tampaknya menjadi kondisi balapan antara get_current_tags dan get_current_track . Jika saya meletakkan sleep(1) sebelum get_current_tags maka itu berhasil. Saya juga dapat mengatasi masalah ini dengan mengubah Mopidy-MPD untuk mengeluarkan player idle event pada track_playback_started . Selain itu, kami tidak pernah menginginkan acara stream_title_changed untuk trek reguler (saya mengacaukannya di #1751).

Memiliki kondisi balapan di sini tampaknya salah, itu harus menjadi satu tindakan sinkron saat berpindah trek - apakah manual atau tidak. Tapi saya akui saya tidak cukup tahu tentang cara kerja mopidy, jadi mungkin ada beberapa alasan mengapa.

Ini lebih rumit dari itu, tapi ya, jika saya tidak jelas, ini adalah bug.

Aku tidak bermaksud kasar, ini sudah larut malam. Saya pikir saya hanya bereaksi terhadap sleep(1) sebagai solusi (tidak ada permainan kata-kata).

Jangan khawatir. Saya hanya menyebutkan sleep karena ini membuktikan bahwa ini adalah kondisi balapan.

EDIT: Ini bukan kondisi balapan.

@adamcik , mengapa kami peduli dengan pembaruan tag yang kami dapatkan antara menerima about-to-finish dan STREAM_START ?

Lebih baik terlambat daripada tidak sama sekali, pembaruan tag ulang dan semua peristiwa ini menjadi rumit karena semuanya asinkron. Dan sudah lama sejak saya melihat hal ini secara detail. Tapi ini dia dengan diagram pipa yang sangat disederhanakan:

[SRC] --> [DECODER] --> [SINK]
  • about-to-finish terpicu ketika SRC kehabisan data
  • Pembaruan tag mungkin masih mengalir melalui node perantara dalam pipeline pada saat ini
  • Audio untuk trek saat ini masih mengalir pada tahap ini
  • Untuk kasus seperti Icecast streaming, tag ini mencapai SINK adalah saat mereka ditayangkan (saya pikir ini adalah tempat kami mengambilnya juga)
  • STREAM_START - Sejujurnya saya tidak ingat apakah kita mendapatkan acara ini ketika mencapai SINK atau ketika itu terjadi pada SRC - ini mungkin kunci untuk memperbaikinya. Melihat https://gstreamer.freedesktop.org/documentation/gstreamer/gstmessage.html?gi-language=c#gst_message_new_stream_start tampaknya pipeline/bin mungkin meneruskan ini ke bus pesan setelah semua sink melihatnya.

Jadi saya pikir kita dapat memiliki kasus di mana ada tag yang bermakna di antara about-to-finish dan trek berikutnya dimulai. Jika memperbaiki ini sulit, kami dapat mempertimbangkan untuk mengabaikannya, tetapi menambahkan TODO dalam kode dan mengajukan bug lain untuk ditindaklanjuti, jika itu kurang rusak daripada keadaan saat ini?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat