Einbetten eines Inhaltsverzeichnisses in eine Video Datei

In diesem Thema wird veranschaulicht, wie ein Inhaltsverzeichnis (Inhaltsverzeichnis) erstellt und in eine Videodatei eingebettet wird. Um den Beispielcode kurz zu halten, ist das Inhaltsverzeichnis sehr einfach. Sie enthält nur einen Eintrag, und der Eintrag wird mit mindestens Informationen aufgefüllt.

Zum Erstellen eines Inhaltsverzeichnisses und Einbetten in eine Datei müssen Sie die folgenden vier Objekte durch Aufrufen von CoCreateInstance erstellen.

  • Inhaltseintrag
  • Inhaltsliste für Inhaltsverzeichnis
  • INHALTSVERZEICHNIS
  • Inhaltsverzeichnis

Klassen Bezeichner für die Objekte werden in Klassen Bezeichner für den Inhaltsverzeichnis Inhaltangegeben.

Füllen Sie zuerst den Inhaltseintrag mit Informationen auf, die einen Teil der Videodatei beschreiben. Fügen Sie den Eintrag in der Inhaltsliste des Inhaltsverzeichnis hinzu, und fügen Sie dann die Inhaltsliste zum Inhaltsverzeichnis hinzu. Fügen Sie schließlich das Inhaltsverzeichnis zum Inhaltsverzeichnis hinzu, das die Funktionalität zum Einbetten des Inhalts Inhalts in die Videodatei bereitstellt. In der folgenden Liste sind die Schritte ausführlicher aufgeführt.

  1. Erstellen Sie ein Inhalts Objekt, und rufen Sie eine iycentry -Schnittstelle auf.
  2. Füllt eine TOC- _ Eintrags _ deskriptorstruktur auf und übergibt sie an itocentry:: setdescriptor.
  3. Erstellen Sie ein Inhaltslisten Objekt, und rufen Sie eine iycentrylist -Schnittstelle auf.
  4. Fügen Sie das in Schritt 1 erstellte TOC-Eintrags Objekt dem TOC-Eintrag List-Objekt hinzu, indem Sie itocentrylist:: addentrybyindexaufrufen.
  5. Erstellen Sie ein-Objekt, und rufen Sie eine IYC -Schnittstelle auf.
  6. Fügen Sie das in Schritt 3 erstellte TOC-Eintrag Listen Objekt zum TOC-Objekt hinzu, indem Sie itoc:: addentrylistbyindexaufrufen.
  7. Erstellen Sie ein Inhaltsverzeichnis Objekt, und rufen Sie eine idecparser -Schnittstelle auf.
  8. Nennen Sie idecparser:: init , um das Inhalts Objekt zu initialisieren und es einer Videodatei zuzuordnen.
  9. Fügen Sie das TOC-Objekt, das Sie in Schritt 5 erstellt haben, zum TOC-Parserobjekt hinzu, indem Sie itocparser:: addtocaufrufen.
  10. Betten Sie das Inhaltsverzeichnis in die Videodatei ein, indem Sie itocparser:: Commitaufrufen.

Der folgende Code veranschaulicht die in der vorangehenden Liste aufgeführten Schritte.

#include <wmcodecdsp.h>
HRESULT InitTocParserAndCommit(IToc* pToc);

void main()
{
   HRESULT hr = CoInitialize(NULL);
   
   if(SUCCEEDED(hr))
   {    
      ITocEntry* pEntry = NULL;
      hr = CoCreateInstance(CLSID_CTocEntry, NULL, 
         CLSCTX_INPROC_SERVER, IID_ITocEntry, (VOID**)&pEntry); 

      if(SUCCEEDED(hr))
      {
         TOC_ENTRY_DESCRIPTOR tocDesc = {0};
         tocDesc.qwStartTime = 4; 
         tocDesc.qwEndTime = 8;
         pEntry->SetDescriptor(&tocDesc); // HRESULT ignored for simplicity.    
    
         ITocEntryList* pEntryList = NULL;
         hr = CoCreateInstance(CLSID_CTocEntryList, NULL, 
            CLSCTX_INPROC_SERVER, IID_ITocEntryList, (VOID**)&pEntryList);

         if(SUCCEEDED(hr))
         {
            pEntryList->AddEntryByIndex(0, pEntry); // HRESULT ignored.
      
            IToc* pToc = NULL;
            hr = CoCreateInstance(CLSID_CToc, NULL, 
               CLSCTX_INPROC_SERVER, IID_IToc, (VOID**)&pToc);

            if(SUCCEEDED(hr))
            {
               pToc->AddEntryListByIndex(0, pEntryList); // HRESULT ignored.
               hr = InitTocParserAndCommit(pToc);
            }
         }
      }
     
      CoUninitialize();
   }
}

HRESULT InitTocParserAndCommit(IToc* pToc)
{
   ITocParser* pTocParser = NULL;
   HRESULT hr = CoCreateInstance(CLSID_CTocParser, NULL, 
      CLSCTX_INPROC_SERVER, IID_ITocParser, (VOID**)&pTocParser);

   if(SUCCEEDED(hr))
   {
      hr = pTocParser->Init(L"\\\\?\\c:\\experiment\\seattle.wmv");

      if(SUCCEEDED(hr))
      {
         DWORD tocIndex = 0;
         hr = pTocParser->AddToc(TOC_POS_TOPLEVELOBJECT, pToc, &tocIndex);

         if(SUCCEEDED(hr))
         {
            hr = pTocParser->Commit();
         }
      }

      pTocParser->Release();
      pTocParser = NULL;
   }

   return hr;
}

Lesen eines Inhaltsverzeichnisses aus einer Video Datei

Tabelle mit Inhalts parserobjekten

Programmier Handbuch für das Inhaltsverzeichnis des Parsers