av_read_frame ffmpeg будет блокировать или нет? - PullRequest
0 голосов
/ 23 января 2020

В StackOverflow опубликован вопрос, который спрашивает, существует ли какой-либо режим ожидания, пока не поступят действительные данные с av_read_frame : ссылка .

Мой вопрос наоборот: могу ли я быть уверен, что этот метод всегда будет возвращать либо -1, 0 или 1?

Т.е. он будет не блокировать? В официальных документах на эту тему нет упоминаний.

В некоторых потоках также упоминается настройка для этого прерывания обратного вызова.

Но мне понадобится неблокирующий вызов solid что означает, что я могу выполнять другие задачи во время ожидания сетевого видео. Если нет точного способа определить, можно ли установить av_read_frame на неблокирующую, я бы go с потоками, но я бы предпочел этого не делать.

1 Ответ

2 голосов
/ 24 января 2020

Глядя на источники, вызов av_read_frame в конечном итоге сводится к AVIO.

Существует флаг AVIO_FLAG_NONBLOCK , который вы можете попробовать использовать, но, как указано в документации, он может быть проигнорировано, так как это не реализовано для всех протоколов. Вы можете проверить источники протокола, чтобы увидеть, реализован ли он для него.

Другой вариант, чтобы быть абсолютно уверенным, что вы не будете блокировать, вы можете реализовать свою собственную функцию чтения AVIO ( пример ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...