Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.05.22;
Скачать: CL | DM;

Вниз

Упаковка 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 вся ветка

Текущий архив: 2011.05.22;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.013 c
15-1296655266
Инна
2011-02-02 17:01
2011.05.22
помощь в создании информационной базы


3-1258970968
denis_7
2009-11-23 13:09
2011.05.22
Проблема с отчетами в Rave


15-1296137787
Кто б сомневался
2011-01-27 17:16
2011.05.22
Project Options


15-1297002098
aka
2011-02-06 17:21
2011.05.22
Delphi &amp; Flash


6-1236800865
Дмитрий Белькевич
2009-03-11 22:47
2011.05.22
Не меняется порт в TIdSyslogServer (или скорее TIdUDPServer)