Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
[De functie die is gekoppeld aan deze pagina, Windows Media Format 11 SDK, is een verouderde functie. Het is vervangen door Source Reader en Sink Writer. Bronlezer en Sink Writer zijn geoptimaliseerd voor Windows 10 en Windows 11. Microsoft raadt ten zeerste aan om nieuwe code te gebruiken bronlezer en Sink Writer- in plaats van Windows Media Format 11 SDK, indien mogelijk. Microsoft stelt voor dat bestaande code die gebruikmaakt van de verouderde API's, indien mogelijk opnieuw worden geschreven om de nieuwe API's te gebruiken.]
U kunt de Windows Media Format SDK gebruiken om ASF-bestanden te maken die digitale media bevatten die zijn gecodeerd met elke codec die u kiest. Wanneer u een andere codec gebruikt dan een codec die deel uitmaakt van deze SDK, moet u de volgende stappen uitvoeren.
- Codeer de inhoud met de gewenste codec.
- Zoek of maak een GUID-waarde om inhoud te identificeren die is gecodeerd met de codec die in stap 1 wordt gebruikt.
- Maak een nieuw profiel of wijzig een bestaand profiel voor gebruik met de gecodeerde inhoud.
- Maak een stream voor de gecodeerde inhoud met het juiste primaire type. Zie Mediatypenvoor meer informatie over belangrijke mediatypen. Gebruik de GUID die in stap 2 is geïdentificeerd als het mediasubtype.
- Stel de bitsnelheid en het buffervenster voor de stream in op waarden die niet resulteren in bufferoverloop. U moet deze waarden kunnen verkrijgen uit de codec op het moment van codering. De SDK-runtime-onderdelen controleren de bitrate- en buffervensterwaarden en laten indien nodig samples vallen om ervoor te zorgen dat de opgegeven gegevens binnen deze waarden passen. Als u de waarden onjuist instelt, wordt het bestand niet goed gestreamd, wat resulteert in slecht afspelen.
- Voor videostreams moet u de biCompression instellen lid van de BITMAPINFOHEADER structuur in de WMVIDEOINFOHEADER structuur op de juiste FOURCC-waarde voor de inhoud. Deze waarde moet gelijk zijn aan de eerste vier bytes van de GUID van het subtype. Als biCompression bijvoorbeeld MAKEFOURCC('T','E','S','T')=0x54455354 is, zal het subtype GUID beginnen als volgt: 54455354-XXXX-XXXX-XXXX-XXXXXXXXXXXX.
- Maak een schrijverobject en laad het profiel dat u in de vorige stap hebt gemaakt. Zie ASF-bestanden schrijvenvoor meer informatie over het schrijven van bestanden.
- Loop door de invoer van het bestand en wijs invoereigenschappen toe voor elk bestand zoals u dat normaal zou doen. Zie Werken met invoervoor meer informatie over invoer. Voor de stream die is gecodeerd met een codec van derden, stelt u de IWMInputMediaProps interfaceaanwijzer in op NULL- voordat u IWMWriter::BeginWritingaanroept.
- Gebruik het nieuwe profiel dat u in de vorige stap hebt gemaakt om het bestand te schrijven. Geef de gecomprimeerde voorbeelden door met behulp van IWMWriterAdvanced::WriteStreamSample- in plaats van IWMWriter::WriteSample-. Voor video moet u opgeven welke voorbeelden sleutelframes zijn door WM_SF_CLEANPOINT door te geven als de parameter dwFlags.
Als u de stream wilt verwerken en decomprimeren die is gecodeerd met een codec van derden, moet u gecomprimeerde streamvoorbeelden lezen. Uw leestoepassing moet ook de voorbeelddecompressie voor de stream verwerken.
MPEG-2-streams in ASF plaatsen
Notitie
Dit onderwerp is van toepassing op toepassingen die gebruikmaken van de Windows Media Format SDK om MPEG-2 (of andere compressie-indelingen die B-frames gebruiken) in de ASF-bestandscontainer te plaatsen.
Voor het writer-object moeten alle invoervoorbeelden tijdstempels hebben en wordt ervan uitgegaan dat elk invoervoorbeeld een presentatietijd heeft die later is dan het voorbeeld dat eraan voorafging. Hoewel vrijwel alle niet-gecomprimeerde video's en zelfs sommige gecomprimeerde videostreams aan deze voorwaarden voldoen, voldoen MPEG-2-streams niet. In MPEG-2 zijn niet alle samples voorzien van een tijdstempel, en als B-frames aanwezig zijn, is de volgorde van het decoderen van de samples niet hetzelfde als de renderingvolgorde. Wanneer de schrijver niet-op-volgorde staande samples tegenkomt, rangschikt het ze opnieuw in de 'juiste' volgorde. Als u MPEG-2-streams dus systeemeigen wilt opslaan (niet gedecodeerd) in een ASF-container, moet u de volgende stappen uitvoeren:
Bij het schrijven van het bestand:
- Voeg een extensie voor een gegevenseenheid met een vaste grootte (DUE) toe aan elk invoervoorbeeld dat een structuur bevat die de werkelijke MPEG-tijdstempel-begin- en stoptijdwaarden voor het voorbeeld bevat. Gebruik -1 voor deze waarden als het voorbeeld geen tijdstempel heeft.
- Geef het schrijfobject dummy invoertijdstempels die altijd toenemen, zodat de voorbeelden in exact dezelfde volgorde worden geschreven als ze worden ontvangen. De dummy-tijdstempels moeten ongeveer overeenkomen met de werkelijke presentatietijden, zoals gemiddeld in de loop van de tijd. De dummy-tijdstempels vormen de zoektijdlijn, dus als ze afwijken ten opzichte van de realtime stempels, zullen zoekbewerkingen op het bestand onverwachte resultaten opleveren. Een beperkte hoeveelheid jitter tussen de steekproeftijden heeft echter geen ernstige invloed op zoekbewerkingen.
Bij het lezen van het bestand:
- Controleer de DUE voor elk voorbeeld dat uit het bestand wordt gelezen. Als deze een begintijd bevat die groter is dan of gelijk is aan nul, kopieert u die waarde naar het tijdstempel voor het uitvoervoorbeeld voordat deze aan de decoder wordt geleverd. Stel alle andere tijdstempels op de uitvoervoorbeelden in op NULL-. In DirectShow wordt dit gedaan door IMediaSample::SetTime(NULL-,NULL-) aan te roepen).
Verwante onderwerpen