Így készült egy videomegosztó

Csináltam egy videomegosztót. Nem nagy szám. Van már n db. De ha azt vesszük, hogy egy “garázsba” készült, magam készítettem, egyedül (programozás, server háttér), meetingek, milliók nélkül, akkor igen is nagy szám. Nekem az. Az oldal szinte fogad minden manapság menő viccformátumot (swf, pps, video, szöveg, képek). Statisztikák, érdekességek a képtelenség.hu technikai hátteréről.

Szerver

  • Core 2 Quad Q6600, 5db WD 250GB RE HDD, 4 GB RAM
  • OpenSuSE 10.3 x86_64 (2.6.22.13-0.3-default)
  • Apache 2.2.4
  • PHP5 5.2.5
  • eAccelerator 0.9.5.2
  • xDebug 2.0.2
  • MySQL 5.0.45
  • Postfix, Courier, ProFTPD (mysql backend)
  • Backup: reoback
  • MRTG
  • Nagios

A server összeállítása összerakással, tesztelésekkel együtt 1 hónapot vett igénybe, ebbe benne volt az is, hogy az oldal a szerveren lett készre fejlesztve. A vas jól vizsgázott, 3 napig hajtottuk az ab2-vel és a Microsoft Web Application Stress Tool-lal 150-es loadot produkálva.

Szoftver oldal

Mysql

Statisztika majd lesz, de előtte nézzük meg két említésre méltó osztályát az oldalnak. Első körben a mysql class. A mysqlt egy saját fejlesztésű layer szolgálja ki, mely tartalmazza az általánosan használt methodusokat:

  • tábla lock pl.: $sql->lockWrite(”table”);
  • query pl.: $sql->query(”select 1″[, true|false]); //true esetén a $sql->cache_expire időtartamra kesseli a resultot
  • fetch pl.: $row = $sql->fetch(); vagy
    $result = $sql->get_field_array(array(”mezo1″,”mezo2″,stb)); //utolsó query eredményéből a felsorolt mezők értékével tér vissza
  • num_rows
  • clause, order, limit beállítás
  • insert pl.: $sql->insert(”tabla”,$row); // a $row = array(”mezo”=>”mezoertek”); tartalmat beszurja a “tabla”-ba.
  • update pl.: $sql->clause(” id=’1′ “); $sql->update(”tabla”,$row); updateli a rekordot, ahol az id=’1′

Az osztály képes lekérdezésenként egyedi cache idő kezelésére, a cache könyvtár további 256 alkönyvtárra van bontva (00,01,02,…fd,fe,ff) oda helyezi el a lekérdezéset eredménytömbjét serializált formátumba. Mindezt a tudást 368 sorba sikerült beletolni.

Médiakezelés

A média osztály szolgálja ki a feltöltéskor, illetve e-mail feldolgozáskor érkező fájlokat. Amiket tud:

  • kezeli feltöltésből és könyvtárból származó fájlokat
  • valid fájltípusok (mime és kiterjesztés alapján): mit fogadhat el
  • fájltípusonként egyedi méret limit
  • képekből korlátlan thumnail készítés, vízjel felhelyezés
  • videoból thumbnail
  • fájlok médiainformációinak kinyerése: swf, mp3, videok, képek: mérete, hossza, stb
  • queue kezelés

A queue kezelés nem más, mint mikor egy külön könyvtárba gyűjtjük a fájlokat későbbi feldolgozás címén. Ehhez bármikor hozzáadhatunk, avagy kitörölhetünk fájlokat. Kinyitjuk, hozzáadunk fájlokat, leellenőrizzük hogy jó-e a file (ezt visszakapjuk eredménykénet), majd bezájuk. A korábban mutatott filefeltöltésnél erre van ugyanis szükség. Mivel egy-egy fájl feltöltése külön-külön folyamatként történik, ezért gyűjteni kell, és tudni, mi tartozik valójában egybe. A működés egyszerű:

  • példányosítás
  • queue nyitás
  • file hozzáadása a queue-hoz, és további információk fájlonként:
    • hol a végleges helye
    • mi legyen a neve
    • thumbnail-ek száma, mérete
    • vízjel kell-e
    • adatbázisban tárolja-e a file paramétereit
  • file ellenőrzése, hiba esetén a file eldobása
  • queue bezárás

A fentieket fileonként ismételjük, legvégül queue megnyitás után véglegesíteni kell a queue-t, ami annyit jelent, hogy a fájlokon el kell végezni a szükséges műveleteket, és a helyükre másolni. Ezzel a classal gyakorlatilag le van fedve szinte minden média kezelése. Bárhol alkalmazható.

A videokat ffmpeg-php és ffmpeg kódolja.

Statiszika

