Я открываю сетевой файл через HTTPS следующим образом:
avformat_open_input(&m_format, "https://www.example.com/file.mp4", nullptr, nullptr);
Это работает, однако иногда соединение закрывается, и это регистрируется:
[tls @ 0x7f600ba690] Error in the pull function.
[tls @ 0x7f600ba690] IO error: Connection reset by peer
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7f6007e450] Packet corrupt (stream = 0, dts = 24188928).
[aac @ 0x7f60324800] Input buffer exhausted before END element found
Я нашел возможность настроить переподключение по логам из этого поста. Вот их логи:
[tls @ 0x6e3b440] Error in the pull function.
[tls @ 0x6e3b440] IO error: Connection reset by peer
[https @ 0x6e37900] Will reconnect at 720896 in 0 second(s), error=Connection reset by peer.
Здесь libavformat не сдается и пытается повторно подключиться, потому что аргумент -reconnect был передан в CLI FFmpeg. Как я могу сделать то же самое в коде с FFmpeg libavformat?





Выяснил это сам. Оказывается, параметры командной строки можно напрямую передавать в функцию:
AVDictionary* options = nullptr;
av_dict_set(&options, "reconnect", "1", 0);
av_dict_set(&options, "reconnect_streamed", "1", 0);
av_dict_set(&options, "reconnect_delay_max", "30", 0);
avformat_open_input(&m_format, "https://www.example.com/file.mp4", nullptr, &options);