安裝ffmpeg:
下載FFmpeg和libx264的包ffmpeg-2.4.1.tar.bz2 last_x264.tar.bz2libx264需要yasm,所以先安裝yasm
- apt-get install yasm
然后安裝libx264
- aptitude install libx264-dev
也可以手動安裝libx264(原先libx264在ubuntu的軟件源里是沒有的只能手動安裝,現在有了就可以不用手動安裝了)解壓縮libx264
- tar -xjvf last_x264.tar.bz2
安裝libx264
./configure --enable-shared --enable-pic
make
make install
然后安裝ffmpeg,ffmpeg有許多依賴包,需要一個一個先安裝1. libfaac
aptitude install libfaac-dev
2. libmp3lame
aptitude install libmp3lame-dev
3. libtheora
aptitude install libtheora-dev
4. libvorbis
aptitude install libvorbis-dev
5. libxvid
aptitude install libxvidcore-dev
6. libxext
aptitude install libxext-dev
7. libxfixes
aptitude install libxfixes-dev
依賴包安裝完后,安裝ffmpeg先解壓縮ffmpeg
- tar -xjvf ffmpeg-2.4.1.tar.bz2
然后編譯安裝
./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-version3 --enable-nonfree --enable-postproc --enable-pthreads --enable-libfaac --enable-libmp3lame --enable-libtheora --enable-libx264 --enable-libxvid --enable-x11grab --enable-libvorbis
make
make install
Nginx+nginx-rtmp-module+ffmpeg搭建流媒體服務器:
Nginx本身是一個非常出色的HTTP服務器,FFMPEG是非常好的音視頻解決方案.這兩個東西通過一個nginx的模塊nginx-rtmp-module,組合在一起即可以搭建一個功能相對比較完善的流媒體服務器.
這個流媒體服務器可以支持RTMP和HLS(Live Http Stream)
從安裝開始
Nginx的安裝參照我之前的這個:
http://blog.csdn.net/redstarofsleep/article/details/45092127
不同的是在configure的時候需要增加nginx-rtmp-module的支持,下載好nginx-rtmp-module后解壓,然后nginx安裝時增加這個模塊(--add-module),其它都是一樣的.
./configure --prefix=/usr/local/nginx --with-pcre=/home/user/pcre/pcre-8.32 --with-zlib=/home/user/zlib/zlib-1.2.8 --with-openssl=/home/user/openssl/openssl-1.0.1i --add-module=/home/user/nginx-rtmp-module
FFMPEG的安裝參照上一篇:
http://blog.csdn.net/redstarofsleep/article/details/45092145
nginx配合ffmpeg做流媒體服務器的原理是: nginx通過rtmp模塊提供rtmp服務, ffmpeg推送一個rtmp流到nginx, 然后客戶端通過訪問nginx來收看實時視頻流. HLS也是差不多的原理,只是最終客戶端是通過HTTP協(xié)議來訪問的,但是ffmpeg推送流仍然是rtmp的.

