Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
2-1297852832
thandle2
2011-02-16 13:40
2011.05.22
exceptions


15-1297253986
Доменик
2011-02-09 15:19
2011.05.22
Web разработка


9-1189098446
Kav
2007-09-06 21:07
2011.05.22
glUseProgramObjectARB(0) ; жуткие тормоза


3-1259081869
Anatoly Podgoretsky
2009-11-24 19:57
2011.05.22
Явное против неявного


15-1296849834
Baks
2011-02-04 23:03
2011.05.22
Variants unit в Delphi 5





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский