seeseekey.net - Invictus Deus Ex Machina

Wer einen Easy­Cap Video­grab­ber (auch das Logi­Link VG0001 fällt dar­un­ter) besitzt, wird fest­stel­len müs­sen das die meis­ten die­ser Modelle nicht unter Mac OS X lau­fen. Das Pro­blem ist, das dass Gerät man­gels Trei­ber nicht erkannt wird und somit auch nicht genutzt wer­den kann.

Ein Logi­Link VG0001 (intern ein Easy­Cap DC60)

Mit dem Easy­Cap­Viewer gibt es einen ent­spre­chen­den Trei­ber für Mac OS X wel­cher unter GPL und BSD-Lizenz lizen­ziert ist. Damit han­delt es sich bei dem Trei­ber um freie Soft­ware. Der Down­load befin­det sich auf der offi­zi­el­len Seite, der Quell­code auf Git­Hub. Vor dem Start der Anwen­dung muss der Video­grab­ber ange­schlos­sen wer­den. Anschlie­ßend kann der Easy­Cap­Viewer gestar­tet wer­den und mit dem Auf­nah­me­vor­gang begon­nen werden.

Wenn man eine AVI Datei unter C# schrei­ben möchte, wird man fest­stel­len das es zwar viele Wege gibt, aber kei­ner die­ser Wege führt nach Rom. Jede vor­ge­schla­gende Vari­ante hat meist Abhän­gig­kei­ten, wel­che man nicht haben möchte. So wird bei vie­len Vari­an­ten FFMPEG als DLL genutzt, bei ande­ren wer­den Win­dows DLLs genutzt, was dazu führt das der Quell­code nicht unab­hän­gig von der Platt­form ist. Abhilfe schafft hier die freie unter der MIT-Lizenz lizen­zierte Biblio­thek Shar­pAvi. Um eine AVI-Datei zu schrei­ben sind mit Hilfe der Biblio­thek nur einige Zei­len Quell­text nötig:

//AviWriter anlegen
AviWriter writer=new AviWriter("test.avi");
writer.FramesPerSecond=25;

//Videostream anlegen
IAviVideoStream stream=writer.AddVideoStream();
stream.Width=1920;
stream.Height=1080;
stream.Codec=KnownFourCCs.Codecs.Uncompressed;
stream.BitsPerPixel=BitsPerPixel.Bpp24;

//Encode für Kompression anlegen
//Ohne Encoder wird die Datei unkomprimiert gepsiechert (stream.WriteFrame)
var encoder=new MotionJpegVideoEncoderWpf(stream.Width, stream.Height, 100);
var encodingStream=new EncodingVideoStreamWrapper(stream, encoder);

//Schwarzen Frame anlegen
byte[] frameData=new byte[stream.Width*stream.Height*3];

//Frames schreiben
for(int i=0;i<25; i++)
{
    encodingStream.WriteFrame(frameData, 0);
}

//Writer schließen
writer.Close();

In diesem Beispiel wird eine AVI Datei mit 25 schwarzen Frames erzeugt, was bei der angegebenen Framerate exakt einer Sekunde entspricht. Zu finden ist SharpAvi auf der offiziellen Webseite. Alternativ kann der Spiegel auf GitHub genutzt werden.