简单测试nginx-http-flv-module和node-media-server

./configure --add-dynamic-module=/xxx/nginx-http-flv-module-master   

首先需要在编译nginx时把模块加入,下面的nginx.conf测试正常

user www-data;
worker_processes auto;
pid /run/nginx.pid;
load_module modules/ngx_http_flv_live_module.so;
events {
	worker_connections 768;
	# multi_accept on;
}

http {
	sendfile on;
	tcp_nopush on;
	types_hash_max_size 2048;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	gzip on;
		
	server {
        listen       2000;
            location /flv {
                flv_live on;
                chunked_transfer_encoding on;                
            }
            location ~ .*.(gif|jpg|jpeg|png|bmp|swf|js|css)$
            {
                expires 1d;
            }
  
            location /hls {
		    types{
		       application/vnd.apple.mpegurl m3u8;
		       video/mp2t ts;
		    }
		    alias /tmp/hls;
		    expires -1;
		    add_header 'Access-Control-Allow-Origin' '*';    
		    add_header 'Access-Control-Allow-Credentials' 'true';
           }      
            	        
        }	
}
rtmp_auto_push on;
rtmp_auto_push_reconnect 1s;
rtmp_socket_dir /tmp;

rtmp {
    out_queue           4096;
    out_cork            8;
    max_streams         128;
    timeout             15s;
    drop_idle_publisher 15s;

    log_interval 5s; 
    log_size     1m; 

    server {
        listen 1935;
       

        application myapp {
            live on;
            gop_cache on; 
        }

        application hls {
            live on;
            hls on;
            hls_path /tmp/hls;#推流要推到hls  ffmpeg -f video4linux2 -s 640x480  -i /dev/video0 -vcodec libx264 -f flv rtmp://127.0.0.1:11935/hls/my
        }

        application dash {
            live on;
            dash on;
            dash_path /tmp/dash;
        }
    }

   
}

 nginx-http-flv-module和node-media-server的核心功能应该是接收rtmp推流,然后多用户转发rtmp和http-flv。hls和dash在此基础上再多一步处理。流中继功能靠ffmpeg。比如用ffmpeg拉rtsp流推到服务器的rtmp端口。目前我认为这两种服务器不能用http推流。播放http-flv的网址参数不太容易理解,作了很多测试才弄明白。

下面是node的app.js

const NodeMediaServer  = require('node-media-server');

const config = {
  rtmp: {
    port: 1935,
    chunk_size: 60000,
    gop_cache: true,
    ping: 60,
    ping_timeout: 30
  },

  http: {
    port: 3000,
    mediaroot: '/tmp/media',
    allow_origin: '*'
  },
  trans: {
    ffmpeg: '/usr/bin/ffmpeg',
    tasks: [
      {
        app: 'myapp',
        hls: true,
        hlsFlags: '[hls_time=2:hls_list_size=3:hls_flags=delete_segments]',
        hlsKeep: true, // to prevent hls file delete after end the stream
        dash: true,
        dashFlags: '[f=dash:window_size=3:extra_window_size=5]',
        dashKeep: true // to prevent dash file delete after end the stream
      }
    ]
  }
}
var nms = new NodeMediaServer(config)
nms.run();



//ffmpeg -f video4linux2 -s 640x480  -i /dev/video0 -vcodec libx264 -map 0:v -f flv rtmp://127.0.0.1:1935/myapp/my
//ffmpeg -re -i 文件.mp4 -vcodec copy -acodec copy -f flv rtmp://ip地址/live/01
//ffmpeg -rtsp_transport tcp -i rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mp4 -vcodec h264 -f flv -an rtmp://nginx服务器ip地址:1985/myapp/test
const NodeMediaServer  = require('node-media-server');

const config = {
rtmp: {
    port: 1935,
    chunk_size: 60000,
    gop_cache: true,
    ping: 60,
    ping_timeout: 30
  },
http: {
    port: 3000,
    mediaroot: '/tmp/media',
    allow_origin: '*'
  },

relay: {
  ffmpeg: '/usr/bin/ffmpeg',
  tasks: [
     {
        app: 'iptv',
        mode: 'pull',
        edge: 'rtmp://127.0.0.1:11935/myapp',//pull 的时候   edge: 'rtmp://127.0.0.1:11935/myapp' 并且无name  播放rtmp://127.0.0.1:1935/iptv/my        
        //name: 'hks'          //static的时候   edge: 'rtmp://127.0.0.1:11935/myapp/my'  播放rtmp://127.0.0.1:1935/iptv/hks   
      },
  ]
}
}
var nms = new NodeMediaServer(config)
nms.run();

下面是测试用的浏览器端flv

<script src="flv.js"></script>
<video id="videoElement"  controls ></video>
<script>
    if (flvjs.isSupported()) {
        var videoElement = document.getElementById('videoElement');
        var flvPlayer = flvjs.createPlayer({
            type: 'flv',
            url: 'http://127.0.0.1:2000/live?port=11935&app=myapp&stream=my'//nginx
            //url: 'ws://127.0.0.1:3000/myapp/my.flv'//node
            //url: 'http://tvdrs.wsrtv.com.cn:8100/channellive/ch1.flv'
            //url: '/flv/video.flv'
        });
        flvPlayer.attachMediaElement(videoElement);
        flvPlayer.load();
        //flvPlayer.play();
    }
</script>

 hls

<script src="hls.js"></script>
<video id="videoElement"  controls ></video>
<script>
    
var video = document.getElementById('videoElement');   
var Hls = window.Hls
//var url = 'http://127.0.0.1:3000/myapp/my/index.m3u8'
//url = 'https://pulltv2.wanfudaluye.com/live/tv2.m3u8'
url = 'http://127.0.0.1:2000/hls/my.m3u8'
if (Hls.isSupported()) {
  var hls = new Hls()
  hls.loadSource(url)
  hls.attachMedia(video)
  hls.on(Hls.Events.MANIFEST_PARSED, function () {
    // video.play()
  })
} else if (video.canPlayType('application/vnd.apple.mpegurl')) {
  video.src = url
  video.addEventListener('canplay', function () {
    // video.play()
  })
}
    
</script>

 dash

<script src="dash.all.min.js"></script>
<video id="videoplayer"  controls ></video>
<script> 
 

     // var url = 'http://127.0.0.1:3000/myapp/my/index.mpd'
      var url = 'https://cdn-shop-lc-01.akamaized.net/Content/DASH_DASH/Live/channel(ott)/master.mpd'
     var player = dashjs.MediaPlayer().create();
player.initialize(document.querySelector("#videoPlayer"), url, true);

    
</script>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值