LINUX.ORG.RU

Длительность UDP-потока для RTSP

 , ,


0

2

Привет, ЛОР.

Проводил я несколько экспериментов такого рода. На передающем конце RTSP-сервер и подключённая к нему камера. Сервер в отдаёт поток H.264 по UDP-транспорту. В одном эксперименте сервером был VLC, а к нему подключена простенькая Microsoft Lifecam VX-800. В другом — дорогое коммерческое решение. Результаты в обоих случаях одинаковы. :)

На приёмном конце находится самописная программа, читающая поток через библиотеки FFMPEG 3. Поток успешно читается, показывается, сохраняется в файл. Но при этом длительность одной порции потока, получаемой после одного avformat_open_input, составляет ровно 55 секунд. После этого поток приходится переоткрывать заново, на что уходит время (несколько секунд).

Вопрос: от чего зависит эта длительность, можно ли на это как-то повлиять?

Тут вы, конечно, спросите «где код»? Да, я начал было писать вырожденный пример, на котором ситуация повторяется, и который можно было бы выложить на форум. Но сначала попробовал вместо своей программы на приёмном конце поставить саму команду ffmpeg и направить выхлоп в файл, не накладывая никаких ограничений на длительность. Результирующий файл оказывается такой же длительности, чуть меньше минуты. Поэтому прежде чем погружаться в код, хочу определиться в принципе. Это особенность RTSP, особенность FFMPEG или что-то третье?

Обновлено: проблема решилась переходом на другую сборку FFMPEG той же мажорной версии. Что именно в предыдущей сборке препятствовало нормальной работе, выявить, к сожалению, не удалось.

★★★★★

Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от kindof

Hint: RTSP timeout, RTP timeout

Пытался читать документацию FFMPEG на предмет таймаутов. В опциях RTSP написано про такое:

timeout
    Set socket TCP I/O timeout in microseconds.

Но если передать в avformat_open_input() любое положительное значение этого timeout, libavformat начинает спамить прямо в консоль о невозможности приёма RTSP-потока.

Впрочем, при более внимательном прочтении нашёл ещё такое (для всех протоколов):

rw_timeout
    Maximum time to wait for (network) read/write operations to complete, in microseconds. 

Или это совсем про другое?

hobbit ★★★★★
() автор топика
Ответ на: комментарий от hobbit

Или это совсем про другое?

если не лезть в дебри, то наиболее универсальное решение N лет назад выглядело как периодическая посылка клиентом RTSP серверу запроса типа:

>>>ТЫКАКТАМ?
<<<НОРМ
kindof
()
Ответ на: комментарий от kindof

Да, про keep-alive я в курсе. Но не могу сообразить, в случае работы с ffmpeg его надо делать в обход ffmpeg, своими средствами? Или всё же можно как-то настроить.

hobbit ★★★★★
() автор топика
Ответ на: комментарий от hizel

не бойся заходит в исходнички

Бояться-то там, наверное, нечего. Но вот @max_lapshin, самый, наверное, авторитетный человек на ЛОРе по части потокового видео, пишет:

RTSP живет неделями без разрывов.

Неужели все, кто пишет клиентов на основе библиотек FFMPEG, колхозят этот вопрос самостоятельно? Что-то не верится.

hobbit ★★★★★
() автор топика
Ответ на: комментарий от hobbit

Да, про keep-alive я в курсе. Но не могу сообразить, в случае работы с ffmpeg его надо делать в обход ffmpeg, своими средствами? Или всё же можно как-то настроить.

ну это не совсем keep-alive, это такой workaround, связанный с широким спектром индивидуальных трактовок вендорами RFC )

как там ffmpeg с RTSP работает хз - можно сырцы посмотреть или с дебагом запустить

kindof
()
Ответ на: комментарий от hobbit

Ты код не хочешь показать? На лочике два с половиной калеки используют что-то кастомное написанное на ffmpeg для работы с rtsp и Макс не входит в их число. ffmpeg написан сообществом и очень не ровный внутри. Ты тут ни конкретной версии ffmpeg ни кода своего не привел, поэтому все сообщения в этом треде телепатические

hizel ★★★★★
()

Понятия не имею что, куда и как. Но чисто в голове мысль про ограничение некого буфера, гуглёж выдаёт FILESTREAMBUFFERSZ может надо сбрасывать или заводить два буфера меняя их по очереди.

Это всё просто домыслы, но вдруг.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от hobbit

Неужели все, кто пишет клиентов на основе библиотек FFMPEG, колхозят этот вопрос самостоятельно? Что-то не верится.

Как писавший такое, скажу что к сожалению да.

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

lovesan ★★★
()