Mopidy: Mopidy случайным образом переносит название предыдущего трека на следующий трек

Созданный на 15 янв. 2020  ·  11Комментарии  ·  Источник: mopidy/mopidy

Привет,

После того, как Mopidy завершит трек и перейдет к следующему, название трека не обновится должным образом, в результате следующий трек будет иметь то же название, что и предыдущий. Эта проблема постепенно усугубляется, и весь список воспроизведения искажается.
Для записи; звук воспроизводится нормально, исполнитель обновляется нормально, номер трека обновляется нормально, а также длина трека и прогресс.

Действия по воспроизведению:

  1. Заполните плейлист несколькими треками,
  2. Сыграйте один, не пропуская и не ища (как это, кажется, случается, когда вы позволяете треку проигрывать какое-то время)
  3. Подождите, пока трек закончится, и смотрите, как название не меняется при переходе к следующему треку.
    Я использую Arch Linux со следующими версиями Mopidy и его расширений:

  4. mopidy 3.0.1-2

  5. мопиды-местные 3.1.0-1
  6. mopidy-mpd 3.0.0-1
  7. mopidy-soundcloud 3.0.0-1
    Все они обновлены до последней известной версии в Arch и AUR.

Я сталкивался с этим с момента обновления до Mopidy 3 где-то в прошлом году, тогда как у 2 такого поведения никогда не было.
Эта проблема похожа на # 1528 https://github.com/mopidy/mopidy/issues/1528 , однако здесь говорится о Mopidy 2.

Показанные ниже треки воспроизводятся с сайта mopidy-local.

В ncmpcpp:
Неверный трек-лист https://camo.githubusercontent.com/fa91261107d7af341374ef03a1ab2a774e813e9f/68747470733a2f2f692e696d6775722e636f6d2f5547674830477a2e706e67

И в расширении MPD полибара:
Полибар MPD https://camo.githubusercontent.com/5b6207e174cd0cce829d2164aba91868c451d50b/68747470733a2f2f692e696d6775722e636f6d2f374d5a69367a4a2e706e67

Это настоящий трек-лист:
Правильный трек-лист https://camo.githubusercontent.com/c99c327c9505f563f9f96a92b2b54df2a4f02a28/68747470733a2f2f692e696d6775722e636f6d2f384d53666665422e706e67

С другим альбомом я попытался захватить журналы с помощью mopidy -v, пока это происходило.
Журнал https://camo.githubusercontent.com/76bb6011e2138c5ca800ac2b7d18618e46a8ca75/68747470733a2f2f692e696d6775722e636f6d2f6d5339375a49702e706e67

