Re[13]: как синхронизировать несколько видеостримов
От: Videoman Россия https://hts.tv/
Дата: 22.12.22 11:27
Оценка:
Здравствуйте, paradok, Вы писали:

>>> синхронном источнике (Live, Сеть) на приёме всегда будет либо перебор, либо недобор.


P>вроде вот так не будет...

P>пусть eсть буфера длинной N1..NK
P>при поступлении очередного кадра из NX потока он добавляется в нужный буфер, а самый кадр старый удаляется из буфера...
P>а главный объединитель по своим тактам просматривает все буфера и обирает картинку в главный буфер.

Кадр из сетевого буфера удаляется не по приходу нового, а при наступлении времени приемника, указанного в кадре, которое не совпадает с временем источника. В описанном вами подходе не добиться плавности, т.к. кадры по сети приходят в ужасно дёрганном режиме, относительно реального времени.
Re[14]: как синхронизировать несколько видеостримов
От: paradok  
Дата: 22.12.22 12:24
Оценка:
Здравствуйте, Videoman, Вы писали:

V>Здравствуйте, paradok, Вы писали:


>>>> синхронном источнике (Live, Сеть) на приёме всегда будет либо перебор, либо недобор.


P>>вроде вот так не будет...

P>>пусть eсть буфера длинной N1..NK
P>>при поступлении очередного кадра из NX потока он добавляется в нужный буфер, а самый кадр старый удаляется из буфера...
P>>а главный объединитель по своим тактам просматривает все буфера и обирает картинку в главный буфер.

V>Кадр из сетевого буфера удаляется не по приходу нового, а при наступлении времени приемника, указанного в кадре, которое не совпадает с временем источника. В описанном вами подходе не добиться плавности, т.к. кадры по сети приходят в ужасно дёрганном режиме, относительно реального времени.


но если дрожание не ужасное, то будет норм.

более реалистична ситуация — 1) есть небольшой дрейф асов источника и приемника 2) и есть небольшое дрожание скорости поступления НО В СРЕДНЕМ = 0.
то есть канал БЕЗ НАКОПИТЕЛЬНОЙ ПАМЯТИ и не теряет кадры.

Тогда при умеренном дрожании — компромис — буффер заполняется и удаляется как я описал,
а главный поток читает НЕ САМЫЙ старый кадр из потоков, но старый,
потом ставит маркер что его можно удалять по приходу нового пакета и далее как выше описано.
при этом скажем 3 сигма дрожания К, а размер буфера скажем N >> K, тогда дрожание полностью погасится.
останется только дрей, но н решаетс как выше описано..

т.е. буфер будет в среднем постоянного размера, но у него будет дрожать время удаления начала и конца
а главный поток должен читать откуда-то из середин буфера.
Отредактировано 22.12.2022 12:26 paradok . Предыдущая версия .
Re[15]: как синхронизировать несколько видеостримов
От: Videoman Россия https://hts.tv/
Дата: 22.12.22 13:53
Оценка:
Здравствуйте, paradok, Вы писали:

P>...


P>т.е. буфер будет в среднем постоянного размера, но у него будет дрожать время удаления начала и конца

P>а главный поток должен читать откуда-то из середин буфера.

Теоретически такое возможно, но на практике я такого никогда не встречал, если часы источника и приемника не синхронизированы. Потом, небольшое дрожание понятие такое себе. Помню как-то отлаживали рендерер, который рендерил поток 25 FPS (40 ms между кадрами). Так вот, когда отклонения между точным и фактическим рендерингом кадров превышал +-5 ms, допустим времена фактически были такими: 0, 40, 75, 125, 160, и т.д., то это на глаз воспринималось как рваное проигрывание видео. Особенно это хорошо проверять на монотонно меняющейся картинке, например финальные титры в конце фильма, плывущие снизу вверх.

Все сетевые источники, с которыми мне приходилось работать, не задерживают видео при отправке. Идут у кодека кадры IBBP, так он PBB сразу и пуляет вместе одной пачкой, таким образом рывки сразу по 120 ms, потом тишина и т.д.
Re[16]: как синхронизировать несколько видеостримов
От: paradok  
Дата: 22.12.22 15:01
Оценка:
Здравствуйте, Videoman, Вы писали:

V>Здравствуйте, paradok, Вы писали:


P>>...


P>>т.е. буфер будет в среднем постоянного размера, но у него будет дрожать время удаления начала и конца

P>>а главный поток должен читать откуда-то из середин буфера.

V>Теоретически такое возможно, но на практике я такого никогда не встречал, если часы источника и приемника не синхронизированы. Потом, небольшое дрожание понятие такое себе. Помню как-то отлаживали рендерер, который рендерил поток 25 FPS (40 ms между кадрами). Так вот, когда отклонения между точным и фактическим рендерингом кадров превышал +-5 ms, допустим времена фактически были такими: 0, 40, 75, 125, 160, и т.д., то это на глаз воспринималось как рваное проигрывание видео. Особенно это хорошо проверять на монотонно меняющейся картинке, например финальные титры в конце фильма, плывущие снизу вверх.


V>Все сетевые источники, с которыми мне приходилось работать, не задерживают видео при отправке. Идут у кодека кадры IBBP, так он PBB сразу и пуляет вместе одной пачкой, таким образом рывки сразу по 120 ms, потом тишина и т.д.



небольшое относительно размера буфера! то есть если пуляет блоками то буфер скажем длинной в 10 блоков.
я делал такое в телефонии — работает норм.

но в идеале все же надо делать интерполяцию и экстраполяцию так как кадры могут и пропадать иногда...
Re: как синхронизировать несколько видеостримов
От: Nuzhny Россия https://github.com/Nuzhny007
Дата: 03.07.23 19:31
Оценка: 12 (1)
Здравствуйте, sergey2b, Вы писали:

rtsp-streamsync
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.