Расскажите про задачу синхронизации видеопотоков и решение проблем
Что проверяют
Работали ли вы со временем в AVFoundation или только подключали готовый плеер. Синхронизация это всегда разговор про часы и метки, и по первым фразам видно, есть ли за словами опыт.
Как отвечать
Начните с главного: синхронизация делается по меткам источника, а не по моменту прихода данных. В iOS это CMTime и CMSampleBuffer, а ход времени задаёт CMClock или CMTimebase, к которому привязан плеер.
Дальше под свой случай:
- несколько камер на устройстве:
AVCaptureMultiCamSessionдаёт общие часы захвата, но поддерживается не на всех моделях и упирается в нагрев и энергобюджет, поэтому качество приходится снижать осознанно; - несколько дорожек при воспроизведении: собрать их в один
AVCompositionили подчинить одномуAVPlayer, а не запускать два плеера рядом и надеяться; - поток по сети: метки RTP плюс отчёты RTCP для привязки к общим часам, буфер выравнивания задержки на приёмнике.
Отдельно скажите, кто ведущий. Обычно ведёт звук, а видео подстраивается дублированием и пропуском кадров: рывок в звуке слышен сразу, а повторённый кадр почти незаметен. И назовите, чем мерили расхождение: хлопок в кадре, тестовый сигнал, отметка на общей шкале.
Где спотыкаются
Синхронизируют по системному времени устройства или по моменту получения пакета. Часы источников расходятся, и рассинхрон растёт: первые минуты всё выглядит хорошо, через полчаса губы отстают от звука.
Лечат всё увеличением буфера. Задержка вырастает, зрителю становится хуже, а причина расхождения никуда не девается.
Выдают за решение адаптивный битрейт и коррекцию ошибок. Это средства от потерь и узкого канала, потоки между собой они не выравнивают, и на вопрос про метки времени ответа не дают.