[ 5h0ck @ 17.05.2008. 15:07 ] @
Za ovo pitanje ću se pozvati na youtube (YT) resenje, jer mi je to odgovarajuca solucija. Dakle, na YT prikazivanje playera i fajla u njemu se određuje preko URL-a http://www.youtube.com/watch?v=GsCIG58PSYs gde GsCIG58PSYs predstavlja indifikator fajla

ovo je kod koji prikazuje player

Code:

<embed id="movie_player" width="480" height="395" flashvars="vq=null&video_id=GsCIG58PSYs&l=47&sk=IkcB4sVN7f7fM9fM6rKu9AApXEQMFKWBU&fmt_map=&t=OEgsToPDskKmIyiG-UM2kzftkfIkmzFk&hl=en&plid=AARNbS11m2JnqDF3AAAAAAA4AAA&playnext=0&enablejsapi=1" allowfullscreen="true" quality="high" bgcolor="#FFFFFF" name="movie_player" style="" src="/player2.swf" type="application/x-shockwave-flash"/>


opet izdvajam identfikator za video fajl video_id=GsCIG58PSY

Imam flash mp3 player koji da bi pustio pesmu mora da ima navedenu putanju do fajla. Ta putanja, kao i fajl se vidi što znači da može i da se preuzme, a ja bio želeo to da rešim na YT način.

O čemu se tu zapravo radi i kako se generiše ovaj ID koji je sličan md5 kripciji samo kraći?
Hvala.

Inače, primer koji sam uzeo za YouTube je zanimljiv i vredi pogledati.
[ Nemanja Avramović @ 17.05.2008. 16:11 ] @
Kako YT generiše kod to ne znam, ali oni imaju plejer specijalno pravljen za njih tako da mogu da ga zakomplikuju "do koske" ono što ti možeš da uradiš, ako koristiš neki od poznatih plejera, jeste da pozoveš npr. sajt.com/identifikator.mp3 gde je identifikator neki ID (ne mora ID kolona u tabeli da bude) mp3 fajla u bazi, a onda to sa mod_rewrite prepišeš na neki PHP fajl uz pomoć kojeg ćeš na osnovu ID-a da serviraš MP3 fajl koji će plejer pročitati sa neke treće lokacije.
Naravno, ovako će svako moći da skine mp3 fajl Ali i video snimke sa YT možeš skinuti, tako da...

Alternativa je da plejerov SWF direktno komunicira sa PHP skriptom (mislim da je moguće, ali ne znam kako) i onda se browseru pored IDa neće ništa slati tako da SWF može da doda neki svoj checksum koji će PHP fajl da prepozna i na osnovu toga da mu servira fajl, ali za to ti treba posebno pisan plejer.

edit:

E, sad se setih, radio sam nešto ranije slično što može da posluži.
Ako pogledaš sledeći link trebalo bi da se pojavi plej dugme. Klikom na njega kreće pesma.
http://www.eyesburnmusic.com/multimedia_audio.php?song=Soya

Ako analiziraš kod videćeš da mp3 servira mp3/mp3.php
Ako odeš direktno na link koji servira pesmu, trebalo bi da dobiješ "Di ces?" ()
http://www.eyesburnmusic.com/mp3/mp3.php?song=Soya.mp3
Ako odeš direktno na URL pesme, dobiješ 404 grešku, jer fajl Soya.mp3 ne postoji.
http://www.eyesburnmusic.com/mp3/Soya.mp3

Fora je u tome da stranica na kojoj je plejer setuje u sesiji jednu promenljivu koja kaže da može da se pusti pesma, a mp3.php proverava to i onda, ako nema promenljive u sesiji - izbacije "Di ces?" a ako ima onda servira mp3 fajl i odmah izbacuje promenljivu iz sesije, tako da sledećim pozivanjem fajla mp3.php promenljive više nema u sesiji i pesma neće biti servirana.

E sad, ovo radi ako plejer direktno pušta mp3, ali ako dobija xml listu kao većina plejera sa kojim sam imao prilike da se sretnem, onda nešto mora da se menja.

p.s. Bug se javlja kod stopiranja plejera pa ponovnog puštanja: pri ponovnom puštanju plejer će opet zatražiti pesmu od fajla mp3.php a pošto nema promenljive u sesiji, fajl će mu ispisati tekst umesto pesme, tako da plejer neće moći ponovo da pusti pesmu.
I da, plejer mora da ima opciju za autoplay aktiviranu, jer u suprotnom neće povući fajl i promenljiva će ostati u sesiji, tako da je dovoljno da neko otvori stranicu gde je plejer, a odmah zatim (pre pritiska na "play") mp3.php i dobiće mp3 fajl. Ako uključiš autoplay, do ovoga neće doći.