ОТЛАДКА 2020-01-15 14: 07: 06,594 [79919: MainThread] mopidy.audio.actor
Аудио событие: tags_changed (tags = ['минимальный битрейт', 'битрейт'])
DEBUG 2020-01-15 14: 07: 06,594 [79919: MainThread] mopidy.listener
Отправка tags_changed в AudioListener: {'теги': ['минимальный битрейт', 'битрейт']}
DEBUG 2020-01-15 14: 07: 06,644 [79919: MpdSession-11] mopidy_mpd.session
Запрос от [:: ffff: 127.0.0.1 ]: 34768: noidle
DEBUG 2020-01-15 14: 07: 06,644 [79919: MpdSession-11] mopidy_mpd.session
Ответ на [:: ffff: 127.0.0.1 ]: 34768: OK
DEBUG 2020-01-15 14: 07: 06,644 [79919: MpdSession-11] mopidy_mpd.session
Запрос от [:: ffff: 127.0.0.1 ]: 34768: статус
DEBUG 2020-01-15 14: 07: 06,647 [79919: MpdSession-11] mopidy_mpd.session
Ответ на [:: ffff: 127.0.0.1 ]: 34768:
объем: 100
повторять: 0
случайный: 0
одиночный: 0
потреблять: 0
плейлист: 5
длина плейлиста: 8
xfade: 0
состояние: играть
песня: 2
songid: 12
nextsong: 3
nextsongid: 13
время: 1: 270
прошло: 1.412
битрейт: 0
Ok
DEBUG 2020-01-15 14: 07: 06,648 [79919: MpdSession-11] mopidy_mpd.session
Запрос от [:: ffff: 127.0.0.1 ]: 34768: простаивает
ОТЛАДКА 2020-01-15 14: 07: 06,656 [79919: MainThread] mopidy.audio.gst
Получено сообщение на автобусе TAG: tags = {'artist': ['Ben Lukas Boysen'], 'title': ['Sleepers Beat Theme'], 'track-number': [3], 'track-count': [8 ], 'альбом': ['Заклинания'], 'datetime': ['2016'], 'альбом-исполнитель': ['Бен Лукас Бойсен'], 'организация': ['Erased Tapes Records'], 'жанр ': [' Эмбиент / современная классика '],' isrc ': [' ERATP085 '],' image ':
В выводе отладки (из изображений) было много шума, и он быстро вышел за пределы размера буфера моего терминала.
Если потребуется дополнительная информация, сообщите мне, и я сделаю все, что в моих силах.

Спасибо.

Самый полезный комментарий

Лучше поздно, чем никогда, повторно обновлять теги и все эти события, это усложняется, поскольку все асинхронно. И прошло много времени с тех пор, как я подробно изучал эти вещи. Но вот ужасно упрощенная схема конвейера:

[SRC] --> [DECODER] --> [SINK]
  • about-to-finish срабатывает, когда в SRC заканчиваются данные
  • На этом этапе обновления тегов могут все еще проходить через промежуточные узлы в конвейере.
  • Аудио для текущего трека на этом этапе все еще воспроизводится
  • В таких случаях, как потоковая передача Icecast, эти теги попадают в SINK , когда они запускаются в эфир (я думаю, что здесь мы также их забираем)
  • STREAM_START - честно говоря, я не помню, получим ли мы это событие, когда оно дойдет до SINK или когда оно произойдет в SRC - это, вероятно, ключ к правильному решению. Глядя на https://gstreamer.freedesktop.org/documentation/gstreamer/gstmessage.html?gi-language=c#gst_message_new_stream_start, кажется, что конвейер / bin, вероятно, пересылает это в шину сообщений, как только все приемники его увидят.

Так что подумайте, у нас могут быть случаи, когда есть значимые теги между about-to-finish и началом следующего трека. Если понять это сложно, мы могли бы игнорировать их, но добавить TODO в код и зарегистрировать другую ошибку для отслеживания, если она менее нарушена, чем текущее состояние?

Все 11 Комментарий

Это похоже на mopidy / mopidy-mpd # 23.

Без проблем! Оба отчета пришли в течение нескольких часов, и мы до сих пор не знаем, в каком компоненте кроется основная причина.

Я бы сказал, что, возможно, это как-то связано с https://github.com/mopidy/mopidy/pull/1751, если бы не заявление о том, что этой проблемы не было в Mopidy 2.x.

У меня такая же проблема, я полагаю, но у меня эта проблема была несколько месяцев. Также здесь Arch, все обновлено.

Mopidy сохраняет предыдущее название трека как текущее. Т.е. трек заканчивается - ncmpcpp и расширение polybar показывает название предыдущего трека (просто "Eminem - In Too Deep"). В то время как mpc показывает "Godzilla: Eminem - In Too Deep", где Godzilla - текущая песня, а In Too Deep - предыдущая. Это немного странно, одна ошибка, но почему mpc показывает и то, и другое?

Это комбинация вещей, выявленных https://github.com/mopidy/mopidy/pull/1751, и поэтому она также присутствует в Mopidy v2.3.0.

Первые два трека в моем плейлисте: (1) «Set Guitars To Kill», за которым следует (2) «A Little Bit Of Solidarity Goes A Long Way». В приведенном ниже журнале показано, что после изменения дорожки с (1) на (2) мы получаем событие изменения тега, но в конечном итоге отправляем stream_title_changed используя старые данные дорожки.

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'}

Это связано с тем, что наш вызов self.audio.get_current_tags().get() для получения новых значений тегов для (2) еще не был обновлен и все еще содержит значения тегов для (1). Таким образом, мы сравниваем current_track.name из (2) с title из (1), обнаруживаем, что они разные, а затем ошибочно генерируем событие stream_title_changed используя (1).

Похоже, это состояние гонки между get_current_tags и get_current_track . Если я поставлю sleep(1) перед get_current_tags тогда это сработает. Я также могу обойти эту проблему, изменив Mopidy-MPD на генерирование события player idle на track_playback_started . Вдобавок мы никогда не хотели, чтобы события stream_title_changed для обычных треков (я облажался в # 1751).

Наличие состояния гонки здесь кажется неправильным, это должно быть одно синхронное действие при переключении треков - будь то ручное или нет. Но я признаю, что недостаточно знаю, как работает mopidy, так что, возможно, есть какая-то причина, почему.

Это сложнее, но да, если я не понял, это ошибка.

Я не хотел показаться грубым, это была поздняя ночь. Думаю, я просто отреагировал на сон (1) как на решение (без каламбура).

Не стоит беспокоиться. Я упомянул только sleep поскольку это доказывает, что это состояние гонки.

РЕДАКТИРОВАТЬ: это не совсем условие гонки.

@adamcik , почему мы заботимся об обновлениях тегов, которые мы получили между получением about-to-finish и STREAM_START ?

Лучше поздно, чем никогда, повторно обновлять теги и все эти события, это усложняется, поскольку все асинхронно. И прошло много времени с тех пор, как я подробно изучал эти вещи. Но вот ужасно упрощенная схема конвейера:

[SRC] --> [DECODER] --> [SINK]
  • about-to-finish срабатывает, когда в SRC заканчиваются данные
  • На этом этапе обновления тегов могут все еще проходить через промежуточные узлы в конвейере.
  • Аудио для текущего трека на этом этапе все еще воспроизводится
  • В таких случаях, как потоковая передача Icecast, эти теги попадают в SINK , когда они запускаются в эфир (я думаю, что здесь мы также их забираем)
  • STREAM_START - честно говоря, я не помню, получим ли мы это событие, когда оно дойдет до SINK или когда оно произойдет в SRC - это, вероятно, ключ к правильному решению. Глядя на https://gstreamer.freedesktop.org/documentation/gstreamer/gstmessage.html?gi-language=c#gst_message_new_stream_start, кажется, что конвейер / bin, вероятно, пересылает это в шину сообщений, как только все приемники его увидят.

Так что подумайте, у нас могут быть случаи, когда есть значимые теги между about-to-finish и началом следующего трека. Если понять это сложно, мы могли бы игнорировать их, но добавить TODO в код и зарегистрировать другую ошибку для отслеживания, если она менее нарушена, чем текущее состояние?

Была ли эта страница полезной?
0 / 5 - 0 рейтинги