視頻支持拖動進度條播放的實現(基於nginx)

http協議下的flv/mp4流式播放支持的三個要點:php

1 服務器端要支持flv/mp4流式播放,如今nginx或者lighttpd都是支持這樣的應用的,還支持mp4的流式播放(默認編譯版本通常都是打開了flv流式播放,而mp4要本身編譯,若須要,也能夠本身編譯),但要專門配置。html

  參考文章《使用Nginx搭建flv流媒體服務器》nginx

  http://www.yanghengfei.com/archives/475/git

 

2 播放的flv/mp4有完整的mete信息,其中包括視頻分辨率、幀率等信息。有相應的軟件對通常的flv上添加這樣的標記信息,添加後的也支持通常的應用,並且數據量增長很少github

  參考文章《x264編碼器參數完整對照表》緩存

  http://www.php-oa.com/2009/03/09/ffmpeg_x264.html服務器

 

3 客戶端容許發生請求流式播放的請求,而且可以處理獲取的流式數據,從隨機點開始播放。app

  如jwplayer支持播放http流媒體。ide

  參考文章《JW Player使用簡介》網站

  http://j-coriolanus.blog.163.com/blog/static/64211038200992011745532/

  參考文章《基於nginx+jwplayer的flv流媒體》

  http://www.iinuu.eu/en/it-guru/flv-streaming-using-nginx-and-jw-player-5-1

  首先配置nginx服務支持flv模塊功能

  ⑴查看你的nginx是否已支持flv功能模塊

  [root@localhost ~]# /usr/local/nginx/sbin/nginx -V  //查看nginx服務支持

  結果:

  nginx version: nginx/0.8.24

  built by gcc 4.4.4 20100726 (Red Hat 4.4.4-13) (GCC) 

  configure arguments: --prefix=/usr/local/nginx --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module

  分析:個人nginx版本0.8.24,http_flv_module已經開啓,支持flv服務。

 

  ⑵安裝支持flv模塊的nginx服務器:

  #tar zxvf nginx-0.8.24.tar.gz

  #cd nginx-0.8.24

  #./configure --prefix=/usr/local/nginx  --with-http_flv_module --with-http_gzip_static_module --with-http_stub_status_module //開啓flv模塊

  #make && make install

  #/usr/local/nginx/sbin/nginx       //啓Nginx

 

  ⑶nginx服務器配置(nginx.conf文件)

  server

  {

  listen       80;

  server_name  localhost;   

  charset utf-8;

  location / {

  root   html;

  index  index.php index.html index.htm;

  }

  location ~ \.flv {

  flv;

  limit_rate_after 10m;

  limit_conn one 1;   

  limit_rate 85k;

  }

  }

  使用location 將 .flv的文件指向flv模塊便可。

  以上使用limit_rate 是爲了限速,當 flv視頻下載超過10M,則限速到85K,只容許用戶開1個進程,也就是先快速緩存能夠播放,後面的慢慢下載。

 

  ⑷安裝支持flv拖放進度條的播放器

  上面三步都是安裝支持nginx服務支持flv功能的,如今須要支持flv拖放進度條的播放器。

  你須要有一個可以播放Flv視頻的播放器,很顯然,它還須要可以嵌入到網頁中。目前比較流行的,功能上也還比較完善的一個Flv播放器就是 JW FLV Media Player(也稱爲 jwplayer)。它的網址是:

  http://www.longtailvideo.com/players/jw-flv-player/

  這個播放器支持視頻加入廣告和視頻節目單功能,下載包裏面有很全的實例和使用方式,將包中的player.swf(若是是帶有Viral插件的,就是player-viral.swf)放到你的網站內,這就是用來提供視頻播放的播放器。至於包中其它的文件,均可以不要。

  接下來,將播放器嵌入到你的視頻播放網頁中,直接嵌入,使用Object/Embed代碼嵌入:

  <embed  

  type="application/x-shockwave-flash"  

  id="player2"  

  name="player2"  

  src="player.swf"   

  width="328"   

  height="200"  

  allowscriptaccess="always"   

  allowfullscreen="true"     flashvars="file=http://192.168.40.135/test.flv&image=http://192.168.40.135/preview.jpg&autostart=false&type=http&streamer=start"   

  >  </embed>

  file:"video.flv", // FLV視頻地址

  type:"http",        // 數據類型,本文是基於http模式的,這個必須寫滴

  image:"preview.jpg",// 開始播放以前的預覽圖

  autostart:"false",  // 是否自動播放

  streamer:"start",   // 參數爲 「start」,這個參數用於傳遞給服務器從特定的關鍵幀開始播放,nginx編譯了 flv 模塊 因此是支持的。

  在使用jwplayer播放視頻,並進行跳轉時,會賂nginx服務器發起請求,相似

  "GET /video.flv?start=27503944 HTTP/1.1" 200 1752013"

  "GET /video.flv?start=88336188 HTTP/1.1" 200 13564873"

 

  ⑸添加關鍵幀

  若是一個Flv視頻要可以被拖到特定點播放,該Flv須要在其metadata中有關鍵幀的信息。

  使用mencoder轉換成的flv視頻默認每250幀加入一個關鍵幀。

  若是你的Flv視頻製做的時候沒有這些信息,也是不能拖放播放的。可使用yamdi來爲你的視頻加上關鍵幀信息 :

  安裝:

  1) [root@localhost ~]#wget http://sourceforge.net/projects/yamdi/files/yamdi/1.4/yamdi-1.4.tar.gz/download

  2) [root@localhost ~]#tar zxvf yamdi-1.4.tar.gz

  3 )[root@localhost ~]#cd yamdi-1.4/

  4) [root@localhost yamdi-1.4]#make && make install

 

  使用方法:

  yamdi -i source.flv -o dest.flv //原視頻 輸出視頻

 

  補充

  經過使用nginx-rtmp-module https://github.com/arut/nginx-rtmp-module 來增長對HLS的支持;

  nginx-rtmp-module 自己也支持RTMP協議,從而也能夠基於nginx來搭建在線直播系統。

相關文章
相關標籤/搜索