[Ovu poruku je menjao Nemanja Avramović dana 17.05.2008. u 17:59 GMT+1]
[ 5h0ck @ 18.05.2008. 10:54 ] @
Hvala Nemanja na opširnijem odgovoru. ;)

Da, pokušavo sam to sa mod_rewrite-om, ali opet ista priča u suštini.
Međutim, totalno sam smeo sa uma da mogu da izmenim swf i u njemu unesem početnu putanju ;)

Ovo sa sesijom je takođe zanimljivo samo mi nije jasno kako se izgubi sesija posle pauziranja pesme?!?
Zar ta sesija nije izgenerisana samo na toj strani i ne znam kako je povezana sa playerom?
[ 5h0ck @ 18.05.2008. 11:26 ] @
Kada sam već ovde, imam problema sa čitanjem fajla preko php-a, ili streaming...

Kod za pozivanje fajla je
Code:
flashvars="width=470&height=20&file=pesma.php"


U pesma.php sam ubacio

Code:
header('Content-Length: ' . filesize("pesma.mp3"));
header("Cache-Control: no-cache, must-revalidate");
header("Content-type: audio/mpeg");
readfile("pesma.mp3");


i kada otvorim samo taj fajl - radi.

Kada ga pozovem na gore prikazan način ne radi... ???
[ Nemanja Avramović @ 18.05.2008. 12:05 ] @
Možda tvoj plejer ne radi sa php fajlovima, odnosno filtrira da li mu je prosleđen mp3 ili neki drugi fajl. Rewrite-uj pesma.mp3 na pesma.php pa probaj tako.

Što se bug-a sa sesijom tiče: Sesija se izgubi odmah posle serviranja fajla. Pauziranje pesme i nastavljanje lepo radi jer je pesma učitana u plejeru, ali stopiranje pesme pa ponovno puštanje ne radi jer se ponovo učitava pesma, a sesije više nema. Evo ti primer:

plejer.php
Code:

<?php
session_start();
$_SESSION['play'] = true;
?>

<embed blabla... flashvars="width=470&height=20&file=pesma.php"...


pesma.php
Code:

<?php
session_start();
$play = $_SESSION['play'];

if (!$play) {
  die('skidanje pesme je zabranjeno');
}
else {
  unset($_SESSION['play']);
  session_destroy();
  header("Content-type: audio/mpeg");
  //ostali headeri, da ne prepisujem
  readfile('fajl.mp3');
}
?>


Kad korisnik otvori direktno pesma.php sesije nema i dobija poruku da ne može skinuti fajl.
Kad korisnik otvori plejer.php kreira se sesija, plejer povuče pesma.php, sesija postoji, fajl se servira i sesija se uništava, tako da ponovno pozivanje fajla pesma.php bilo od strane korisnika ili plejera rezultuje u neserviranju pesme (a kad stopiraš pesmu i pustiš opet, plejer izbacuje pesmu iz memorije i ponovo je učitava sa servera, kao da je direktno pozvan fajl pesma.php).
Ako se refreshuje strana plejer.php, sesija se ponovo kreira i pesma se pušta, nakon čega se odmah uništava sesija.

Ako ti nije uključen autoplay, korisnik otvori plejer.php, sesija se napravi. E sad korisnik može da ručno pozove pesma.php i dobiće mp3 fajl jer sesija nije uništena, zato što se ona uništava kad se prvi put pozove pesma.php posle kreiranja sesije (posle pozivanja plejer.php). Zato uključiš autoplay da bi prvo pozivanje obavio swf plejer, a ne korisnik preko browsera

Nadam se da je sad malo jasnije?
[ 5h0ck @ 18.05.2008. 12:52 ] @
Aha, u tome je caka...

Koristim ovaj player.

Veoma je složen proces celog playera i omogućava veliki niz mogućnosti emitovanja kako .mp3, .flv tako i ostalih fajlova.
Pronašao sam kod njega mogućnost da postavim prefix URL u samom swf-u tako da time rešavam problem putanje plus još imam mogućnost da ga mod_rewrite -ujem. Znači ostaje mi još samo da otkrijem na koji način da pozivam .php umesto .mp3 fajla...
[ 1r0nM4n @ 19.05.2008. 07:52 ] @
Koristim i ja JeroenWijering player na MySpace-u. Pošto on ima mogućnost da koristi playlistu u .xml formatu ubacio sam u source flash-a putanju do tog .xml fajla. Kada neko pogleda HTML kôd gde je ubačen flash neće videti putanju do playliste.

Playlistu pravi PHP:

Code:

// $songs je (sortirani) niz pesama

