Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как проиграть mpeg4, как проиграть mpeg4 
:(
    Опции темы
cipher
Дата 21.9.2005, 09:42 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Господа есть вопрос на засыпку - надо взять avi пожатый divx, xvid либо mpeg-2(любым из них) и распаковать, а каждый кадр натянуть как текстуру на некую поверхность. Как это провернуть? У Nehe есть пример(за номером 35), но там avi не сжат и нет звука. А может кто подскажет где взять бесплатную компонету для VisualC++ чтобы распаковывать любой из этих форматов?
  Вверх
empter
Дата 21.9.2005, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фанат
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 20.5.2005

Репутация: 3
Всего: 4



DitectX SDK9.0.
После установки заходи в папку Samples там куча проигырывателей всего что тольно можно на C++, C#, VB.
Одно НО в коде можно разобраться, если есть опыт работы с DirectX.

Другой вариант - поискать ActiveX компонент, но тогда фишка:

Цитата(cipher @ 21.9.2005, 09:42)
каждый кадр натянуть как текстуру на некую поверхность

не получится.

PM MAIL MSN   Вверх
Guest
Дата 22.9.2005, 03:08 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А с использованием Video for Windows можно как нибудь провернуть такой фокус?
  Вверх
cipher
Дата 23.9.2005, 04:31 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Я думаю что надо всё-таки юзать video for windows в связке с Video Compression Manager. Но у меня что-то не выходит ничего
Код

    AVISTREAMINFO streamInfo;
    PAVISTREAM aviStream;
    PGETFRAME pFrame;

...
Код

    AVIFileInit();
    AVIStreamOpenFromFile(&aviStream, aviFile, streamtypeVIDEO, 0, OF_READ, 0);
    AVIStreamInfo(aviStream, &streamInfo, sizeof(streamInfo));
...
    pFrame = AVIStreamGetFrameOpen(aviStream, 0);

Код

[color=red]    LPBITMAPINFOHEADER lpbiIn, lpbiOut;
    LPVOID lpIn, lpOut;
    HIC hIC;

    hIC = ICLocate(ICTYPE_VIDEO, 0, lpbiIn, lpbiOut, ICMODE_DECOMPRESS);
    lpbiIn = (LPBITMAPINFOHEADER)AVIStreamGetFrame(pFrame, frame);

    ICDecompressBegin(hIC, lpbiIn, lpbiOut);
    ICDecompress(hIC, 0, lpbiIn, lpIn, lpbiOut, lpOut);
    ICDecompressEnd(hIC);

    image.data = (unsigned char *)lpbiOut + lpbiOut -> biSize;
    bgr2rgb(image.data);
[/color]


без сжатия всё нормально играется, а вот как распаковать не пойму. Кодеки в системе стоят, crystal player играет эту авиху.
  Вверх
cipher
Дата 26.9.2005, 04:19 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Я что-то не пойму неужели никто ни разу не юзал Video for Windows, что никто не пытался проиграть XviD или DivX? Большая прозьба откликнуться господа программеры!
  Вверх
p0s0l
Дата 26.9.2005, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



Сейчас точно сказать не могу, но насколько я помню, если в AVIStreamGetFrameOpen указать формат битмапа, то распаковывать вручную ничего не надо будет - фреймы будешь получать распакованными...
И имхо стоит порыть DirectShow, там скорее всего должна быть такая фишка, как рендеринг в текстуру или поверхность, тогда будет всё очень просто... Но я этого не делал...



--------------------
С уважением, г-н Посол.
PM   Вверх
cipher
Дата 27.9.2005, 03:08 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











p0s0l наконец-то хоть кто-то понимает про чё речь идёт. А по подробнее можно про LPBITMAPINFOHEADER(ведь речь про него верно?). Надо юзать ICCompressGetFormat()? Я блин всё знаю, но никак не могу сложить этот пазл. Не получается в правильной последовательности применить операторы. Может кто поможет примером? smile

Что касается этого треклятого DirectX - ну не использую я его, ну вот такой я баран, все в OGL хочу реализовать
  Вверх
p0s0l
Дата 28.9.2005, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 2
Всего: 112



Суть такова: в AVIStreamGetFrameOpen нужно указать формат, в котором ты хочешь получать кадры с помощью последующих вызовов AVIStreamGetFrame... Никаких ICCompressGetFormat использовать не надо...

Примерно как-то так должно быть:
Код

PAVISTREAM s;
AVISTREAMINFO info;
BITMAPINFOHEADER bih;
PGETFRAME gf;
PVOID dib;

AVIFileInit;

AVIStreamOpenFromFile(&s, 'DivX.avi', streamtypeVIDEO, 0, 0, NULL);

ZeroMemory (&info, sizeof(info));
AVIStreamInfo(s, &info, sizeof(info));

ZeroMemory (&bih, sizeof(bih));
bih.biSize = sizeof(bih);
bih.biWidth = info.rcFrame.Right - info.rcFrame.Left;
bih.biHeight = info.rcFrame.Bottom - info.rcFrame.Top;
bih.biPlanes = 1;
bih.biBitCount = 24;
bih.biSizeImage = (((bih.biWidth*bih.biBitCount / 8) + 3) & 0xFFFFFFFC) * bih.biHeight;

gf = AVIStreamGetFrameOpen(s, &bih);

dib = AVIStreamGetFrame(gf, 1000);

// в dib теперь распакованный тысячный кадр...




--------------------
С уважением, г-н Посол.
PM   Вверх
cipher
Дата 6.10.2005, 03:51 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











p0s0l огромное мерси, немного поморочил и всё вышло именно так как ты и говоришь
  Вверх
Guest
Дата 11.10.2005, 04:37 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Встала другая проблема, а как проиграть аудио поток из этой avi? Статейку как выдернуть данные аудио потока я нашел, но автор не говорит чем потом всё это богатство проиграть(http://www.gamedev.net/reference/articles/article840.asp). Попробовал MCI'ные sendCommand и sendString ничего не выходит.
  Вверх
chaos
Дата 11.10.2005, 06:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



смотри макросы начинающиеся на MCIWnd
PM WWW   Вверх
cipher
Дата 12.10.2005, 06:23 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Код

    long result;
    HWND m_hPlayer;

    m_hPlayer = MCIWndCreate(0, 0,
                            WS_CHILD|MCIWNDF_NOMENU|MCIWNDF_NOTIFYALL|MCIWNDF_NOPLAYBAR,
                            0);
    result = MCIWndOpen(m_hPlayer, "data/zp.wav", 0);
    result = MCIWndPlay(m_hPlayer);

    return 0;


Поробовал налабать консольку с таким кодом. m_hPlayer равен 0, а result во всех случаях 0. Звук не проигрывается это раз. Два, мне интересно будет ли он проигрываться отдельным потоком, поскольку мне надо и видео параллельно выводить?(аудио можно и из wav читать, а не совать потоком в avi).
  Вверх
chaos
Дата 12.10.2005, 06:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



Цитата(cipher @ 12.10.2005, 06:23)
Код

    long result;
    HWND m_hPlayer;

    m_hPlayer = MCIWndCreate(0, 0,
                            WS_CHILD|MCIWNDF_NOMENU|MCIWNDF_NOTIFYALL|MCIWNDF_NOPLAYBAR,
                            0);
    result = MCIWndOpen(m_hPlayer, "data/zp.wav", 0);
    result = MCIWndPlay(m_hPlayer);

    return 0;


Поробовал налабать консольку с таким кодом. m_hPlayer равен 0, а result во всех случаях 0. Звук не проигрывается это раз. Два, мне интересно будет ли он проигрываться отдельным потоком, поскольку мне надо и видео параллельно выводить?(аудио можно и из wav читать, а не совать потоком в avi).

MCIWndCreate создает контрол, так что консоль не подойдет, необходимо оконное приложение
PM WWW   Вверх
cipher
Дата 12.10.2005, 06:52 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Попробовал воткнуть в WinApi тоже ничего не проигрывает. В MCIWndCreate() указал HWND и HINSTANCE
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0796 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.