Dela via


Skriva videobildexempel

[Funktionen som är associerad med den här sidan, Windows Media Format 11 SDK, är en äldre funktion. Det har ersatts av Source Reader och Sink Writer. Source Reader och Sink Writer har optimerats för Windows 10 och Windows 11. Microsoft rekommenderar starkt att ny kod använder Source Reader och Sink Writer i stället för Windows Media Format 11 SDK, när det är möjligt. Microsoft föreslår att befintlig kod som använder äldre API:er skrivs om för att använda de nya API:erna om möjligt.]

En videobildström är en video som innehåller en serie stillbilder. Bilderna kan flyttas inom ramen och varje bild kan blandas i nästa. Videobildströmmar kodas med hjälp av Windows Media Video 9 Image v2 codec. Utdatavideon liknar den som skapats av Windows Media Video 9 codec.

Om du vill skapa en profil som innehåller en videobildström börjar du med att räkna upp video codecs enligt beskrivningen i Hämta streamkonfigurationsinformation från Codecs. Sök efter den codec som stöder WMMEDIASUBTYPE_WVP2-undertypen.

När du har angett profilen för skrivarobjektet anropar du IWMWriter::GetInputProps för att hämta medieegenskaperna för videobildindataströmmen. Hämta medietypen från medieegenskaper genom att anropa IWMMediaProps::GetMediaTypeoch ändra undertypen till WMMEDIASUBTYPE_VIDEOIMAGE. Du bör ange videons bredd och höjd till de maximala dimensioner som behövs för att omfatta de bilder som du ska lägga till i strömmen. Ring sedan upp IWMMediaProps::SetMediaType med den ändrade indatatypen. Nu är du redo att börja skicka exempel till skrivarobjektet.

Varje exempel måste börja med en WMT_VIDEOIMAGE_SAMPLE2 struktur. Dessutom kan exempel innehålla bitmappsbilder. En bild är endast kopplad till ett exempel för den första bildrutan där den visas. Alla ytterligare bildrutor som använder den bilden behöver bara information i strukturen. Indatabitmappar måste formateras som RGB, 24 bitar per pixel.

Bitmappsfiler lagrar bilddata så att data för varje rad i avbildningen tar ett antal byte som är delbart med fyra. (Detta kallas för bitmappens steg.) Detta tvingar början av varje videorad till en DWORD- gräns, vilket gör kopieringen mer effektiv. Om bildraderna inte är jämnt delbara med fyra, fylls raden ut till närmaste högre multipel av fyra byte. När du bifogar bilddata måste du ta bort all utfyllnad som finns i slutet av data för varje rad.

Windows Media Video 9 Image v2 codec har upp till två bilder i minnet åt gången. Dessa bilder kallas för den tidigare bilden och den aktuella bilden. Varje bild har en uppsättning medlemmar i WMT_VIDEOIMAGE_SAMPLE2 struktur, som avgör hur bilden visas i ramen. Du kan lägga till en bild genom att ange dwControlFlags-medlemmen i WMT_VIDEOIMAGE_SAMPLE2 till WMT_VIDEOIMAGE_SAMPLE_INPUT_FRAME. När du skickar en indataram till codec blir den bilden den aktuella bilden. Den bild som var den aktuella bilden i föregående exempel blir vanligtvis den föregående bilden, och den bild som var den tidigare bilden i föregående exempel ignoreras. Du kan konfigurera en codec för att behålla den föregående avbildningen genom att ange medlemsvariabeln bKeepPrevImage till TRUE. I så fall ignoreras den bild som var den aktuella bilden i föregående exempel.

Den grundläggande sammansättningen av en videobildram bestäms av två faktorer för varje bild: intresseregion och blandningskoefficient. Intresseregionen för en bild definieras av en ursprungspunkt, bredd och höjd. Den del av en bild som identifieras som regionen av intresse fyller outputramen. Om intresseregionen har en annan storlek än utdataramen, ändrar codecen storleken på den. Bildens blandningskoefficient avgör blandningen av de två bilderna. Blandningskoefficienterna för de aktuella och tidigare bilderna måste vara totalt 1,0. Om till exempel fCurrBlendCoef är inställt på 0,5 och fPrevBlendCoef är inställt på 0,5, består utdataramen av en lika stor blandning av intresseregionerna från båda bilderna.

Genom att ändra intresseregionen för en bild kan du skapa panorerings- och zoomeffekter. Med blandningskoefficienterna kan du korstona (lösa upp) mellan bilder. Utöver dessa effekter kan du använda en av de fördefinierade övergångarna för att skapa mer komplexa ramar. De tillgängliga övergångarna beskrivs i avsnittet Video Image Transitions i den här dokumentationen. När du använder en övergång måste du konfigurera varje bildruta. Det enklaste sättet att göra detta är att skapa en funktion som stegvis ändrar medlemmar i WMT_VIDEOIMAGE_SAMPLE2 struktur för en fullständig effekt.

Mer information om de värden som ska anges för deformationer finns i WMT_VIDEOIMAGE_SAMPLE2.

Obs Om du vill inkludera ljud i en fil med en videobildström måste du använda okomprimerade ljudindata. Om du vill kombinera en videobildström med en befintlig komprimerad ljudström måste du dekomprimera ljudet och skicka exemplen i okomprimerat. Om du skickar komprimerade exempel till skrivaren när du skriver en videobildström uppstår ett fel, vilket resulterar i att exempel tas bort från videon.

Dessutom kan komprimerade videobildfiler utan ljudströmmar innehålla flera mycket små, mycket komprimerade videoramar i ett enda ASF-paket, vilket kan resultera i en dålig uppspelningsupplevelse i tidigare versioner av Windows Media Player. För att undvika det här problemet är den bästa lösningen att infoga en tyst ljudström i filen, även om detta också ökar filstorleken.

videobild

Skriva ASF-filer