RTMP添加到NGINX

作者原创,转载请联系作者

作者将以系列文章进行解析Nginx-Rtmp模块代码,地址为nginx-rtmp-module,本文介绍Nginx-Rtmp的模块编译、加载、运行等方面。此部分主要有3步需要执行,遵守nginx相关的约定即可,大体如下:

  • 将下载的Rtmp代码放入nginx/src文件下,如nginx/src/rtmp
  • 新建Rtmp的conf文件,位于新建的rtmp文件下,如nginx/src/rtmp/conf。而conf文件的撰写就是三段式,定义ngx_addon_name, 添加module, 添加src,设置相关变量。示例如下:
 ngx_addon_name="ngx_rtmp_module"
   CORE_MODULES="$CORE_MODULES
            ngx_rtmp_module                             \
            ngx_rtmp_core_module                        \
            ngx_rtmp_cmd_module                         \
            ngx_rtmp_codec_module                       \
            ngx_rtmp_access_module                      \
            ngx_rtmp_record_module                      \
            ngx_rtmp_live_module                        \
            ngx_rtmp_play_module                        \
            ngx_rtmp_flv_module                         \
            ngx_rtmp_mp4_module                         \
            ngx_rtmp_netcall_module                     \
            ngx_rtmp_relay_module                       \
            ngx_rtmp_exec_module                        \
            ngx_rtmp_auto_push_module                   \
            ngx_rtmp_notify_module                      \
            ngx_rtmp_log_module                         \
            ngx_rtmp_limit_module                       \
            ngx_rtmp_hls_module                         \
            ngx_rtmp_dash_module                        \
            ngx_rtmp_cfms_module                        \
            "
   HTTP_MODULES="$HTTP_MODULES                         \
            ngx_rtmp_stat_module                        \
            ngx_rtmp_control_module                     \
            "
   NGX_ADDON_DEPS="$NGX_ADDON_DEPS                      \
            $ngx_addon_dir/ngx_rtmp_amf.h               \
            $ngx_addon_dir/ngx_rtmp_bandwidth.h         \
            $ngx_addon_dir/ngx_rtmp_cmd_module.h        \
            $ngx_addon_dir/ngx_rtmp_codec_module.h      \
            $ngx_addon_dir/ngx_rtmp_eval.h              \
            $ngx_addon_dir/ngx_rtmp.h                   \
            $ngx_addon_dir/ngx_rtmp_version.h           \
            $ngx_addon_dir/ngx_rtmp_live_module.h       \
            $ngx_addon_dir/ngx_rtmp_netcall_module.h    \
            $ngx_addon_dir/ngx_rtmp_play_module.h       \
            $ngx_addon_dir/ngx_rtmp_record_module.h     \
            $ngx_addon_dir/ngx_rtmp_relay_module.h      \
            $ngx_addon_dir/ngx_rtmp_streams.h           \
            $ngx_addon_dir/ngx_rtmp_bitop.h             \
            $ngx_addon_dir/ngx_rtmp_proxy_protocol.h    \
            $ngx_addon_dir/hls/ngx_rtmp_mpegts.h        \
            $ngx_addon_dir/dash/ngx_rtmp_mp4.h          \
            "
   NGX_ADDON_SRCS="$NGX_ADDON_SRCS                      \
            $ngx_addon_dir/ngx_rtmp.c                   \
            $ngx_addon_dir/ngx_rtmp_init.c              \
            $ngx_addon_dir/ngx_rtmp_handshake.c         \
            $ngx_addon_dir/ngx_rtmp_handler.c           \
            $ngx_addon_dir/ngx_rtmp_amf.c               \
            $ngx_addon_dir/ngx_rtmp_send.c              \
            $ngx_addon_dir/ngx_rtmp_shared.c            \
            $ngx_addon_dir/ngx_rtmp_eval.c              \
            $ngx_addon_dir/ngx_rtmp_receive.c           \
            $ngx_addon_dir/ngx_rtmp_core_module.c       \
            $ngx_addon_dir/ngx_rtmp_cmd_module.c        \
            $ngx_addon_dir/ngx_rtmp_codec_module.c      \
            $ngx_addon_dir/ngx_rtmp_access_module.c     \
            $ngx_addon_dir/ngx_rtmp_record_module.c     \
            $ngx_addon_dir/ngx_rtmp_live_module.c       \
            $ngx_addon_dir/ngx_rtmp_play_module.c       \
            $ngx_addon_dir/ngx_rtmp_flv_module.c        \
            $ngx_addon_dir/ngx_rtmp_mp4_module.c        \
            $ngx_addon_dir/ngx_rtmp_netcall_module.c    \
            $ngx_addon_dir/ngx_rtmp_stat_module.c       \
            $ngx_addon_dir/ngx_rtmp_control_module.c    \
            $ngx_addon_dir/ngx_rtmp_relay_module.c      \
            $ngx_addon_dir/ngx_rtmp_bandwidth.c         \
            $ngx_addon_dir/ngx_rtmp_exec_module.c       \
            $ngx_addon_dir/ngx_rtmp_auto_push_module.c  \
            $ngx_addon_dir/ngx_rtmp_notify_module.c     \
            $ngx_addon_dir/ngx_rtmp_log_module.c        \
            $ngx_addon_dir/ngx_rtmp_limit_module.c      \
            $ngx_addon_dir/ngx_rtmp_bitop.c             \
            $ngx_addon_dir/ngx_rtmp_proxy_protocol.c    \
            $ngx_addon_dir/hls/ngx_rtmp_hls_module.c    \
            $ngx_addon_dir/dash/ngx_rtmp_dash_module.c  \
            $ngx_addon_dir/hls/ngx_rtmp_mpegts.c        \
            $ngx_addon_dir/dash/ngx_rtmp_mp4.c          \
            $ngx_addon_dir/cfms/ngx_rtmp_cfms_module.c  \
            $ngx_addon_dir/cfms/ngx_rtmp_cfms_transcode.c  \
            $ngx_addon_dir/cfms/ngx_rtmp_cfms_relay.c   \
            "
  CFLAGS="$CFLAGS -I$ngx_addon_dir"
  USE_OPENSSL=YES

如果你需要对rtmp模块做定制,比如增删模块,那此处需要做相应修改。

  • 编译时加上rtmp模块,主要分两步:
    1 生成makefile,示例代码如下:

auto/configure --prefix=/usr/local/rtmp --sbin-path=sbin/rtmp --conf-path=conf/cfms.conf --add-module=src/rtmp

2 编译连接安装,此部分参考nginx手册,此处不在赘述。值得一提的是在进行编译完成后,在nginx/obj/ngx_modules.c文件中全局变量ngx_module_t *ngx_modules[] 将会增加上rtmp各个模块,而在nginx启动和后续消息处理时,此变量是依次为主线依次进行(详情后续文章会讲解),示例代码如下:

ngx_module_t *ngx_modules[] = {
&ngx_core_module,
&ngx_errlog_module,
&ngx_conf_module,
&ngx_rtmp_module,
&ngx_rtmp_core_module,
&ngx_rtmp_cmd_module,
&ngx_rtmp_codec_module,
&ngx_rtmp_access_module,
&ngx_rtmp_record_module,
&ngx_rtmp_live_module,
......

本文只是做准备工作,后面着重分析rtmp模块代码,同时会附带讲解nginx框架相关的知识

你可能感兴趣的:(RTMP添加到NGINX)