So schreiben Sie Beispiele
[Das dieser Seite zugeordnete Feature Windows Media Format 11 SDK ist ein Legacyfeature. Sie wurde durch den Quellleser und den Senkenschreiber ersetzt. Quellleser und Senkenschreiber wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit den Quellleser und senkenden Writer anstelle des Windows Media Format 11 SDK verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]
Wenn Sie die Eingaben für die zu schreibende Datei identifiziert und konfiguriert haben, können Sie mit der Übergabe von Beispielen an den Writer beginnen. Sie sollten Die Beispiele nach Möglichkeit in der Präsentationszeit übergeben, um den Schreibprozess effizienter zu gestalten.
Bevor Sie Beispiele übergeben, müssen Sie festlegen, dass der Writer sie akzeptiert, indem Sie IWMWriter::BeginWriting aufrufen.
Führen Sie die folgenden Schritte aus, um ein Beispiel an den Writer zu übergeben:
- Ordnen Sie einen Puffer zu, und rufen Sie einen Zeiger auf die INSSBuffer-Schnittstelle ab, indem Sie IWMWriter::AllocateSample aufrufen.
- Rufen Sie die Adresse des in Schritt 1 erstellten Puffers ab, indem Sie INSSBuffer::GetBuffer aufrufen.
- Kopieren Sie Ihre Beispieldaten an den Pufferspeicherort, und stellen Sie sicher, dass das übergebene Beispiel in den zugeordneten Puffer passt. Sie können eine beliebige Speicherkopierfunktion verwenden, um Ihre Daten zu kopieren. Eine gängige Wahl ist memcpy, das in der C-Standardlaufzeitbibliothek enthalten ist.
- Aktualisieren Sie die im Puffer verwendete Datenmenge, um die tatsächliche Größe des Beispiels widerzuspiegeln, indem Sie INSSBuffer::SetLength aufrufen.
- Übergeben Sie die Pufferschnittstelle zusammen mit der Eingabenummer und der Beispielzeit mit der IWMWriter::WriteSample-Methode an den Writer. Alle Audiobeispiele für eine Eingabe stellen die gleiche Dauer des Inhalts dar, sodass Sie die Beispielzeit ermitteln können, indem Sie die Beispieldauer zu einer ausgeführten Gesamtsumme hinzufügen. Für Videos müssen Sie die Zeit basierend auf der Bildfrequenz berechnen.
WriteSample funktioniert asynchron und beendet das Schreiben der Daten aus dem Puffer möglicherweise nicht, bevor Ihre Anwendung bereit ist, die Methode erneut aufzurufen. Daher ist es wichtig, "AllocateSample " für jeden Aufruf von WriteSample einmal aufzurufen. Sie können die INSSBuffer-Schnittstelle jedoch sofort nach dem Aufruf von WriteSample freigeben.
Wenn Sie die Beispiele übergeben haben, rufen Sie IWMWriter::EndWriting auf.
Hinweis Es ist wichtig, dass Beispiele aus allen Streams in der Datei synchron an den Writer übergeben werden. Das heißt, Wenn möglich, sollten Sie Beispiele in der Präsentationszeitreihenfolge innerhalb der in IWMWriterAdvanced::SetSyncTolerance angegebenen Synchronisierungstoleranz an den Writer übergeben. Die besten Ergebnisse werden erzielt, wenn Daten in Einheiten von einer Sekunde oder weniger an jeden Stream übermittelt werden.
Streams sollten auch ungefähr zur gleichen Zeit enden. Beispielsweise sollten Sie keine Datei mit einem Audiostream mit einer Länge von 45 Sekunden und einem Videostream mit einer Länge von 50 Sekunden schreiben. Wenn Sie eine solche Datei mit unveränderten Eingaben codieren, werden einige der Audiodaten am Ende des Datenstroms gelöscht (obwohl es sich um den kürzeren Stream handelt). Damit die Dateicodierung funktioniert, sollten Sie der Audioeingabe 5 Sekunden Stille hinzufügen, damit ein Stream nicht mehrere Sekunden vor einem anderen endet. Es ist nicht erforderlich, dass Streamtypen mit zeitweiligen Beispielen, wie Text- oder Bilddatenströme, auf diese Weise aufgefüllt werden. Skriptbefehlsstreams sollten auch alle diese Regeln befolgen.
Zugehörige Themen