windows - Indkode WebCam-rammer med H.264 på .NET

Indlæg af Hanne Mølgaard Plasc

Problem



Hvad jeg vil gøre, er følgende procedure:



  1. Få en ramme fra webkameraet.

  2. Kode det med en H264-giver.

  3. Opret en pakke med den ramme med min egen 'protokol' for at sende den via UDP.

  4. Modtag det og afkod det ...



Det ville være en live streaming.


Nå, jeg har brug for hjælp til det andet trin.
Jeg henter kamera billeder med AForge Framework.


Jeg vil ikke skrive rammer til filer og derefter afkode dem, det ville være meget langsomt gætte jeg.


Jeg vil gerne håndtere kodede rammer i hukommelsen og derefter oprette pakkerne, der skal sendes.


Jeg skal bruge en open source encoder. Allerede tryed med x264 efter dette eksempel


Hvordan indkoder man en serie billeder i H264 ved hjælp af x264 C API?


men synes at det kun virker på Linux, eller i det mindste det er det, jeg troede efter, da jeg så som 50 fejl, da jeg forsøgte at kompilere eksemplet med visuel c ++ 2010.


Jeg skal gøre klart, at jeg allerede lavede meget forskning (1 uge læsning) før du skrev dette, men kunne ikke finde en (enkel) måde at gøre det på.


Jeg ved, at der er RTMP-protokollen, men videostrømmen vil altid ses af en peroson på en (/the?) Tid, og RTMP er mere orienteret for at streame til mange mennesker. Også jeg allerede streamet med en Adobe Flash applikation jeg lavede, men var for laggy ¬¬.


Ønsker også at du giver mig et råd om, hvis det er ok at sende rammer en efter en, eller hvis det ville være bedre at sende flere af dem inden for hver pakke.


Jeg håber at i det mindste nogen kunne påpege mig (/ved?) Den rigtige retning.


Min engelsk er ikke god måske, bla bla undskyldninger. : P


PS: behøver ikke at være i .NET, det kan være på et hvilket som helst sprog, så længe det virker på Windows.


Mange mange mange mange mange tak på forhånd.

Bedste reference


Du kan prøve din tilgang ved hjælp af Microsofts DirectShow-teknologi. Der er en openource x264-indpakning tilgængelig til download på Monogram. [2]


Hvis du downloader filteret, skal du registrere det med OS ved hjælp af regsvr32. Jeg vil foreslå at lave nogle hurtige tests for at finde ud af om denne tilgang er mulig, brug GraphEdit værktøjet til at forbinde dit webcam til encoderen og se på konfigurationsindstillingerne.



  Ønsker også at du giver mig et råd om, hvis det er ok at sende rammer en efter en, eller hvis det ville være bedre at sende flere af dem inden for hver pakke.



Dette afhænger virkelig af den krævede ventetid: Jo flere rammer du pakker, jo mindre overskrift overhead, men jo mere latens, da du skal vente på, at flere rammer skal kodes, før du kan sende dem. For live streaming skal latensen holdes på et minimum, og de typiske protokoller, der anvendes, er RTP/UDP. Dette indebærer, at din maksimale pakkestørrelse er begrænset til MTU'en i netværket, der ofte kræver, at IDR-rammer bliver fragmenteret og sendt i flere pakker.


Mit råd ville være at ikke bekymre dig om at sende flere rammer i en pakke til/medmindre du har en grund til det. Dette er oftere nødvendigt med lydstrømning, da overskriftsstørrelsen (f.eks. IP + UDP + RTP) betragtes som stor i forhold til lydbelastningen.