Форум: "Media";
Текущий архив: 2011.05.22;
Скачать: [xml.tar.bz2];
ВнизУпаковка avi Найти похожие ветки
← →
Дмитрий Белькевич © (2008-05-29 13:40) [0]Есть некая распакованная авишка. Она исправна - проигрывается без проблем. Нужно её упаковать. В качестве упаковщика использую XVID.
Пакую следующим кодом (привожу частично):
AVIERR := AVIFileOpen(pfile, PChar(TempFileName), OF_READ, nil);
if AVIERR <> AVIERR_OK then
raise Exception.Create("Unable to write output file. Error " + IntToHex(AVIERR, 8));
AVIERR := AVIFileGetStream(pfile, fCompStream, streamtypeVIDEO, 0);
if AVIERR <> AVIERR_OK then
raise Exception.Create("Unable to write output file. Error " + IntToHex(AVIERR, 8));
Streams[0] := fCompStream;
Streams[1] := AudioStream;
if fFourCC = "" then
CompOptions[0] := nil
else
CompOptions[0] := @AviCompressoptions;
CompOptions[1] := nil;
AVIERR := AVISaveV(PChar(filename), nil, @AviSaveCallback, nStreams, Streams, CompOptions);
Получающийся файл не воспроизводится. Пробовал Медиаплеером, Лайт аллоем.
Этот же файл можно перепаковать немного другим методом. В результаие получается некоторый файл, который без проблем воспроизводится в обоих плеерах.
Посмотрел TAviStreamInfo у обоих файлов. Отличаются szName.
В невоспроизводящемся файле туда вставляется строчка "~AWTemp.avi Видео #1". В воспроизодящемся - поле пустое.
Эти же данные записываются в заголовок авишки. Файлы отличаются только наличием/отсутствием этого поля.
Попробовал редактировать с помощью EditStreamSetInfo и EditStreamSetName, предварительно переведя поток в редактируемое состояние CreateEditableStream. Увы - ничего не меняется. Ошибок ни одна функция не возвращает - всё проверяею.
Так вот главный вопрос: как этот szName изменить? Может быть случайно кто сталкивался. Пока что единственное видимое решение - редактировать авишку "вручную". Но это как-то некошерно...
← →
Дмитрий Белькевич © (2008-05-29 13:55) [1]Отвечаю сам себе...
Не меняется, то оно не меняется. Но не меняется оно на пустое значение (""), а вот на что-то определенное ("MAKHAON") вполне меняется ;)
И начинает вопроизводится. Косяк, вполне вероятно, возникает из-за русских букв в szName (которые сама винда и вставляет).
В какой раз убеждаюсь, что к вин апи, по возможности, лучше не лезть. Чем больше своего кода и меньше вин апи - тем меньше проблем.
← →
Дмитрий Белькевич © (2008-05-29 14:06) [2]>В какой раз убеждаюсь, что к вин апи, по возможности, лучше не лезть. Чем больше своего кода и меньше вин апи - тем меньше проблем.
Исходя из этого еще вопрос. Может быть возможно кодеки как-то руками "цеплять" без винапи, так как винда везде по-разному патченная, их много всяких, и чем дальше - тем больше. И в каждой - свои глюки.
В одной сборке, например, были глюки с созданием некомпрессированной авишки. После того, как выбросил обращение к винапи по этому поводу и заменил своим кодом - проблемы, по крайней мере, в этой части, окончились раз и навсегда. Еще бы упаковку некомпрессировнной ави без винапи сделать...
И компрессию "на лету"... Было бы вселенское счастье ;)
p.s. всё больше понимаю пингвиноводов ;)
← →
Sapersky_ (2008-05-29 15:07) [3]Посмотрите AviWriter2:
http://www.programania.com/aviwriter_2.zip
Компрессия "на лету" там тоже есть, хотя не все кодеки её поддерживают.
Если надо, есть "облегченный" вариант для TFastDIB.
Может быть возможно кодеки как-то руками "цеплять" без винапи
AFAIK, VFW-кодек представляет собой DLL с экспортируемой функцией DriverProc, которая вызывается с разными параметрами для совершения различных действий (см, например, исходники кодека: http://www.free-codecs.com/download/Motion_Codecs_Predictor_codec_Mhuffyuv_codec.htm или подобных). Т.е. вроде бы ничто не мешает загрузить эту DLL вручную и вызвать DriverProc с нужными параметрами. Но тогда и AVI-файл придётся формировать тоже вручную.
← →
Дмитрий Белькевич © (2008-05-29 19:18) [4]>Посмотрите AviWriter2:
Увы - именно на её основе и делаю, переделал некоторые вещи (в т.ч. первый проход без участия винды), стало немного постабильнее, но всё равно - глюки лезут.
>AFAIK, VFW-кодек представляет собой DLL с экспортируемой функцией DriverProc
Спасибо, гляну, может удастся к кодекам прицепиться.
>Но тогда и AVI-файл придётся формировать тоже вручную.
Ну, это относительно просто, чувствую, этим и закончится.
← →
Дмитрий Белькевич © (2008-05-30 00:03) [5]Продолжаем...
У меня на машине XVID начал работать и в обычном режиме и "на лету".
Пробую на другой машине - "на лету" валится, в обычном - работает. Падает в модуле xvidcore.dll.
При этом xvid стоит один и тот же. Патч - и там и там - sp2, без обновлений. Дллки xvidcore.dll, xvidvfw.dll, avicap32.dll, avifil32.dll, msvfw32.dll - одинаковые...
Чудеса, как обычно...
Страницы: 1 вся ветка
Форум: "Media";
Текущий архив: 2011.05.22;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.003 c