Элемент playbin2 query_position всегда возвращает запрос не выполнен

Я занимаюсь разработкой медиаплеера для потоковой передачи mp3 файлов. Я использую модуль Python gstreamer для воспроизведения потоков.

мой игрок - элемент playbin2

Когда я хочу запросить позицию (с query_position(gst.FORMAT_TIME,None)), он всегда возвращает gst.QueryError: Query fail. Песня определенно играет. (состояние не NULL)

У кого-нибудь есть опыт с этим?

PS: я также пытался заменить gst.FORMAT_TIME на gst.Format(gst.FORMAT_TIME), но выдает ту же ошибку.

3 ответа

Что значит "вам нужно будет создать свой собственный gst-объект"? А что значит "ждать, пока запрос завершится успешно"?

Изменения состояния с NULL на PAUSED или PLAYING являются асинхронными. Обычно вы сможете выполнить успешный запрос продолжительности только после предварительной проверки конвейера (поэтому укажите состояние>= PAUSED). Когда вы получите сообщение ASYNC_DONE на GstBus конвейера (playbin2), вы сможете выполнить запрос.

Из какого источника вы транслируете? Если вы запросите позицию из playbin2, я бы сказал, что вы все делаете правильно. Можете ли вы сообщить об ошибке в gstreamer, включив минимальный фрагмент кода на python, который раскрывает проблему и сообщает, из какого источника вы транслируете, в идеале его общедоступный.

Я нашел это самостоятельно. Проблема была с многопоточностью. По всей видимости, вам нужно поточить ваш gst-объект и просто подождать, пока запрос завершится успешно.

Другие вопросы по тегам