echo "<playlist version=\"1\" xmlns=\"http://xspf.org/ns/0/\">";
echo "\n\n<!-- 1r0nM4n - www.irondev.net - www.myspace.com/nenadbg -->";
echo "\n<!-- Total songs: ".count($songs)." -->\n";
echo "\n<trackList>";
foreach ($songs as $key => $val) {
    echo "\n<track>\n";
    foreach ($val as $key1 => $val1) {
        if($key1 == "creator") echo "<creator>".$val1."</creator>\n";
        else if($key1 == "title") echo "<title>".$val1."</title>\n";
        else if($key1 == "location") echo "<location>".$location.$val1."</location>\n";
        else if($key1 == "identifier") echo "<identifier>".$val1."</identifier>\n";
        
    }
    echo "</track>\n";
}

echo "</trackList>\n</playlist>";


U source-u flasha imam:

Code:
var height = 250;
var width = 430;
var file = "http://static.irondev.net/****/********.xml";
//var displaywidth = 0;
var showstop = true;
var repeat = list;
var shuffle = false;
var showdownload = false;


Na ovaj način URL do playliste ili do pesama može se videti samo kada se pogledaju HTTP header-i koje browser šalje. Može se smatrati da su putanje skrivene s obzirom da većina ljudi ne zna kako to da vidi..

p0zz
[ Predrag Supurovic @ 19.05.2008. 10:01 ] @
Sve dok vas browser ucitava externi dokument nema nacina da saktijete putanju do tog dokumenta, osim da zakomplikujete njeno otkrivanje. U vise navrata sma nailazio na takve pokusaje i nijedan nije uspeo da sakrije dokument vec samo da oteza nalazenje putanje.

Najocigledniji nacin je da se disasemblira flash objekat i u kodu pronadje kako on ucitava dokument ali ni to nije neophodno, dovoljno je propustiti konekcije kroz proxy i na proxy-ju logovati sve upite pa ce se sve putanje same otkriti.

[ 1r0nM4n @ 19.05.2008. 11:38 ] @
Citat:
dovoljno je propustiti konekcije kroz proxy i na proxy-ju logovati sve upite pa ce se sve putanje same otkriti.

Jednostavnije je sa Firefox-om i ovim: Live HTTP Headers
[ Nemanja Avramović @ 19.05.2008. 12:15 ] @
Citat:
Sve dok vas browser ucitava externi dokument nema nacina da saktijete putanju do tog dokumenta, osim da zakomplikujete njeno otkrivanje. U vise navrata sma nailazio na takve pokusaje i nijedan nije uspeo da sakrije dokument vec samo da oteza nalazenje putanje.


Naravno da nema šanse da se sakrije, ali može se kontrolisati kad se može pristupiti fajlu. Primer je ovo što sam gore objašnjavao.
Ni to nije teško zaobići, pogotovo zato što sam sad detaljno opisao postupak kako sve to radi, ali barem će običnim posetiocima biti koliko-toliko teže da skinu fajl
[ Nemanja Avramović @ 19.05.2008. 12:22 ] @
Citat:
1r0nM4n: Koristim i ja JeroenWijering player na MySpace-u. Pošto on ima mogućnost da koristi playlistu u .xml formatu ubacio sam u source flash-a putanju do tog .xml fajla. Kada neko pogleda HTML kôd gde je ubačen flash neće videti putanju do playliste.
...
Na ovaj način URL do playliste ili do pesama može se videti samo kada se pogledaju HTTP header-i koje browser šalje. Može se smatrati da su putanje skrivene s obzirom da većina ljudi ne zna kako to da vidi..


http://www.fileden.com/files/2...%20%28Cirez%20D%20Remix%29.mp3

ovo?

bez gledanja u headere
[ 1r0nM4n @ 19.05.2008. 18:31 ] @
Cini mi se da sam tebi dao link do playliste na msn-u? Nije meni ni bitno toliko da li ce neko da provali ili ne.. Vazno mi je samo da ne "trosim" bandwith previse...
[ Nemanja Avramović @ 19.05.2008. 18:56 ] @
Nope, mislim da mi nisi dao link. A čak i da jesi, nisam ga koristio sad
[ sojic @ 23.05.2008. 23:14 ] @
Pre neko vreme postavio sam temu, ali da se nadovezem.

Kako da "sakrijem" mms lokaciju?

Znaci... slicna problematika, samo sto osven file imam streaming mms://ip/video

Ovaj deo je bitan

Code:


  header("Content-type: audio/mpeg");
  //ostali headeri, da ne prepisujem
  readfile('fajl.mp3');



Koji header da posaljem za MMS protokol i kako da uradim "readfile" (dali ce da radi)?