Py学习  »  NGINX

常用NGINX配置指令翻译

Bear211318 • 4 年前 • 312 次点击  

Core

  • rtmp
    • 语法: rtmp {…}
    • 上下文: root
    • 包含所有RTMP设置的块
  • server
    • 语法: server {…}
    • 上下文: rtmp
    • 声明RTMP服务器实例
rtmp {
	server {
	}
}
  • 1
  • 2
  • 3
  • 4
server {
	listen 1935;
}
  • 1
  • 2
  • 3
  • application
    • 语法: application name {…}
    • 上下文: server
    • 创建RTMP应用程序(类似电视频道),与http 配置中的location不一样,名字不可以模式匹配
server {
	listen 1935;
	application myapp {
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • timeout
    • 语法: timeout value
    • 上下文: rtmp, server
    • 套接字超时时间,该值主要用于写入。大多数时间,RTMP模块不会期望除发布者套接字之外的所有套接字上的任何活动。如果您希望断开的套接字快速断开连接,请使用诸如keepalive或RTMP ping之类的活动工具。 默认值为1分钟。
timeout 60s;
  • 1

Access

  • allow
    • 语法:allow [play|publish] address|subnet|all
    • 上下文: rtmp, server, application
    • 允许从指定的地址或所有地址推流/拉流,按表面的顺序检查“允许/拒绝”指令。
allow publish 127.0.0.1;
deny publish all;
allow play 192.168.0.0/24;
deny play all;
  • 1
  • 2
  • 3
  • 4
  • deny
    • 语法: [play|publish] address|subnet|all
    • 上下文: rtmp, server, application
    • 请参阅允许描述。

Exec

  • exec_push
    • 语法: exec_push command arg*
    • 上下文: rtmp, server, application
    • 指定带有要在每个已发布流上执行的参数的外部命令,当发布停止时,该过程终止.二进制的完整路径应指定为第一个参数。没有关于此过程应该做什么的假设。但是,此功能与ffmpeg一起用于流转码很有用.FFmpeg应该作为客户端连接到nginx-rtmp,并以发布者的身份输出转码后的流回到nginx-rtmp。 可以在命令行中使用$ var / $ {var}形式的替换
      • $name: 流的名字
      • $app: application的名字
      • $addr: 客户端地址
      • $flashver: 客户端flash版本
      • $swfurl: 客户端swf url
      • $tcurl: 客户端tc url
      • $pageurl: 客户端页面url
        可以在exec_push指令中指定Shell样式的重定向,以编写输出并接受输入。 支持的是
      • 截断输出: >file
      • 附加输出: >>file
      • 描述符重定向如:1>&2
      • 输入: <file
        确保重定向字符和流名称/数字之间没有空格。您可以指定要执行的命令的完整路径或简短的命令名称。 在后一种情况下,将在PATH环境变量指定的目录中查找二进制文件。 默认情况下,nginx清除环境,这通常会使rtmp模块仅运行位于/ bin和/ usr / bin等标准目录中的二进制文件。 为了使其始终有效,请使用以下nginx指令保留原始PATH变量值。
env PATH; 
  • 1

以下ffmpeg调用将传入流转码为支持HLS的流(H264 / AAC)。 FFmpeg应该使用libx264支持进行编译,以使此示例正常工作。

application src {
    live on;
    exec_push ffmpeg -i rtmp://localhost/src/$name -vcodec libx264 -vprofile baseline -g 10 -s 300x200 -acodec aac -ar 44100 -ac 1 -f flv rtmp://localhost/hls/$name 2>>/var/log/ffmpeg-$name.log;
}

application hls {
    live on;
    hls on;
    hls_path /tmp/hls;
    hls_fragment 15


    
s;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • exec_pull
    • 语法: exec_pull command arg*
    • 上下文: rtmp,server,application
    • 指定带有在播放事件上执行的参数的外部命令。
      该命令在第一个客户端连接到流时执行,并在最后一个客户端断开连接时终止。
      该指令可以为本地客户端提取任何格式的远程流。
      该功能仅在单工模式下可靠地工作。
      原因是我们不能确保外部流程始终连接到正确的工作人员。
      显然它将连接到随机的一个。
      尽管这在大多数情况下仍然可以使用,但不建议使用该架构,但它会不稳定且容易出错。
      指令参数与exec_push相同。
application myapp {
    live on;
    exec_options on;
    exec_pull ffmpeg -i http://example.com/tv1.ts -c copy -f flv rtmp://localhost/$app/$name name=mystream;
    exec_pull ffmpeg -i http://another.example.com/video_plus.ts -c copy -f flv rtmp://localhost/$app/$name name=anotherstream;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • exec
    • 语法: exec command arg*
    • 上下文: rtmp,server,application
    • exec是exec_push的别名
  • exec_options
    • 语法: exec_options on|off
    • 上下文: application
    • 该指令切换exec选项模式。
      激活后,您可以添加exec-family指令选项。
      支持的唯一exec选项是name。
      使用此选项可以仅将exec应用于指定的流。 默认为关闭。
exec_options on;
# 仅针对“mystream”调用my_on_publish_command 
exec_publish my_on_publish_command name=mystream;

# 仅针对“another”调用my_on_play_command
exec_play my_on_play_command name=another;

# 为不同的流执行不同的FFMPEG命令
exec_pull ffmpeg -i http://example.com/abc.ts -c copy -f flv rtmp://localhost/$name/$app name=mystream;
exec_pull ffmpeg -i http://my.example.com/tele.ts -c copy -f flv rtmp://localhost/$name/$app name=tv;
exec_pull ffmpeg -i http://another.example.com/hello/f.ts -c copy -f flv rtmp://localhost/$name/$app name=fun;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • exec_static
    • 语法: exec_static command arg*
    • 上下文: rtmp, server, application
    • 与exec类似,但是在nginx启动时运行指定的命令。 由于没有会话上下文,因此不支持替换。
exec_static ffmpeg -i http://example.com/video.ts -c copy -f flv rtmp://localhost/myapp/mystream;
  • 1
  • exec_publish
    • 语法: exec_publish command arg*
    • 上下文: rtmp, server, application
    • 指定带有在发布事件上执行的参数的外部命令。
      不分析返回码。
      此处也支持exec的替代。
      此外,还支持args变量,用于保存查询字符串参数。
  • exec_play
    • 语法: exec_play command arg*
    • 上下文: rtmp, server, application
    • 指定带有在播放事件上执行的参数的外部命令。
      不分析返回码。
      替换列表与exec_publish相同。
  • exec_play_done
    • 语法: exec_play_done command arg*
    • 上下文: rtmp, server, application
    • 指定带有在play_done事件上执行的参数的外部命令。
      不分析返回码。
      替换列表与exec_publish相同。
  • exec_publish_done
    • 语法: exec_publish_done command arg*
    • 上下文: rtmp, server, application
    • 指定带有要在publish_done事件上执行的参数的外部命令。
      不分析返回码。
      替换列表与exec_publish相同。
  • exec_record_done
    • 语法: exec_record_done command arg*
    • 上下文: rtmp, server, application, recorder
    • 指定带有录制完成时要执行的参数的外部命令。
      此处支持替换exec_publish以及其他变量
      • recorder - 录制者的名称
      • path - 录制的文件地址(/tmp/rec/mystream-1389499351.flv)
      • filename - 省略目录的路径(mystream-1389499351.flv)
      • basename - 扩展名省略的文件名(mystream-1389499351)
      • dirname - 目录路径(/tmp/rec)
      • 例子
# 跟踪客户端信息
exec_play bash -c "echo $addr $pageurl >> /tmp/clients";
exec_publish bash -c "echo $addr $flashver >> /tmp/publishers";

# 将录制的文件转换为mp4格式
exec_record_done ffmpeg -y -i $path -acodec libmp3lame -ar 44100 -ac 1 -vcodec libx264 $dirname/$basename.mp4;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Live

  • live
    • 语法: live on|off
    • 上下文: rtmp, server, application
    • 切换实时模式,即一对多广播。
live on;
  • 1

Record

  • record
    • 语法: record [off|all|audio|video|keyframes|manual]*
    • 上下文: rtmp, server, application, recorder
    • 切换录制模式。 流可以记录在flv文件中。 此伪指令指定应准确记录的内容:
      • off - 什么都不记录
      • all - 音频和视频所有
      • audio - 只记录音频
      • video - 只记录视频
      • keyframes - 仅关键视频帧
      • manual - 永远不要自动启动录像机,使用控制界面启动/停止
        一个记录指令中可以有关键字的任何兼容组合。
record all;

record audio keyframes;
  • 1
  • 2
  • 3
  • record_path
    • 语法: record_path path
    • 上下文: rtmp, server, application, recorder
    • 指定将记录的flv文件放入的记录路径
record_path /tmp/rec;
  • 1
  • record_suffix
    • 语法: record_suffix value
    • 上下文: rtmp, server, application, recorder
    • 设置记录文件后缀。 默认为“ .flv”
record_suffix _recorded.flv;
  • 1

记录后缀可以是strftime格式的模式

record_suffix -%d-%b-%y-%T.flv;
  • 1

将产生格式为mystream-24-Apr-13-18:23:38.flv的文件。 在strftime手册页上可以找到所有受支持的strftime格式选项。

  • record_unique
    • 语法: record_unique on|off
    • 上下文: rtmp, server, application, recorder
    • 如果启用,则将当前时间戳添加到录制的文件。 否则,每次进行新记录时都会重写相同的文件。 默认为关闭。
record_unique on;
  • 1
  • record_append
    • 语法: record_append on|off
    • 上下文: rtmp, server, application, recorder
    • 切换文件追加模式。
      设置开启后,会将新数据追加到旧文件中,或者在丢失时创建新数据。
      文件中的旧数据和新数据之间没有时间间隔。 默认为关闭。
record_append on;
  • 1
  • recorder
    • 语法: recorder name {…}
    • 上下文: application
    • 创建recorder块。
      可以使用单个application创建多个recorder
      可以在recorder {}块中指定所有上述与记录有关的指令。
      所有设置都继承自更高级别。
application {
    live on;

    # 默认的 recorder
    record all;
    record_path /var/rec;

    recorder audio {
        record audio;
        record_suffix .audio.flv;
    }

    recorder chunked {
        record all;
        record_interval 15s;
        record_path /var/rec/


    
chunked;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

Video on demand

  • play
    • 语法: play dir|http://loc [dir|http://loc]*
    • 上下文: rtmp, server, application
    • 从指定目录或HTTP位置播放flv或mp4文件。
      如果参数以http://开头,则假定在播放之前应从远程http位置下载文件。
      下载整个文件后,才开始播放音符。
      您可以使用本地nginx在本地计算机上缓存文件。
      可以在一个播放指令中指定多个播放位置。
      指定多个播放指令后,位置列表将合并并从更高的作用域继承。
      尝试播放每个位置,直到找到成功的位置。
      如果找不到这样的位置,则会将错误状态发送到客户端。
      索引的FLV具有随机搜寻功能。
      未索引的FLV会在禁用查找/暂停的情况下播放(仅重启模式)。
      使用FLV索引器(例如yamdi)进行索引。
      如果您播放用record指令录制的FLV,请不要忘记在播放前对其进行索引。 它们是未索引创建的。
      仅当RTMP支持视频和音频编解码器时,才能播放Mp4文件。 最常见的情况是H264 / AAC。
application vod {
    play /var/flvs;
}

application vod_http {
    play http://myserver.com/vod;
}

application vod_mirror {
    # 首先尝试本地位置,然后访问远程位置
    play /var/local_mirror http://myserver.com/vod;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

举例:Playing /var/flvs/dir/file.flv:(会进行地址的拼接,配置中的/var/flvs与地址中的/dir/file.flv拼接)

ffplay rtmp://localhost/vod//dir/file.flv
  • 1

vod后面的两个斜杠使ffplay使用vod和应用程序名称,并将URL的其余部分用作播放路径。

  • play_temp_path
    • 语法: play_temp_path dir
    • 上下文: rtmp, server, application
    • 设置播放前远程VOD文件的存储位置。 默认值为/ tmp;
play_temp_path /www;
play http://example.com/videos;
  • 1
  • 2
  • play_local_path
    • 语法: play_local_path dir
    • 上下文: rtmp, server, application
    • 设置完全下载后从play_temp_path目录复制的远程VOD文件的位置。
      空值将禁用该功能。
      默认情况下为空。 该功能可用于本地缓存远程文件。
      此路径应与play_temp_path在同一设备上。
# 在/ tmp / videos中搜索文件。如果找不到,则从远程位置播放并存储在/ tmp / videos中
play_local_path /tmp/videos;
play /tmp/videos http://example.com/videos;
  • 1
  • 2
  • 3
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/52321
 
312 次点击