Az oldalt többnyire osztályok szolgálják ki, melyek a következők:

  • login (192 sor)
  • hozzásólások kezelése (200 sor) //hozzáadás, lekérés, utolsó hozzászólások
  • média kezelés (700 sor)
  • regisztráció (200 sor)
  • címkéző (250 sor) //címkék kezelése, hozzáadás, lekérés, felhő generálás
  • thumbnail (176 sor) //thumbnail készítés, vízjelezés, média class ezt használja
  • validator (160 sor) //email, pénznem, float, számok, datetime, date, password, stb validálását végző osztály, használata egyszerű:
    $validator = new validator();
    $validator->item($var, array(”required”,”email”),array(”nem adtál meg mélt”,”rossz a mél”));
    $validator->item($var1, array(”url”),array(”hibás url”));
    if($validator->valid()){ //helyes
    } else { //nem jó valami
    $validator->message();
    }
  • phpmailer. levelezés. ehhez fejlesztés alatt van egy extend, ami lehetővé teszi a queuek kezelést. Szintén: levél belemegy a queueba, és később küldjük el. Hasznos lehet, mikor ajaxszal van megoldva a hozzászólás, mint esetünkben, mert hozzászóláskor nézzük meg, hogy az adott témára kik vannak feliratkozva, és azoknak levelet kell küldeni. Ebben az esetben nem kell megvárni, hogy a levelet ténylegesen elküldje a script, a queueba rakás sokkal gyorsabb.

És ha már statisztika, a mysqlben dolgozik 3 db view és 3 db trigger is:

  • view: hozzászólások tartalmanként
  • view: címkékként a tartalom
  • view: pontozás tartalmanként
  • trigger: after insert, after delete on comments: hozzászóláskor a tartalom táblában frissíti az összes hozzászólás mezőt (cache)
  • trigger: after insert on votes: értékeléskor frissíti a tartalom táblában az értékeléshez tartozó mezőket (cache)

A triggerek használják a viewkat, így ez mysqlen belül van elintézve a “statisztika cache”. Talán gyorsabb.

Fájl statisztika

  • 70 db template file 103k méretben
  • az oldalt 13 modul építi fel, 150k
  • összesen 42 háttérfile és class (php) ~425k
  • 5 db css 28k
  • 10 db js 222k

Az uj oldal fejlesztése 2007 augusztusában kezdődött, majd kisebb kihagyás után novemberben folytatódott, összesen kb. 3 hónap folyamatos munka. 2008 január 14.-én indult az uj felület, megannyi bugfix után az oldal stabilnak mondható. Meg is termelt azóta 700 MB tömörített logot. :)

Amit az oldal tud

  • Az oldal képes a következő tartalmak megosztására: flash, flash játékok, pps, video, mp3, képek, office dokumentumok, szöveges tartalom (viccek)
  • Az oldalon szinte minden tartalom követhető RSS csatornákon keresztül
  • Hozzászólási lehetőség a tartalomhoz, e-mail értesítéssel, ha hozzászólás történik
  • Tartalom ajánlása e-mailben, regisztrált tagok igény szerint csatolhatják a képeket az e-mailhez
  • Kép és video tartalom embed lehetőség. (beillesztés weboldalba)
  • A videolejátszó fel van készítve videoreklámok lejátszására
  • Feltöltött video tartalom automatikusan elérhető 3gp mobil video formátumban is
  • Címkézés, csatornák
  • Regisztrált felhasználónak lehetőségük van az MSN Messenger partnereit importálni a személyes címjegyzékébe

Helyzet

Pairg:

Sajnos a magyar egyemberes kezdeményezések szinte már megszületésükkor halálra vannak ítélve. Mindössze két lehetőségük van a túlélésre:
1. Egy multi felvásárolja, és megreklámozza.
2. A hazai híroldalak felemelik, és “reklámozzák”. Ám az összes híroldal a multik érdekeltségi körébe esik, így azok nem nagyon szeretik hirdetni az önálló kezdeményezéseket. Főleg, ha már nekik is van egy hasonló alkalmazásuk.

Meglátjuk mi lesz. Egy biztos. Igyekszünk minőségi hülyeségeket gyűjteni.

8 hozzászólás

  1. cett, 2008. február 2., 20:20

    Gratulálok a cikkhez is és az oldalhoz is!

     
  2. Benjamin, 2008. február 3., 1:05

    Ugyes, de tenyleg, a sok szabadido csodakra kepes! :) Azt lehet tudni h. a szervert, havi hostolast, stb.-t ki / mi finanszirozza?

     
  3. cadmagician, 2008. február 3., 11:12

    szerver saját befektetés, szabadidő saját befektetés, a hostolást meg ugy oldottam meg, hogy jön még a vasra két nagyobb látogattottságú oldal teljes “supportommal”, és talán jut is, marad is. :):D

     
  4. cett, 2008. február 3., 12:25

    gratulálok a post-hoz is, és az oldalhoz is!

     
  5. Benjamin, 2008. február 3., 15:25

    cadmagician: meg vmi marketinges kellene aki segit felfuttatni… :)

     
  6. kisPocok, 2008. február 20., 2:35

    Nagyon szeretem az oldalt, most látom, hogy arculatváltáson esett át. jobb mint az előző.
    tényleg gratula hozzá! :)

     
  7. nevemsenki, 2008. március 15., 20:48

    Szia, én csak gratulálni szeretnék, kemény munka lehetett. Remélem beérik a gyümölcse.

     
  8. cadmagician, 2008. március 16., 12:47

    Köszönöm. Én is. :)

     

Új hozzászólás: