Информация об изменениях

Сообщение Re[11]: как синхронизировать несколько видеостримов от 21.12.2022 17:28

Изменено 21.12.2022 17:38 Videoman

Re[11]: как синхронизировать несколько видеостримов
Здравствуйте, sergey2b, Вы писали:

S>Скажите пожалуйста где вы про это узнали

Просто уже 20 лет в мультимедиа как-никак. Частичная подсказка вам есть в DirectShow. У фильтров рендереров и источников есть персональные таймеры — именно по этому. Также, по умолчанию, часы есть у самого графа. До начала работы, граф запрашивает мастер часы, по которым будет работать. Если их нет, то использует свои. У аудио-рендерера всегда есть часы, так как у аудио-платы всегда свой генератор. Если поставите два произвольных компьютера и начнёте играть фильм синхронно, то закончится он играть с разницей несколько секунд на одном и другом. Это именно по тому, что у каждого компьютера часы идут немного по разному.
Какой-нибудь сетевой "Push Demultiplexer" филтр, тоже всегда имеет часы, именно по этому. Он подсчитывает скорость приходящего потока и подводит часы как на источнике. Граф автоматически использует его часы для рендеринга. Получается что на источнике и приёмнике время часов течёт строго синхронно.

В случае с сетью, источник выдает кадры строго синхронно по своим часам, но относительно ваших часов на приёмнике время будет идти чуть быстрее или чуть медленнее. Ошибка, на самом деле большая, что бы ею можно было пренебречь. Мы как-то считали и получалось уже в 4-м знаке после запятой. Если источник асинхронный (мы можем регулировать его скорость, например файл), то проблемы не возникает, так как мы гарантировано заполняем буфер быстрее хода часов. На синхронном источнике (Live, Сеть) на приёме всегда будет либо перебор, либо недобор.

S>Может есть какие то книги или форумы

Вот к сожалению что-то по книгам подсказать не могу.
Re[11]: как синхронизировать несколько видеостримов
Здравствуйте, sergey2b, Вы писали:

S>Скажите пожалуйста где вы про это узнали

Просто уже 20 лет в мультимедиа как-никак. Частичная подсказка вам есть в DirectShow. У фильтров рендереров и источников есть персональные таймеры — именно по этому. Также, по умолчанию, часы есть у самого графа. До начала работы, граф запрашивает мастер часы, по которым будет работать. Если их нет, то использует свои. У аудио-рендерера всегда есть часы, так как у аудио-платы всегда свой генератор. Если поставите два произвольных компьютера и начнёте играть фильм синхронно, то закончится он играть с разницей несколько секунд на одном и другом. Это именно по тому, что у каждого компьютера часы идут немного по разному.
Какой-нибудь сетевой "Push Demultiplexer" фильтр, тоже всегда имеет часы, именно по этому. Он подсчитывает скорость приходящего потока и подводит часы как на источнике. Граф автоматически использует его часы для рендеринга. Получается что на источнике и приёмнике время часов течёт строго синхронно.

В случае с сетью, источник выдает кадры строго синхронно по своим часам, но относительно ваших часов на приёмнике время будет идти чуть быстрее или чуть медленнее. Ошибка, на самом деле большая, что бы ею можно было пренебречь. Мы как-то считали и получалось уже в 4-м знаке после запятой. Если источник асинхронный (мы можем регулировать его скорость, например файл), то проблемы не возникает, так как мы гарантировано заполняем буфер быстрее хода часов. На синхронном источнике (Live, Сеть) на приёме всегда будет либо перебор, либо недобор.

S>Может есть какие то книги или форумы

Вот к сожалению что-то по книгам подсказать не могу.