Рекомендации по синхронизации аудио со службами аудио-очереди? - PullRequest
3 голосов
/ 04 декабря 2010

Я декодирую видеоформат с сопровождающей звуковой дорожкой в ​​отдельный файл.В соответствии со спецификациями, я рендую кадр видео каждые 1/75 секунды.И длина видеофайла равна длине звуковой дорожки.

Я играю аудио с помощью Audio Queue Services (который я выбрал, потому что полагал, что будут ситуации, когда мне понадобится точный контроль времени - просто та ситуация, с которой я сталкиваюсь!).Это большой API, и я не продвинулся далеко за пример кода в руководстве по программированию Apple (хотя я обернул вещи в более красивый API ObjC).

В идеальных ситуациях все работает нормально с базовой настройкой воспроизведения.Видео и аудио остаются синхронизированными и оба заканчиваются в одно и то же время (в пределах моей собственной способности определить разницу).Однако, если производительность снижается (или я подключаю Leaks Instrument или что-то еще), они быстро выходят из синхронизации.

Впервые я написал что-то подобное: у меня нет опыта работы со звуком или видео.У меня, конечно, нет опыта работы с Audio Queue Services.Так что я не уверен, куда идти отсюда.

Ты сделал что-то подобное?Есть ли у вас какие-либо советы, советы или рекомендации?Есть ли какой-то фундаментальный документ, который мне нужно прочитать?Любая помощь будет принята с благодарностью.

1 Ответ

2 голосов
/ 07 декабря 2010

Во-первых, я никогда не кодировал ничего подобного, поэтому стреляю с бедра.Кроме того, я проделал приличную часть программирования с HAL и AUHAL, но никогда не с AudioQueue, так что мой подход может быть не лучшим способом использования AQ.

Очевидно, что первое, что нужно решить, это синхронизироватьаудио на видео или видео на аудио.Из вопроса кажется, что вы решили, что видео будет основным, и аудио должно синхронизироваться с ним.

Я хотел бы подойти к этому, отслеживая количество отображаемых кадров видео и частоту кадров.,Затем при постановке в очередь ваших аудио-буферов, вместо того, чтобы передавать монотонно увеличивающееся значение для startTime, отрегулируйте время начала буфера, чтобы соответствовать любым разрывам, наблюдаемым в видео.Это немного расплывчато, потому что я не знаю точно, откуда исходит ваше аудио или как вы ставите его в очередь, но, надеюсь, принцип ясен.

...