最近直播大火,直播推流软件遍地开花,那么用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的配置文件
代码语言:javascript复制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; } }}
我们起了一个服务,用于播放我们的推流内容,同时也可以模拟推流,访问
代码语言:javascript复制http://192.168.0.101:8080/
你也可以采用其他的推流软件,例如OBS Studio
具体情况下小伙伴们可以把ip地址改为自己的ip。 这里重点说一下nginx拉流和推流的限制
代码语言:javascript复制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; } }}
推流的限制
代码语言:javascript复制 on_publish http://127.0.0.1:8686/auth;
拉流的限制
代码语言:javascript复制 on_play http://127.0.0.1:8686/auth;
nginx在推流和拉流的时候会采用post的方式请求我们定义的地址,如果我们返回的HTTP状态码为200就可以进行拉流或者推流了,如果返回其他的状态码,例如401就会拒绝推流或者拉流。
再这里给大家讲解一下这个推流的地址的定义
代码语言:javascript复制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,操作更方便哦