NGINX如何实现rtmp推流服务

最近直播大火,直播推流软件遍地开花,那么用NGINX如何进行推流呢?下面咱们就简单的介绍一下用NGINX的rtmp模块如何实现视频推流,咱们主要从一下几点介绍:html

  • 推流
  • 拉流
  • 推流认证
  • 拉流认证
package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"net/http"
)

func main() {
	router := gin.Default()
	router.Any("/auth", func(context *gin.Context) {
		name := context.PostForm("name")
		username := context.PostForm("username")
		password := context.PostForm("password")
		fmt.Println(name)
		fmt.Println(username)
		fmt.Println(password)
		if username == "hanyun" && password == "123456" {
			context.JSON(http.StatusOK, nil)
		} else {
			context.AbortWithStatus(http.StatusUnauthorized)
		}
	})
	router.Run(":8686")
}


复制代码

咱们在本地起了个golang的服务,监听8686端口,对密码为123456用户名为hanyun的用户返回HTTP状态码为200,其余的反水状态码为401。为何要这么作呢?后面阐述缘由。 nginx的配置文件nginx

worker_processes  1;

error_log  logs/error.log debug;

events {
    worker_connections  1024;
}

rtmp {
    server {
        listen 1935;

        application live {
            live on;
			on_publish http://127.0.0.1:8686/auth;
			on_play http://127.0.0.1:8686/auth;
        }
		
        application hls {
            live on;
            hls on;  
            hls_path temp/hls;  
            hls_fragment 8s;  
        }
    }
}

http {
    server {
        listen      8080;
		
        location / {
            root html;
        }
		
        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl {
            root html;
        }
		
        location /hls {  
            #server hls fragments 
            types{  
                application/vnd.apple.mpegurl m3u8;  
                video/mp2t ts;  
            }  
            alias temp/hls;  
            expires -1;  
        }  
    }
}

复制代码

咱们起了一个服务,用于播放咱们的推流内容,同时也能够模拟推流,访问git

http://192.168.0.101:8080/
复制代码

你也能够采用其余的推流软件,例如OBS Studio

具体状况下小伙伴们能够把ip地址改成本身的ip。 这里重点说一下nginx拉流和推流的限制github

rtmp {
    server {
        listen 1935;

        application live {
            live on;
			on_publish http://127.0.0.1:8686/auth;
			on_play http://127.0.0.1:8686/auth;
        }
		
        application hls {
            live on;
            hls on;  
            hls_path temp/hls;  
            hls_fragment 8s;  
        }
    }
}
复制代码

推流的限制golang

on_publish http://127.0.0.1:8686/auth;

复制代码

拉流的限制后端

on_play http://127.0.0.1:8686/auth;
复制代码

nginx在推流和拉流的时候会采用post的方式请求咱们定义的地址,若是咱们返回的HTTP状态码为200就能够进行拉流或者推流了,若是返回其余的状态码,例如401就会拒绝推流或者拉流。bash

再这里给你们讲解一下这个推流的地址的定义app

rtmp://192.168.0.101/live/stream?username=hanyun&password=123456
复制代码
  • rtmp://192.168.0.101/live 咱们的推流地址
  • stream为流名称,后端能够以post的方式接受到一个键值对name=stream,z这个是默认的
  • ?username=hanyun&password=123456 这些是本身定义的,具备很强的灵活性,小伙伴们能够本身定义

经过对这些的讲解咱们就只能够知道怎么进行拉流,推流,鉴权,小伙们能够本身动手试一下。 给你们附上已经安装rtmp的nginx代码和go的代码 连接:pan.baidu.com/s/1iG2e0Adh… 提取码:0y0i 复制这段内容后打开百度网盘手机App,操做更方便哦ide

相关文章
相关标签/搜索