安裝完成后,打開Nginx的配置文件nginx.conf進行配置
首先在里面加入rtmp的配置
rtmp {
server {
listen 1935;
Application myapp {
live on;
}
application hls {
live on;
hls on;
hls_path /tmp/hls;
}
}
}
然后,針對hls,還需要在http里面增加一個location配置
location /hls {
types {
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root /tmp;
add_header Cache-Control no-cache;
}
這是一個最簡單,最基礎的配置, rtmp監(jiān)聽1935端口,如果是hls的話用hls on開啟hls,并且為hls設置一個臨時文件目錄hls_path /tmp/hls; 其它更高級的配置可以參看nginx-rtmp-module的readme,里面有比較詳細的介紹其它的配置,并且它還提供了一個通過JWPlayer在網頁上播放的例子.
保存完配置文件后,啟動nginx,通過netstat -ltn命令可以看到增加了一個1935端口的監(jiān)聽.8080是nginx默認的http監(jiān)聽端口.
[JAVA] view plaincopy
# netstat -ltn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.1.1:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:1935 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN
tcp6 0 0 :::22 :::* LISTEN
tcp6 0 0 ::1:631 :::* LISTEN
然后用ffmpeg推流到nginx:
第一個是推到了上面配置的myapp上:
[java] view plaincopy
ffmpeg -re -i "D:downloadfilmaqgy2.mp4" -vcodec libx264 -vprofile baseline -acodec aac
-ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 rtmp://server:1935/
myapp/test1
第二個推送到hls上:
[java] view plaincopy
ffmpeg -re -i "D:downloadfilmaqgy2.mp4" -vcodec libx264 -vprofile baseline -acodec aac
-ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 rtmp://ip:1935/
hls/test2
現在我們的流媒體服務器有兩個實時流了,一個是rtmp的,另一個是hls的,用流媒體播放器播放一下,流媒體播放器可以用vlc也可以用ffmpeg帶的ffplay.手機也是可以播放的.
上面這兩個流的地址分別是:
第一個就是推送的地址:
rtmp://serverIp:1935/myapp/test1第二個是HTTP地址:
http://serverIp:8080/hls/test2.m3u8最后貼上一段對于HLS這個比較特殊的流媒體協(xié)議的解釋:
HTTP Live Streaming(HLS)是蘋果公司(Apple Inc.)實現的基于HTTP的流媒體傳輸協(xié)議,可實現流媒體的直播和點播,相對于常見的流媒體直播協(xié)議,例如RTMP協(xié)議、RTSP協(xié)議、MMS協(xié)議等,HLS直播最大的不同在于,直播客戶端獲取到的,并不是一個完整的數據流。HLS協(xié)議在服務器端將直播數據流存儲為連續(xù)的、很短時長的媒體文件(MPEG-TS格式),而客戶端則不斷的下載并播放這些小文件,因為服務器端總是會將最新的直播數據生成新的小文件,這樣客戶端只要不停的按順序播放從服務器獲取到的文件,就實現了直播。由此可見,基本上可以認為,HLS是以點播的技術方式來實現直播。由于數據通過HTTP協(xié)議傳輸,所以完全不用考慮防火墻或者代理的問題,而且分段文件的時長很短,客戶端可以很快的選擇和切換碼率,以適應不同帶寬條件下的播放。不過HLS的這種技術特點,決定了它的延遲一般總是會高于普通的流媒體直播協(xié)議
用開源nginx-rtmp-module搭建flash直播環(huán)境
1、將nginx和nginx-rtmp-module的源碼包解壓PS:nginx-rtmp-module網址
https://github.com/arut/nginx-rtmp-module
2、進入nginx的源代碼目錄,編譯./configure --add-module=
--without-http_rewrite_modulemakemake install3、寫一個測試配置文件#user nobody;worker_processes 1;
error_log logs/error.log debug;#error_log logs/error.log notice;#error_log logs/error.log info;
#pid logs/nginx.pid;
events {worker_connections 1024;}
rtmp {server {listen 1935;
chunk_size 4096;
application myapp {live on;}}}
http {server {listen 8080;
location /stat {rtmp_stat all;rtmp_stat_stylesheet stat.xsl;}
location /stat.xsl {root /home/arut-nginx-rtmp-module-e5d61f2/;}
location / {root /home/arut-nginx-rtmp-module-e5d61f2/test/rtmp-publisher;}}}
4、啟動
nginx/usr/local/nginx/sbin/nginx -c
/home/arut-nginx-rtmp-module-e5d61f2/test/nginx.conf
5、用ffmpeg產生一個模擬直播源,向rtmp服務器推送ffmpeg -re -i ~/2012.flv -f flv
rtmp://192.168.11.75/myapp/test1注意,源文件必須是H.264+AAC編碼的。192.168.11.75是運行nginx的服務器IP
6、訪問
http://192.168.11.75:8080/stat,可以看到統(tǒng)計情況
7、網頁播放測試,用nginx-rtmp-module自帶的一個例子修改,
8、HLS測試(2013-4-20更新)修改測試的配置文件
nginx-rtmp-module還有許多其他特性,例如支持FLV/MP4的點播、HLS直播、多worker工作模式、push and pull工作模式等,以后慢慢挖掘
Nginx-RTMP功能調研:
1. RTMP協(xié)議介紹...2
2.RTMP server.3
2.1當前的流媒體server.3
2.2Wowza功能...3
3.Nginx-based RTMP server.5
3.1 Nginx rtmp 功能點...5
3.2編譯nginx rtmp模塊...6
3.3配置以及功能介紹...6
3.4用nginx-rtmp-module搭建直播環(huán)境...8
3.5Nginx rtmp對于HLS支持...13
協(xié)議介紹
RTMP(Real Time Messaging Protocol)實時消息傳送協(xié)議是Adobe Systems公司為Flash播放器和服務器之間音頻、視頻和數據傳輸開發(fā)的私有協(xié)議。
它有三種變種:
1)工作在TCP之上的明文協(xié)議,使用端口1935;
2)RTMPT封裝在HTTP請求之中,可穿越防火墻;
3)RTMPS類似RTMPT,但使用的是HTTPS連接;需要可以后臺私信‘資料’
RTMP協(xié)議就像一個用來裝數據包的容器,這些數據可以是AMF格式的數據,也可以是FLV中的視/音頻數據。一個單一的連接可以通過不同的通道傳輸多路網絡流。這些通道中的包都是按照固定大小的包傳輸的。

關注,私信【資料】免費獲取!
大廠C++面試題庫、BAT架構技術資料庫(關注小編,后臺私信【資料】)資料內容涵蓋BAT架構技術與面試真題,減少你到處搜索資料的時間,成體系的實戰(zhàn)技術知識,讓你面試、進階都更加容易!