1. 程式人生 > >ffserver配置文件以及自己理解

ffserver配置文件以及自己理解

      最近打算學習h264,用windows版的git把x264的整個開源工程下載下來了,打算去看一下,同時儘量多做一些實踐運用,這個工程應該和介紹h264的標準文件結合起來看,其中涉及很多影象處理的專業和技術性問題,涉及linux和一些數學知識(離散餘弦變換DCT,傅立葉變換等)的運用,我對linux和這些數學知識都比較陌生,看來要花很多時間去學習了。

      windows版的git我使用的是msgit,在http://code.google.com/p/msysgit/downloads/list下載,安裝後在Git Bash使用命令git clone git://git.videolan.org/x264.git下載開源工程。

    在linux下使用ffplay播放視訊時,需要安裝sdl庫,要讓sdl支援ffplay,又要先安裝xorg-dev。安裝xorg-dev的方法是在liunx終端輸入sudo apt-get install xorg-dev(ubuntu發行版)

      ffserver是ffmpeg開源工程的一部分,主要用於把經過ffmpeg程式格式轉換和編碼後的資料(包括視訊、音訊、字幕、元資料等)流化,將資料封裝在NAL包中便於網路傳輸,目前支援TCP和RTP協議。

      ffserver的配置檔案如下:

[xhtml] 
  1. Port 8090 
  2. BindAddress 0.0.0.0 
  3. MaxHTTPConnections 2000 
  4. MaxClients 1000 
  5. MaxBandwidth 1000 
  6. CustomLog - 
  7. # Suppress that if you want to launch ffserver as a daemon. 
  8. NoDaemon 
  9. <Feed feed1.ffm>
  10. File /tmp/feed1.ffm                           //作為緩衝檔案存在,編碼後的檔案放在這個檔案裡面
  11. FileMaxSize 200K 
  12. </Feed>
  13. <Stream test.flv>
  14. Feed feed1.ffm                                    //Feed 作為關鍵字,這種的檔案還需要ffmpeg重新編碼再輸出給Feed1.ffm
  15. Format flv 
  16. StartSendOnKey 
  17. </Stream>
  18. <Stream cloudTest.flv>
  19. File "/路徑/cloud.flv"                            //file  作為關鍵字,這種檔案不需要編碼,ffmpeg可以直接進行播放,   需要有路徑
  20. Format flv 
  21. </Stream>
  22. <Stream stat.html>
  23. Format status 
  24. ACL allow localhost 
  25. ACL allow 192.168.0.0 192.168.255.255 
  26. </Stream>
  27. <Redirect index.html>
  28. URL http://www.ffmpeg.org/ 
  29. </Redirect>

開啟linux下的一個終端(相當於開啟windows下的一個命令列視窗),進入ffmpeg工程的目錄,輸入./ffserver -f doc/ffserver.conf &

按回車,就把ffserver啟動了,如果啟動不了,可以改一下ffserver.conf 檔案中的埠號配置試一下。

      這時在瀏覽器位址列輸入http://localhost:8090/stat.html就可以看到開啟的ffserver的概況,就現在這個配置檔案而言,從這個網頁上可以看到有兩個流被ffserver輸出,一個是test.flv,一個是cloudTest.flv,其中test.flv流需要ffmpeg先把資料編碼放在/tmp/feed1.ffm檔案中,然後ffserver把feed1.ffm檔案中的資料流化成test.flv;而cloudTest.flv流則是最簡單的,ffserver直接把本地檔案cloud.flv流化為cloudTest.flv,其中不需要ffmpeg參與格式轉換和編碼,所以這個流比test.flv流要流暢很多

     再開啟一個linux終端,在其中輸入./ffplay http://localhost:8090/cloudTest.flv就可以直接播放視訊檔案了。但是輸入./ffplay http://localhost:8090/test.flv則訪問不了,因為這時ffmpeg還沒有開始編碼資料,這時tmp/feed1.ffm檔案都不存在。

     ffserver.conf檔案有幾個特別關鍵的配置,一個是輸出流的格式,目前的格式是flv,如果是avi或者asf就不行,就訪問不了輸出流,其他的格式還沒有試過;一個是FileMaxSize,如果它小於了本地檔案dog.avi檔案的大小,則只能播放dog.avi檔案的一部分

     此外,ffserver還能流化攝像頭實時採集的視訊,但我還沒嘗試過。

自己理解

首先ffserver.conf 中分為

                   兩個口 :輸入口( input )和輸出口(Feed1..ffm)

                                    輸入是  <Stream   >               輸出口  <Feed feed1.ffm> 

                                   兩種input,一種是FIle(已經編碼好的檔案) , 一種是Feed(給Feed1.ffm提供實時流)

步驟:

1、配置ffserver.conf

2、執行   ffserver  -f   doc/ffserver.conf  ,此時可以通過瀏覽器檢視   http://127.0.0.1:8090/stat.html,檢視輸出的檔案

3、如果是檢視檔案的,直接ffplay   http://127.0.0.1:8090/cloudTest.flv    檔案就可以cloudTest.flv  (stream的名字,而不是檔案的名字)

              如果是檢視的Feed的,需要ffmpeg  -i  /路徑/檔案      http://127.0.0.1:8090/feed1.ffm    //給緩衝區填充資料,最後ffplay進行播放

NoAudio     

Strict   -1