Videoinspelning via Webb
Postat: 3 oktober 2005, 03:17:43
Det här projektet är ett exempel på när man har alldeles för mycket tid.
Jag ville ha en funktion där jag lägger in inspelningsuppdrag via en webbsida
för att sedan kunna spela upp mpeg-filen på min KISS-spelare (dp500).
Kraven var:
1 Att bara använda bråte som ändå låg och skräpade.
2 Energisnålt och ljudlöst då inspelning inte sker.
Webbservern kör jag på en gammal ombyggd laptop med Pentium 133 MHz. Ombyggnaden
innebär att skärmen och tangentbordet är borta. Resultatet är en mycket energisnål,
mindre än 20 Watt, burk som håller temperaturen riktigt bra. Den är nästan ljudlös,
men då jag har placerat den i en garderob uppfyller den kravet. Den används dessutom
för en massa andra saker så den står inte och surrar enkom för det här projektet.
Först tänkte jag använda NT4 server men den vägrade installera på den här datorn.
Till min förvåning fungerade istället Redhat 9.1 alldeles utmärkt. Den kör förstås
Apache, PHP samt MySql.
Jag hade ett gammalt videoredigeringskort för PCI-buss Snazzi med MPEG 1-hårdvarukomprim-
mering. Drivrutinerna är ok men fungerar bara för Windows 9x. Applikationen som sköter
inspelningen var halvtaskig. Det gick inte att ställa några tider i förväg och den
tar inga parametrar via kommandotolken. Att jag behövde ytterligare en burk för
Snazzi-kortet torde vara uppenbart. Jag plockade fram en gammal P2:a 350 Mhz från källaren.
Snazzi-kortet har ingen TV-tuner så jag tiggde till mig en trasig Stereo-video från en secondhand-
butik. Videon vägrade befatta sig med några videoband men det spelade ingen roll då jag bara skulle
använda TV-tunern.
Webbsidan var snabbt ihopsnickrad i PHP och jag går inte in i detalj på den programmeringen.
Data lagras i MySql och ett Cron-Jobb håller koll på när det börjar bli dags för en inspelning.
Jag använde Curl för att aktivera ett PHP-script som läser av databasen.
Det intressanta problemet börjar när Linuxmaskinen ska starta Windowsmaskinen. Vissa nätverkskort
är utrustade med en sk "wake on lan" - funktion. Jag lyckades inte få det att fungera alls.
Jag byggde istället en hårdvara som styrs från linuxmaskinens parallellport. Parallellporten
styrs av ett program skrivet i c och som får sina instruktioner via argument från PHP-scriptet.
Steg ett är att kolla om Windowsmaskinen är igång. Det gjordes enkelt genom att via en optokopplare
läsa av spänningen på Windowsmaskinens powerdiod. Om windowsmaskinen inte är på så kortsluts dess
powerknapp under en sekund med hjälp av ett relä. Resultatet är att den hoppar igång. Enkelt och
nära idiotsäkert.
Konstruktionen är väldigt enkel och det finns en mängd kretsbeskrivningar på nätet,
ett problem var dock att linuxdatorn, i likhet med många andra PC, skickar ut en massa skräp på
parallellporten då den bootar. Lösningen blev att reläet inte bara aktiveras
av en hög nivå på parallellporten utan även en hög nivå från en liten PIC 12F629. PIC:en håller sin nivå
låg tills den har aktiverats av en förvald byte på en av parallellportens utgångar som sedan hålls hög.
Så fort aktiveringsstiftet går låg eller PIC:en startas om inaktiveras stiftet som styr reläet och
parallellporten kan stå och skicka ut skräp bäst den vill utan att reläet aktiveras.
När Windowsmaskinen hoppar igång så startas ett bakgrundsjobb som jag kallar Snaxx.
Det är skrivet i Visual C++ version 6. Snaxx hämtar data från Mysql-databasen.
All kommunikation där Snaxx är aktiv part sker med libcurl och http-protokollet.
När den har hittat ett lämpligt jobb så kollar den om Videon är på. Videon har liksom
Windowsmaskinen sin powerled kopplad till ingångarna på linuxmaskinens parallellport.
Windowsmaskinen kommunicerar med videon via IR kopplat på serieporten och programmet
Winlirc ( http://winlirc.sourceforge.net/). Winlirc styrs ganska enkelt med hjälp av APIENTRY
Förutom att se till att videon är påslagen så ställs även rätt kanal in.
Resten är ganska ointressant ur elektroniksynvinkel. Snaxx fjärrstyr Videokortet Snazzis kassa
inspelningsprogram med hjälp av "virtuella musklick" SetCursorPos() och mouse_event().
Sedan stänger windowsmaskinen av sig och allt återgår till det normala. Dom nätverksanslutna
KISS-spelarna spelar upp filen direkt från hårddisk.
Resultatet är en inspelningsfunktion som är busenkel att använda. För att inte tala om hur praktiskt
det är om man är borta och glömt att spela in något. Då behöver man bara en internetansluten dator
för att lägga in en inspelning.
Jag vill inte rekommendera någon att bygga det här projektet som det ser ut nu. Men om någon är
intresserad av scheman och källkod så är det bara att maila.
[/img]
Jag ville ha en funktion där jag lägger in inspelningsuppdrag via en webbsida
för att sedan kunna spela upp mpeg-filen på min KISS-spelare (dp500).
Kraven var:
1 Att bara använda bråte som ändå låg och skräpade.
2 Energisnålt och ljudlöst då inspelning inte sker.
Webbservern kör jag på en gammal ombyggd laptop med Pentium 133 MHz. Ombyggnaden
innebär att skärmen och tangentbordet är borta. Resultatet är en mycket energisnål,
mindre än 20 Watt, burk som håller temperaturen riktigt bra. Den är nästan ljudlös,
men då jag har placerat den i en garderob uppfyller den kravet. Den används dessutom
för en massa andra saker så den står inte och surrar enkom för det här projektet.
Först tänkte jag använda NT4 server men den vägrade installera på den här datorn.
Till min förvåning fungerade istället Redhat 9.1 alldeles utmärkt. Den kör förstås
Apache, PHP samt MySql.
Jag hade ett gammalt videoredigeringskort för PCI-buss Snazzi med MPEG 1-hårdvarukomprim-
mering. Drivrutinerna är ok men fungerar bara för Windows 9x. Applikationen som sköter
inspelningen var halvtaskig. Det gick inte att ställa några tider i förväg och den
tar inga parametrar via kommandotolken. Att jag behövde ytterligare en burk för
Snazzi-kortet torde vara uppenbart. Jag plockade fram en gammal P2:a 350 Mhz från källaren.
Snazzi-kortet har ingen TV-tuner så jag tiggde till mig en trasig Stereo-video från en secondhand-
butik. Videon vägrade befatta sig med några videoband men det spelade ingen roll då jag bara skulle
använda TV-tunern.
Webbsidan var snabbt ihopsnickrad i PHP och jag går inte in i detalj på den programmeringen.
Data lagras i MySql och ett Cron-Jobb håller koll på när det börjar bli dags för en inspelning.
Jag använde Curl för att aktivera ett PHP-script som läser av databasen.
Det intressanta problemet börjar när Linuxmaskinen ska starta Windowsmaskinen. Vissa nätverkskort
är utrustade med en sk "wake on lan" - funktion. Jag lyckades inte få det att fungera alls.
Jag byggde istället en hårdvara som styrs från linuxmaskinens parallellport. Parallellporten
styrs av ett program skrivet i c och som får sina instruktioner via argument från PHP-scriptet.
Steg ett är att kolla om Windowsmaskinen är igång. Det gjordes enkelt genom att via en optokopplare
läsa av spänningen på Windowsmaskinens powerdiod. Om windowsmaskinen inte är på så kortsluts dess
powerknapp under en sekund med hjälp av ett relä. Resultatet är att den hoppar igång. Enkelt och
nära idiotsäkert.
Konstruktionen är väldigt enkel och det finns en mängd kretsbeskrivningar på nätet,
ett problem var dock att linuxdatorn, i likhet med många andra PC, skickar ut en massa skräp på
parallellporten då den bootar. Lösningen blev att reläet inte bara aktiveras
av en hög nivå på parallellporten utan även en hög nivå från en liten PIC 12F629. PIC:en håller sin nivå
låg tills den har aktiverats av en förvald byte på en av parallellportens utgångar som sedan hålls hög.
Så fort aktiveringsstiftet går låg eller PIC:en startas om inaktiveras stiftet som styr reläet och
parallellporten kan stå och skicka ut skräp bäst den vill utan att reläet aktiveras.
När Windowsmaskinen hoppar igång så startas ett bakgrundsjobb som jag kallar Snaxx.
Det är skrivet i Visual C++ version 6. Snaxx hämtar data från Mysql-databasen.
All kommunikation där Snaxx är aktiv part sker med libcurl och http-protokollet.
När den har hittat ett lämpligt jobb så kollar den om Videon är på. Videon har liksom
Windowsmaskinen sin powerled kopplad till ingångarna på linuxmaskinens parallellport.
Windowsmaskinen kommunicerar med videon via IR kopplat på serieporten och programmet
Winlirc ( http://winlirc.sourceforge.net/). Winlirc styrs ganska enkelt med hjälp av APIENTRY
Förutom att se till att videon är påslagen så ställs även rätt kanal in.
Resten är ganska ointressant ur elektroniksynvinkel. Snaxx fjärrstyr Videokortet Snazzis kassa
inspelningsprogram med hjälp av "virtuella musklick" SetCursorPos() och mouse_event().
Sedan stänger windowsmaskinen av sig och allt återgår till det normala. Dom nätverksanslutna
KISS-spelarna spelar upp filen direkt från hårddisk.
Resultatet är en inspelningsfunktion som är busenkel att använda. För att inte tala om hur praktiskt
det är om man är borta och glömt att spela in något. Då behöver man bara en internetansluten dator
för att lägga in en inspelning.
Jag vill inte rekommendera någon att bygga det här projektet som det ser ut nu. Men om någon är
intresserad av scheman och källkod så är det bara att maila.
[/img]