Nginx RTMP 服务器出现 "RTMP in chunk stream too big: 64 >= 32" 后断开连接的解决方案

RTMP Publisher

        我们用 Java 将从 Cam 提取的音视频流 mux 成 flv 以后,发 RTMP 流给 Nginx-RTMP-Module Server,后者发布 RTMP 服务。
        近来,我们发现 Nginx-RTMP-Module 发布 RTMP 服务的时候,时常出现 "RTMP in chunk stream too big: 64 >= 32" 错误。
        调整 max_streams 或者调整 chunk_size,我们都试过了,没用。
        后来经过 Nginx-RTMP-Module 作者的确认,这确实又是该模块的一个 BUG。之所以用"又",是因为《Nginx 的 RTMP 模块的在线统计功能 stat 在 multi-worker 模式下存在 Bug》。
        经作者指点,我们按照下面的步骤解决了类似于 "RTMP in chunk stream too big: 64 >= 32" 的这个问题。
        1. 下载 Nginx-RTMP-Module 的分支 publish-time-fix2
        https://github.com/arut/nginx-rtmp-module/tree/publish-time-fix2,将下载后的 nginx-rtmp-module-publish-time-fix2.zip 解压缩得到 nginx-rtmp-module-publish-time-fix2 目录。
        2. 编译安装
        重新配置:
        ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_gzip_static_module --with-http_ssl_module --with-http_flv_module --with-http_perl_module --with-mail --with-http_xslt_module --add-module=/home/defonds/nginx-rtmp-module-publish-time-fix2
        其中,/home/defonds/nginx-rtmp-module-publish-time-fix2 路径是步骤一解压后生成的那个。
        编译:
        make
        最后替换掉原来的二进制执行文件:
        cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
        cp ./objs/nginx /usr/local/nginx/sbin/

        3.更改 Nginx 的配置文件

rtmp {
    server {
        listen 1935;
		publish_time_fix off;
		publish_time_fix2 on;
		max_streams 512;

        application live {
            live on;
            interleave off;
        }
    }
}

        如果您对以上步骤不太明白,可以参考《 让你的 Nginx 的 RTMP 直播具有统计某频道在线观看用户数量的功能》。更改完配置文件后,重启 Nginx 即可,"RTMP in chunk stream too big: 64 >= 32" 解决。后记——这一 bug 的 fix 只是在分支上,虽然现在主干还是有这个 bug,但不代表以后主干还是有这个 bug。也就是截至今天为止,主干还是有这个 bug 的。什么时候合并到主干上,以官方为准。

posted @ 2013-09-11 20:32  Defonds  阅读(99)  评论(0编辑  收藏  举报