轉自:http://my.oschina.net/gaga/blog/478480
目錄[-]
一、軟件准備
由於nginx原生是為linux服務的,因此官方並沒有編譯好的windows版本可以下載,要在windows上使用nginx,要么下載源碼進行編譯,要么使用其他人已經編譯好的文件。
而要讓nginx支持視頻直播和點播,還需要第三方的nginx模塊:nginx-rtmp-module
所幸,已經有大神做好了nginx的編譯,而且集成了很多nginx模塊,其中就已經包括了nginx-rtmp-module。
下載地址:http://nginx-win.ecsds.eu/,詳細說明可參見:Readme nginx-win version.txt
我下載的是nginx 1.7.11.3 Gryphon這個版本。
這個網站同時也提供了vcredist的下載(x86,x64),以避免運行nginx時出現缺少庫的錯誤。
另外還要下載 stat.xsl 用於顯示當前ngix-rtmp服務狀態
另外還需要下載ffmpeg、ffplay、yamdi:
總結如下:
2. stat.xsl
4. yamdi
二、Nginx 配置
1. nginx配置
worker_processes 1;
error_log logs/error.log debug;
events {
worker_connections 1024;
}
rtmp {
server {
listen 1935;
application hls {
live on; #啟用rtmp直播
#地址為rtmp://[server]:[rtmp_port]/[app]/[stream]
hls on; #啟用hls直播
#地址為http://[server]:[http_port]/[app]/[stream].m3u8
#需要配合下面http段設置使用
hls_path nginx-rtmp-module/tmp/app/;
hls_fragment 5s;
recorder rec { #啟用錄制
record all manual; #手動控制錄制啟停
record_suffix _rec.flv;
record_path nginx-rtmp-module/tmp/rec/; #錄制保存地址
record_unique on;
}
}
application vod2{ #rtmp點播
play nginx-rtmp-module/tmp/rec/;
}
}
}
http {
server {
listen 18080;
location /stat { #服務器狀態
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
location /stat.xsl {
root nginx-rtmp-module/;
}
location /control { #控制器
rtmp_control all;
}
location /hls/ { #hls直播地址
#server hls fragments
types{
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
alias nginx-rtmp-module/tmp/app/;
expires -1;
}
location /vod/{ #hls點播地址
alias nginx-rtmp-module/tmp/rec/;
}
location / {
root nginx-rtmp-module/test/www/;
}
}
}
三、測試
1. 啟動nginx
start nginx_1.7.11.3_Gryphon\nginx
2. 推送rtmp流到nginx-rtmp
start ffmpeg\ffmpeg -re -i rtmp://live.hkstv.hk.lxdns.com/live/hks -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -acodec copy -f flv rtmp://localhost:1935/hls/mystream -loglevel quiet
3. rtmp直播
ffmpeg\ffplay "rtmp://127.0.0.1:1935/hls/mystream"
4. hls 直播
ffmpeg\ffplay "http://127.0.0.1:18080/hls/mystream.m3u8"
5. 開始錄制
http://127.0.0.1:18080/control/record/start?app=hls&name=mystream&rec=rec
6. 停止錄制
http://127.0.0.1:18080/control/record/stop?app=hls&name=mystream&rec=rec
7. 為rtmp點播文件添加索引,否則文件在播放時進度條不能拖動,假定剛才錄制的文件名為mystream-1428384476_rec.flv
yamdi\yamdi -i nginx_1.7.11.3_Gryphon\nginx-rtmp-module\tmp\rec\mystream-1428384476_rec.flv -o nginx_1.7.11.3_Gryphon\nginx-rtmp-module\tmp\rec\mystream-1428384476_rec_idx.flv
8. rtmp點播
ffmpeg\ffplay "rtmp://127.0.0.1:1935/vod2/mystream-1428384476_rec_idx.flv"
9. 制作hls點播分片文件
ffmpeg\ffmpeg -i E:\video-nginx\nginx_1.7.11.3_Gryphon\nginx-rtmp-module\tmp\rec\mystream-1428384476_rec.flv -acodec copy -bsf:a h264_mp4toannexb -g 105 -vcodec libx264 -vprofile baseline -bf 0 -bufsize 850k -bsf:v dump_extra -map 0 -f segment -segment_format mpegts -segment_list "E:\video-nginx\nginx_1.7.11.3_Gryphon\nginx-rtmp-module\tmp\rec\mystream-1428384476_rec\mystream-1428384476_rec.m3u8" -segment_time 10 E:\video-nginx\nginx_1.7.11.3_Gryphon\nginx-rtmp-module\tmp\rec\mystream-1428384476_rec\mystream-1428384476_rec-%d.ts
10. hls 點播
ffplay "http://127.0.0.1:8080/vod/mystream-1428384476_rec/mystream-1428384476_rec.m3u8"
