Tweede webcam

Bij een nieuw jaar hoort een nieuwe gadget. Dus heb ik gisterenavond eindelijk eens de tweede webcam gerealiseerd. De eerste webcam die al een tijdje draait is een analoge camcorder. Deze tweede camera is een digitale camcorder waarvan het tape-loopwerk aan gort is. Maar via firewire doet hij nog prima dienst als webcam.

Het daadwerkelijke aan de praat krijgen had nogal wat voeten in aarde. In eerste instantie leek het erop alsof een laatste Ubuntu upgrade mijn hele firewire setup in de war had gegooid. Rare DMA aborted meldingen enzo. Dus besloot ik dan op die machine ook maar Mandriva te gaan installeren. Toen ik ging kijken welke harde schijven ik beschikbaar had, werd ik blij verrast: er zat gewoon nog een 60GB schijf ongebruikt in die machine!

Goed, daar Mandriva op (na eerst te moeten constateren dat de dvd brander/lezer stuk was): problemen hielden aan. Na wat driftig vloeken dus maar eens gaan rommelen met de volgorde van de PCI kaarten (had ik eerder ook al gedaan, en toen leek het goed). Uiteindelijk, met veel puzzelen, een nieuwe volgorde gevonden die het naar tevredenheid doet.

Volgende probleem: een goede tool vinden die om de zoveel tijd een frame van de fireware pakt, en dat opslaat als jpeg. Dat bleek dus niet eenvoudig. Natuurlijk is er dvgrab, maar dat overschrijft de jpeg zelf, en dat is niet handig als een web-server die tegelijkertijd wil serveren aan een browser: strepen, rare kleuren, kortom geen mooi beeld.

Een oplossing leek het te zijn om dvgrab te instrueren 1 frame te grabben als DV, dit aan ffmpeg te voeren om er een jpeg van te maken. Die jpeg kan dan worden gerenamed zodat er nooit een half complete ‘tussenversie’ wordt getoond. Kan er gelijk een programmaatje overheen om een datum tekst in het plaatje te zetten. Het idee was leuk: echter elke seconde een paar keer dvgrab starten (en dus het firewire device openen en weer sluiten) dat gaat niet goed en na verloop van tijd zegt de driver: bekijk het maar.

Toen toch maar de enige juiste oplossing uitgevoerd: de broncode van dvgrab bekijken, vinden waar de jpeg wordt opgeslagen, en dat stuk code uitbreiden zodat er eerst naar een tijdelijk jpeg bestand wordt geschreven dat dan met rename() in 1 keer over de ‘live’ jpeg wordt gezet.

En nu loopt het dus soepel en kan iedereen in de ochtendspits genieten van het bussenballet op Den Haag Centraal!

Flattr this

Leave a Reply