FLV streaming izmantojot NGINX un JW Player 5.1

Tā nu reiz ir sanācis, ka radās vajadzība uzķīlēt ”mazo youtube”. Precīzāk, iespēju skatīties video webā un nodrošināt iespēju „pārtīt”. Īpaši šī funkcija svarīga gadījumos, kad video ir garš.

Tā nu reiz ir sanācis, ka radās vajadzība uzķīlēt ”mazo youtube”. Precīzāk, iespēju skatīties video webā un nodrošināt iespēju „pārtīt”. Īpaši šī funkcija svarīga gadījumos, ja video ir garš, jo ar salīdzinoši īsiem (un maziem) video, brīdī, kad viss video fails ir ielādējies, šī problēma vairs nav aktuāla.

Izmeklēto krustām šķērsām googlē atrodamo informāciju par to kā piedabūt JW Player un Nginx strādā, tā arī nedeva rezultātus. Tam par iemeslu – divas lietas, kas jāievēro:

1. flv failam jābūt metadata! Kodējot ar Adobe Video encoder šāda informācija netiek pievienota.
2. JW Player pie flashvars obligāti jānorāda provider=http.

 

Par FLV.

Līdz ar Flash strauju popularitāti ieguvis arī Adobes video formāts – flv. Formāts ir salīdzinoši jauns, radies kopš Flash 7 versijās, kas, kā lasāms iekš wikipedia.org laista klajā tikai 2003. Varu iedomāties, laikā, kad flash vēl nebija guvis tik lielu popularitāti, cik gausi gala lietotāji updeitoja flash playerus uz jaunākām versijām. Līdz ar ko, nebūtu pareizi uzskatīt, ka 2003. gadā FLV bija jau Latvijā :). Tagad ir!

Bez FLV pastāv viena trijām alternatīvām:
1. atskaņot video failu lasot to no servera. Rezultātā, būtu jāsagaida viss fails pirms to atskaņot. Atskaņotājs – kādu nu OS atbalsta, tāds arī atskaņos. Protams, vecais labais jautājums kādā formātā kodēt video.
2. Video kodējam nevis video formātā, bet gan izmantojam kādu no konteiner-formātiem – wmv, mov. Labums – failu var sākt atskaņot ielādējot to daļēji. Sliktums, to var atskaņot speciāls players un ej nu izdomā, gala lietotājam būs ar ko atskaņot vai nē.
3. Izmantojam media serveri. Visi meklējumi atrast opensource vai par saprātīgu cenu vainagojās ar neveiksmi. Kur nu vēl mediju faila pievienošana utt.

Instalācija.

Ja esat šārētā (shared) hostinga lietotājs – tālāk varat nelasīs, jo turpmāk aprakstītais prasīs gana plašas tiesības kaut ko labot serverī. Bet! Labā ziņa ir tā ka ir pseidostreaming, kam npieciešams tikai un vienīgi php un nekādas servera konfigurācijas nav nepieciešamas [4]. Pēdējam nebūs nepieciešams arī Nginx.

Tātad – Debian. Svaigs, kāds nu atrodams uz 2010. gada 27. aprīli. Derēs arī jebkura cita Linux distribūcija, tikai šis tas atšķirsies instalējot un mapju izvietojumā :)
Ņemiet vērā, ka uz šo brīdi Debian repozitārijā iekļauta nginx paka ir ar flv moduli.


Mana konfigurācija:

1. Apache2 uz 8080 porta, kas arī servē un darbojas ar php un ruby.
2. Nginx uz 80 porta, kas ir kā proxy un visu pārmet uz apache 8080 portu. Sīkāk šeit [2].

Nginx konfigurācija:

server {

  listen 80;

  server_name video.mydomain.tld;

  access_log /var/log/nginx/video.access.log;

  location ~ \.flv$ {
    flv;
    root /var/www;
  }

  location / {
    root /var/www;
    index index.html index.htm;
  }

}


3. Kodējam video uz flv. Šim mērķim var izmantot jebkuru konvertētāju. Linux vidē: ffmpeg -i "01.avi" -y -f flv -ar 44100 "movie.flv"
4. Vienojam klāt flv metadata. Arī izdarāms ar jebkuru rīku. Piemērma šis [5].
Linux vidē: flvtool2 -UP movie.flv
5. Lejuplādējam JW Player. Šeit [3].
6. Sagatavojam web lapu:

<div id="flashContent"></div>

<script type="text/javascript">
  var so = new SWFObject('player.swf','flashContent','720','576','9');
  so.addParam('allowfullscreen','true');
  so.addParam('allowscriptaccess','always');
  so.addParam('bgcolor','#FFFFFF');
  so.addParam("flashvars","file=movie.flv&provider=http");
  so.write('flashContent');
</script>

pieņemam, ka index.html atrodas tanī pašā mapē, kur video.


Pēc šīm darbībām visam vajadzētu strādāt! :)


Pārlecot playerī uz priekšu, nginx logos vajadzētu redzēt kaut ko šādu:

"GET /movie.flv?start=27503944 HTTP/1.1" 200 1752013
"GET /movie.flv?start=88336188 HTTP/1.1" 200 13564873


Ja nekas nestrādā: varbūt noder:
- Ja logos pie movie.flv redzam 404 kļūdu – nav pareiz root nginx konfigurācijā.
- Ja playerī nevar pārlekt un logos atrodams ieraksts movie.flv bez „start” atribūta – nav izveidoti vai nav pareizi izveidoti flv metadata atribūti.

 

[1] http://developer.longtailvideo.com/trac/wiki/Player5Formats
[2] http://kovyrin.net/2006/05/18/nginx-as-reverse-proxy/
[3] http://www.longtailvideo.com/players/jw-flv-player/
[4] http://stream.xmoov.com/
[5] http://www.buraks.com/flvmdi/

Dalies:
Novērtē: 5 (28)
Skatīts: 1261

komentāri

wieshka

principā jau pareizāk vēl būtu pārbaudīt vai video GOP size ir atbilstošs web videi, kā arī veikt video optimizāciju, lai flash nenoslogotu CPU neadekvāti :)

Varbūt kādreiz par to savā blogā uzrakstīšu :)

Ēriks

@wieshka nepacietībā gaidīšu! Cerams, pa šo laiku arī kas klāt nācis streaming lietās.



Ko lasa citi?