在Windows下搭建基於nginx的視頻直播和點播系統

轉自:http://my.oschina.net/gaga/blog/478480linux

 

目錄[-]nginx

1、軟件準備

因爲nginx原生是爲linux服務的,所以官方並無編譯好的windows版本能夠下載,要在windows上使用nginx,要麼下載源碼進行編譯,要麼使用其餘人已經編譯好的文件。git

而要讓nginx支持視頻直播和點播,還須要第三方的nginx模塊:nginx-rtmp-modulegithub

所幸,已經有大神作好了nginx的編譯,並且集成了不少nginx模塊,其中就已經包括了nginx-rtmp-moduleredis

下載地址:http://nginx-win.ecsds.eu/,詳細說明可參見:Readme nginx-win version.txtwindows

我下載的是nginx 1.7.11.3 Gryphon這個版本。服務器

這個網站同時也提供了vcredist的下載(x86x64),以免運行nginx時出現缺乏庫的錯誤。app

另外還要下載 stat.xsl 用於顯示當前ngix-rtmp服務狀態ide

另外還須要下載ffmpeg、ffplay、yamdi:測試

總結以下:

1. nginx 1.7.11.3 Gryphon

2. stat.xsl

3. ffmpeg、ffplay

4. yamdi

2、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/;
        }
    }
}

 

3、測試

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"
相關文章
相關標籤/搜索