| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > как проиграть mpeg4 |
| Автор: cipher 21.9.2005, 09:42 |
| Господа есть вопрос на засыпку - надо взять avi пожатый divx, xvid либо mpeg-2(любым из них) и распаковать, а каждый кадр натянуть как текстуру на некую поверхность. Как это провернуть? У Nehe есть пример(за номером 35), но там avi не сжат и нет звука. А может кто подскажет где взять бесплатную компонету для VisualC++ чтобы распаковывать любой из этих форматов? |
| Автор: empter 21.9.2005, 17:21 | ||
| DitectX SDK9.0. После установки заходи в папку Samples там куча проигырывателей всего что тольно можно на C++, C#, VB. Одно НО в коде можно разобраться, если есть опыт работы с DirectX. Другой вариант - поискать ActiveX компонент, но тогда фишка:
не получится. |
| Автор: Guest 22.9.2005, 03:08 |
| А с использованием Video for Windows можно как нибудь провернуть такой фокус? |
| Автор: cipher 23.9.2005, 04:31 | ||||||
Я думаю что надо всё-таки юзать video for windows в связке с Video Compression Manager. Но у меня что-то не выходит ничего
...
без сжатия всё нормально играется, а вот как распаковать не пойму. Кодеки в системе стоят, crystal player играет эту авиху. |
| Автор: cipher 26.9.2005, 04:19 |
| Я что-то не пойму неужели никто ни разу не юзал Video for Windows, что никто не пытался проиграть XviD или DivX? Большая прозьба откликнуться господа программеры! |
| Автор: p0s0l 26.9.2005, 11:41 |
| Сейчас точно сказать не могу, но насколько я помню, если в AVIStreamGetFrameOpen указать формат битмапа, то распаковывать вручную ничего не надо будет - фреймы будешь получать распакованными... И имхо стоит порыть DirectShow, там скорее всего должна быть такая фишка, как рендеринг в текстуру или поверхность, тогда будет всё очень просто... Но я этого не делал... |
| Автор: cipher 27.9.2005, 03:08 |
| p0s0l наконец-то хоть кто-то понимает про чё речь идёт. А по подробнее можно про LPBITMAPINFOHEADER(ведь речь про него верно?). Надо юзать ICCompressGetFormat()? Я блин всё знаю, но никак не могу сложить этот пазл. Не получается в правильной последовательности применить операторы. Может кто поможет примером? Что касается этого треклятого DirectX - ну не использую я его, ну вот такой я баран, все в OGL хочу реализовать |
| Автор: p0s0l 28.9.2005, 07:58 | ||
| Суть такова: в AVIStreamGetFrameOpen нужно указать формат, в котором ты хочешь получать кадры с помощью последующих вызовов AVIStreamGetFrame... Никаких ICCompressGetFormat использовать не надо... Примерно как-то так должно быть:
|
| Автор: cipher 6.10.2005, 03:51 |
| p0s0l огромное мерси, немного поморочил и всё вышло именно так как ты и говоришь |
| Автор: Guest 11.10.2005, 04:37 |
| Встала другая проблема, а как проиграть аудио поток из этой avi? Статейку как выдернуть данные аудио потока я нашел, но автор не говорит чем потом всё это богатство проиграть(http://www.gamedev.net/reference/articles/article840.asp). Попробовал MCI'ные sendCommand и sendString ничего не выходит. |
| Автор: chaos 11.10.2005, 06:15 |
| смотри макросы начинающиеся на MCIWnd |
| Автор: cipher 12.10.2005, 06:23 | ||
Поробовал налабать консольку с таким кодом. m_hPlayer равен 0, а result во всех случаях 0. Звук не проигрывается это раз. Два, мне интересно будет ли он проигрываться отдельным потоком, поскольку мне надо и видео параллельно выводить?(аудио можно и из wav читать, а не совать потоком в avi). |
| Автор: chaos 12.10.2005, 06:40 | ||||
MCIWndCreate создает контрол, так что консоль не подойдет, необходимо оконное приложение |
| Автор: cipher 12.10.2005, 06:52 |
| Попробовал воткнуть в WinApi тоже ничего не проигрывает. В MCIWndCreate() указал HWND и HINSTANCE |