Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

1

03.08.2012, 00:30

Problem mit DirectShow - Abspielen einer .mp4

Ich verwende Ogre als Engine, ich denke mal viele kennen Sie bzw. haben davon gehört. Da Ogre an sich keine Videos unterstützt gibt es dieses Plugin:
http://www.ogre3d.org/tikiwiki/tiki-inde…ucture=Cookbook

Es verwendet DirectShow.
Ich habe es in meinem Projekt eingebaut. Allerdings ist die Funktion ConnectFilters unbekannt. Dazu hab ich das im Internet gefunden:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
HRESULT GetPin (IBaseFilter * pFilter, PIN_DIRECTION PinDir, IPin ** ppPin)
{
    IEnumPins   *pEnum;
    IPin            *pPin;
    pFilter->EnumPins(&pEnum);

    while(pEnum->Next(1,   &pPin,   0)   ==   S_OK)
    {
    PIN_DIRECTION   PinDirThis;
    pPin->QueryDirection(&PinDirThis);
        if   (PinDir   ==   PinDirThis)
            {
            pEnum->Release();
            *ppPin   =   pPin;
            printf("connected\n");
            //MessageBox(NULL, L"connected", L"success", MB_OK);

            return   S_OK;
            }
    pPin->Release();
    }
pEnum->Release();
return   E_FAIL;
} 

    HRESULT   ConnectFilters(IGraphBuilder   *pGraph,   IBaseFilter   *pFirst,   IBaseFilter   *pSecond)
{
    IPin   *pOut =  NULL,   *pIn   =   NULL;
    HRESULT hr   =  GetPin(pFirst,   PINDIR_OUTPUT,   &pOut);
    if   (FAILED(hr))
    return   hr;

    hr  = GetPin(pSecond,   PINDIR_INPUT,   &pIn);
    if (FAILED(hr))
        {
        pOut->Release();
        return   E_FAIL;
        }
    hr   =   pGraph->Connect(pOut, pIn);
    pIn->Release();
    pOut->Release();
    return hr;
}


Jedenfalls will ich jetzt ein Video laden, was aber nicht funktioniert: Ich erhalte eine Fehlermeldung mit dem Inhalt: Abnormal program termination
Als ich alles ins Projektverzeichnis kopiert hatte (auch die intro.mp4) schaltete ich den Debugger an. Danach war ich verwirrt:

Erst mal der Code zum laden:

C-/C++-Quelltext

1
2
introTex = new OgreUtils::DirectShowMovieTexture(OgreFramework::getSingletonPtr()->m_pViewport->getActualWidth(),OgreFramework::getSingletonPtr()->m_pViewport->getActualHeight());
    introTex->loadMovie("intro.mp4");


Alles funktioniert, die Initialisierung mit new wird korrekt ausgeführt, doch dann...

C-/C++-Quelltext

1
2
 hr = ConnectFilters(dsdata->pGraph, srcFilter, dsdata->pGrabberF); 
        if(FAILED(hr)) throw ("[DSHOW] Unsupported media type!");


In der zweiten Zeile der beiden (Funktion loadMovie) wird eine Speicherverletzung (typischer Fehler) ausgegeben. Der grüne Pfeil zeigt aber in den Konstruktor auf folgende Zeile:

C-/C++-Quelltext

1
 hr=CoInitialize(NULL);


Ich frage mich wie er dahin kommt. Die Ausgabe Unsupported media type wurde nicht ausgegeben, die logfile zeigt folgendes:
00:20:14: [DSHOW] Creating texture with dimensions 1584x822.
00:20:14: [DSHOW] Loading movie named 'intro.mp4'.

Ja ich hab auch mal versucht das komplette Verzeichnis anzugeben bringt aber auch nichts.

Ich weiß echt nicht mehr weiter und hoffe jemand kann mir helfen.

mfg

2

03.08.2012, 01:20

Ich kenne mich nicht wirklich damit aus, aber hast du es mal mit einem anderen Videoformat probiert bzw. bist du dir sicher, dass es mit mp4 geht?
Ich denke da nämlich z.B. an mp3, wo es ja ebenfalls Lizensprobleme mit vielen Bibliotheken gibt, weshalb diese Mp3 nicht abspielen können ;)
Sry, wenn ich etwas zu Offensichtliches sage und das gar nicht in Frage kommt ;)

mfg,
Akktta
Diese Angaben sind (wie immer) ohne Gewähr :D

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

3

03.08.2012, 01:30

Laut der Beschreibung müsste jedes Format das der lokale Media Player abspielen kann unterstützt sein. Meiner unterstützt .mp4
Aber ich versteh immer noch nicht wie der von loadMovie in den Konstruktor springt.

Werbeanzeige