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]- Port 8090
- BindAddress 0.0.0.0
- MaxHTTPConnections 2000
- MaxClients 1000
- MaxBandwidth 1000
- CustomLog -
- # Suppress that if you want to launch ffserver as a daemon.
- NoDaemon
- <Feed feed1.ffm>
- File /tmp/feed1.ffm //作為緩衝檔案存在,編碼後的檔案放在這個檔案裡面
- FileMaxSize 200K
- </Feed>
- <Stream test.flv>
- Feed feed1.ffm //Feed 作為關鍵字,這種的檔案還需要ffmpeg重新編碼再輸出給Feed1.ffm
- Format flv
- StartSendOnKey
- </Stream>
- <Stream cloudTest.flv>
- File "/路徑/cloud.flv" //file 作為關鍵字,這種檔案不需要編碼,ffmpeg可以直接進行播放, 需要有路徑
- Format flv
- </Stream>
- <Stream stat.html>
- Format status
- ACL allow localhost
- ACL allow 192.168.0.0 192.168.255.255
- </Stream>
- <Redirect index.html>
- URL http://www.ffmpeg.org/
- </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