Элемент 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-объект и просто подождать, пока запрос завершится успешно.