Open ourfor opened 5 years ago
编译过程中遇到了这个问题:
../../nginx-rtmp-module/ngx_rtmp_eval.c: 在函数‘ngx_rtmp_eval’中:
../../nginx-rtmp-module/ngx_rtmp_eval.c:160:17: 错误:this statement may fall through [-Werror=implicit-fallthrough=]
160 | switch (c) {
| ^~~~~~
../../nginx-rtmp-module/ngx_rtmp_eval.c:170:13: 附注:here
170 | case ESCAPE:
| ^~~~
cc1:所有的警告都被当作是错误
make[1]: *** [objs/Makefile:1339:objs/addon/nginx-rtmp-module/ngx_rtmp_eval.o] 错误 1
make[1]: 离开目录“/root/rtmp/nginx/nginx-1.17.0”
make: *** [Makefile:8:build] 错误 2
编辑模块rtmp
源码下面的ngx_rtmp_eval.c
,发现case NAME
下面缺少了break
语句,将case ESCAPE:
移到这个情况下面就行了
145 case NAME:
146 if (c == '{' && name.data == p) {
147 ++name.data;
148 state = SNAME;
149 continue;
150 }
151 if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
152 continue;
153 }
154
155 name.len = p - name.data;
156 ngx_rtmp_eval_append_var(ctx, &b, e, &name, log);
157 /* fall through */
158 case ESCAPE:
159 ngx_rtmp_eval_append(&b, &c, 1, log);
160 state = NORMAL;
161 break;
使用/usr/local/nginx/sbin/nginx
就可以启动nginx
了,不过更建议你将nginx
做成系统服务
毕竟我是用nginx来推流,所以我要打开1935
这个端口,所以我会先在/usr/lib/firewalld/services
下面添加rtmp
这个文件,其内容为:
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>LIVE ON</short>
<description>RTMP VIDEO PLAYER</description>
<port protocol="tcp" port="1935"/>
</service>
然后使用firewall-cmd
来启用这个服务:
firewall-cmd --zone=public --permanent --add-service=rtmp
firewall-cmd --reload
nginx的配置文件里面添加:
rtmp { #RTMP服务
server {
listen 1935; #//服务端口
chunk_size 40960; #//数据传输块的大小
application play {
live on;
record off;
}
}
}
数据块大小我改成了40m,因为4m可以明显感觉到有点卡顿
最后使用ffmpeg
来推流:
ffmpeg -re -i ./告白气球-周二珂.flv -c copy -f flv rtmp://localhost/play/
可以在vlc
里面打开rtmp://$serverIp/play
也可以制作成.m3u8
文件,这样IINA
也可以播放,比如创建一个名为index.m3u8
的文件,其内容为:
rtmp://$serverIp/play
环境:
由于我主要是用
nginx
的rtmp
模块推流,所以同时下载rtmp
模块安装依赖:
应为web服务器我主要用
apache
,所以很多nginx的功能我都不需要,所以我的编译参数为: