专栏首页大话swiftNGINX如何实现rtmp推流服务--鉴权篇

NGINX如何实现rtmp推流服务--鉴权篇

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

  • 推流
  • 拉流
  • 推流认证
  • 拉流认证
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的配置文件

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;          }      }}

我们起了一个服务,用于播放我们的推流内容,同时也可以模拟推流,访问

http://192.168.0.101:8080/

你也可以采用其他的推流软件,例如OBS Studio

具体情况下小伙伴们可以把ip地址改为自己的ip。 这里重点说一下nginx拉流和推流的限制

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;          }    }}

推流的限制

            on_publish http://127.0.0.1:8686/auth;

拉流的限制

            on_play http://127.0.0.1:8686/auth;

nginx在推流和拉流的时候会采用post的方式请求我们定义的地址,如果我们返回的HTTP状态码为200就可以进行拉流或者推流了,如果返回其他的状态码,例如401就会拒绝推流或者拉流。

再这里给大家讲解一下这个推流的地址的定义

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的代码 链接:https://pan.baidu.com/s/1iG2e0AdhbyWZ8-x67uO0jw 提取码:0y0i 复制这段内容后打开百度网盘手机App,操作更方便哦

本文分享自微信公众号 - 大话swift(gh_ca2266b7cab0),作者:寒云

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 用gorm谈谈mysql中的事务操作

    下面我们以gorm为例讲解一下,为什么,同时让大家熟悉一下gorm的是如何开启事务的。

    大话swift
  • findById引发的Java泛型思考

    在Android中最头痛的就是不停的findById需要不停的进行类型转换,那么怎么实现在findById的时候直接设置转换后的类型呢?

    大话swift
  • 使用golang写一个基本的服务器

    go自带基本的http系统,开源的go web服务相关的框架大多是基于此进行的扩展延伸,比如以快速小巧著称的gin,国人写的beego等,以及爬虫框架colly...

    大话swift
  • Dizzy Blog

    lpe234
  • 真的要比较 for 和 foreach 的性能吗?(内附性能比较的实测数据)

    2017-12-07 15:30

    walterlv
  • ASP.NET MVC的Razor引擎:IoC在View激活过程中的应用

    在《ASP.NET MVC的Razor引擎:RazorView》介绍BuildManagerCompiledView的时候,我们谈到默认使用的ViewPageA...

    蒋金楠
  • 仿网易栏目添加功能

    在qq群里面发现一个小伙伴有需要做类似于网易新闻客户端栏目拖拽添加的这种效果,特意做了类似效果,效果图如下(文章结尾有源码链接): ? ? ? ? 实现了点击...

    用户1337002
  • 重磅译制 | 更新:MIT 6.S094自动驾驶课程第3讲(2)CNN应用

    大数据文摘
  • 重磅译制 | 更新:MIT 6.S094自动驾驶课程第3讲(1)卷积神经网络

    大数据文摘
  • 如何支持RTSP播放H.265(HEVC)流

    随着H.265的普及,越来越多的开发者希望大牛直播SDK(Github)能支持低延迟的RTSP H.265播放,并分享相关经验:

    daniulive

扫码关注云+社区

领取腾讯云代金券