# first match ngx location
set $template_location "/templates";
# then match root read file
set $template_root "/usr/openResty/templates";
也可以通过在server部分定义root指令
root /usr/openResty/templates;
其顺序是
local function load_ngx(path)
local file, location = path, ngx_var.template_location
if file:sub(1) == "/" then file = file:sub(2) end
if location and location ~= "" then
if location:sub(-1) == "/" then location = location:sub(1, -2) end
local res = ngx_capture(location .. '/' .. file)
if res.status == 200 then return res.body end
end
local root = ngx_var.template_root or ngx_var.document_root
if root:sub(-1) == "/" then root = root:sub(1, -2) end
return read_file(root .. "/" .. file) or path
end
# first match ngx location
set $template_location "/templates";
# then match root read file
set $template_root "/usr/openResty/templates";
location /templates {
internal;
alias /usr/openResty/templates2;
}
{# 不转义变量输出 #}
姓名:{* string.upper(name) *}
{# 转义变量输出 #}
简介:{{description}}
{# 可以做一些运算 #}
年龄: {* age + 1 *}
{# 循环输出 #}
爱好:
{% for i, v in ipairs(hobby) do %}
{% if i > 1 then %},{% end %}
{* v *}
{% end %}
成绩:
{% local i = 1; %}
{% for k, v in pairs(score) do %}
{% if i > 1 then %},{% end %}
{* k *} = {* v *}
{% i = i + 1 %}
{% end %}
成绩2:
{% for i = 1, #score2 do local t = score2[i] %}
{% if i > 1 then %},{% end %}
{* t.name *} = {* t.score *}
{% end %}
{# 中间内容不解析 #}
{-raw-}{(file)}{-raw-}
{(include_file)}:包含另一个模板文件; {* var *}:变量输出; {{ var }}:变量转义输出; {% code %}:代码片段; {# comment #}:注释; {-raw-}:中间的内容不会解析,作为纯文本输出; 模板最终被转换为Lua代码进行执行,所以模板中可以执行任意Lua代码。
在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ...
[详细]