kvappa
Понедельник, 23 Июня 2003, 21:53
Ага, разобрался!!!

Каждый поток имеет свой символьный идентификатор:
00dc - видео, поток 0 (у некомпрессированного видео - вроде db)
01wb - звук, поток 1
02wb - звук, поток 2
Так что прежде, чем искать синк-код
0B77, сначала ищем, прямо с самого начала AVI и пока не найдем, вышеописанные метки. Всё, что нам нужно, находится не слишком далеко от начала файла. Но есть сложность: после метки могут быть просто нули, до метки следующего потока, или некоторое количество нулей, и только потом то, что нужно. Потоки могут перемежаться несколько раз, пока не пойдет нужная информация.
Поэтому, примерный алгоритм может быть такой:
1. Сначала смотрим в заголовке AVI, сколько в нем и каких потоков, потом начинаем искать нужное количество меток (чтобы не искать то, чего нет).
2. Ищем нужную метку, например
01wb. После ее нахождения, ищем дальше синк-код
0B77, пока его не найдем или не встретим следующую метку. Если попалась метка другого потока, перестаем искать комбинацию
0B77 и ищем дальше нужный нам поток.
3. когда найдем искомую комбинацию
0B77 в нужном потоке, повторяем то же самое для второго аудио-потока (
02wb), если он есть.
Кстати, можно еще найти идентификатор
00dc, затем сделать поиск строки DivX (обычно - это очень близко), и считать его полную версию, даже с номером билда! С Xvid должно быть тоже самое, я думаю. Приду домой - проверю.
В общем, вроде картина более менее прояснилась, так что если есть еще какие-либо сложности, могу тоже поразбираться.
ЗЫ. Кстати, с ужасом обнаружил, что мой DivX 5.02 CE оставляет строку "DivX501b481" - так что попробую поставить обычную версию, не CE, и сравню.