Dela via


Sammanflätad videokodning (Microsoft Media Foundation)

Videodata som är avsedda att användas med datorer är vanligtvis progressiv, vilket innebär att varje bildruta kodas som en enda bild. Vissa enheter, till exempel TV-apparater, visar inte en ram på en gång, utan som två bilder. En av bilderna, eller fälten, innehåller alla jämna numrerade rader. Det andra fältet innehåller data för alla udda numrerade rader. Video som kodas med mer än ett fält per bildruta kallas interlace eftersom det återges genom att växla mellan det jämna och det udda fältet.

Tidigare var sammanflätat videoinnehåll alltid avflätat innan det kodades med Windows Media Video codec. Från och med Windows Media 9-serien stöder videokodaren dock komprimering av sammanflätat innehåll utan att först konvertera det till progressivt. Att upprätthålla sammanflätning i en kodad fil är viktigt om innehållet någonsin återges på en sammanflätad skärm, till exempel en TV. Den här funktionen är allt viktigare eftersom stöd för Windows Media-baserat innehåll sprids till DVD-spelare, digitalboxar och annan hemelektronik.

Det enklaste sättet att koda och leverera sammanflätad video är att utveckla ditt program med hjälp av Windows Media Format SDK och lagra innehållet i ASF-filer. Den sammanflätade informationen om ramar skickas till codec med hjälp av dataenhetstillägg, som fungerar bra för ASF-innehåll, men som är lite svårare att stödja i andra containrar. Mer information om tillägg för dataenheter finns i Använda tillägg för dataenheter.

För att stödja sammanflätad kodning ingår två viktiga steg: att hämta bildruteinformationen till kodaren och leverera informationen till renderingsprogrammet. De här stegen beskrivs i följande stycken.

Sammanflätad video och kodaren

Det första steget i kodning av video med bibehållen sammanflätning är att konfigurera kodaren för att koda sammanflätade fält. Det gör du genom att ange egenskapen MFPKEY_INTERLACEDCODINGENABLED till TRUE. Detta förbereder kodaren för att ta emot sammanflätade exempel. Varje indataexempel måste innehålla båda fälten.

Varje exempel som du bearbetar med kodaren efter aktivering av sammanflätad kodning bör ha ett dataenhetstillägg kopplat. Exempel utan det förväntade dataenhetstillägget antas vara progressiva. GUID som identifierar tillägget är D590DC20-07BC-436C-9CF7-F3BBFBF1A4DC. Värdena som skickas av objekten i Windows Media Format SDK definieras i följande tabell.

Värde Beskrivning
0x00000020 Anger att exemplet kodas med det nedre fältet först. Det här värdet är bara meningsfullt när det kombineras med det sammanflätade värdet.
0x00000040 Anger att exemplet kodas med det översta fältet först. Det här värdet är bara meningsfullt när det kombineras med det sammanflätade värdet.
0x00000080 Anger att exemplet är sammanflätat. Det här är det enda värde som är meningsfullt för de kodade DMO:erna.

 

Ett av de första två värdena kombineras alltid med 0x80 med hjälp av en bitvis OR-operation (eller) innan det ställs in på provet. Kodaren söker dock bara efter 0x80 och ignorerar resten av tillägget. Om tillägget identifierar exemplet som sammanflätat behåller kodaren exempelflätningen i den komprimerade strömmen och bäddar in en indikeringsflagga i strömmen så att avkodaren kan identifiera sammanflätade bildrutor. Varje sammanflätat exempel markeras så att källinnehåll som är en blandning av progressivt och sammanflätat kan kodas i en ström tillsammans.

Windows Media Format SDK-skrivarobjektet inkluderar utvidgningar av dataenheter för innehållstyp i de samplar som skrivs till dataavsnittet i ASF-containern för användning under återgivningen.

Läsa och återge sammanflätad video

Avkodaren identifierar sammanflätade exempel baserat på flaggan som anges i strömmen av kodaren. Som standard deinterlacar avkodaren exemplen och levererar progressiva utdata. Spelarprogrammet kan konfigurera avkodaren för att bearbeta utdata med bibehållen sammanflätning genom att ange egenskapen MFPKEY_DECODER_DEINTERLACING.

Svårigheten med sammanflätad videouppspelning uppstår när avkodaren levererar exemplen. Renderaren (grafikkortet eller chipet på en enhet) kan inte korrekt visa videoinnehållet utan att veta vilket fält som är vilket. I program som använder Windows Media Format SDK hämtas dataenhetstillägget för innehållstyp från de okomprimerade exemplen och kan skickas till enheten.

När du använder codec-objekten direkt sker ingen av den här dataöverföringen automatiskt. Du måste implementera stöd för dataenhetstillägg, både i buffertobjekten och i containern som du använder för ditt kodade innehåll. De vanligaste typerna av mediecontainrar (till exempel AVI) stöder inte metadata på exempelnivå. Du kan implementera ditt eget system för att lagra data i filen och associera dem med enskilda exempel, men endast en anpassad läsare skulle kunna hämta dem.

Not

Om du ställer in egenskapen MFPKEY_INTERLACEDCODINGENABLED till TRUEoch sedan inte skickar några prover med dataenhetstillägget för innehållstyp kopplat, kan det orsaka att kodaren kraschar. Ange kodaren för sammanflätad kodning endast om du har sammanflätade exempel att leverera.

 

Arbeta med video