Nginx RTMP HLS模块分析 (ngx_rtmp_hls_module.c)

ngx_rtmp_hls_module 用于支持 RTMP 流式传输的 HLS (HTTP Live Streaming) 模块的代码。它包含了实现流媒体文件切片、播放列表生成、加密等功能的多个模块和函数。下面我会针对初学者逐步讲解代码的主要部分。

1. 模块结构

  • 全局变量和函数:

    • next_publish, next_close_stream, next_stream_begin, next_stream_eof: 这些是函数指针,指向其他 RTMP 模块的默认实现。它们允许 HLS 模块在执行某些操作时,调用默认的 RTMP 行为。

  • 数据结构:

    • ngx_rtmp_hls_frag_t: 用于表示一个 HLS 分片。它包含该分片的持续时间、ID 和是否存在断点标志。

    • ngx_rtmp_hls_variant_t: 表示 HLS 流的变种(例如不同分辨率或码率的版本)。包含变种的后缀和参数。

    • ngx_rtmp_hls_ctx_t: 上下文结构,保存与当前 RTMP 流相关的 HLS 信息。它包含播放列表、密钥、分片信息等。

    • ngx_rtmp_hls_app_conf_t: 应用配置结构,存储 HLS 模块的配置参数,比如分片长度、播放列表路径、加密密钥路径等。

2. 重要配置项

  • hls:启用或禁用 HLS 功能。

  • hls_fragment:设置每个 HLS 分片的持续时间(毫秒)。

  • hls_path:指定 HLS 文件存储的路径。

  • hls_playlist_length:设置播放列表的长度(毫秒)。

  • hls_sync:同步视频和音频流的延迟。

3. 关键功能

  • 创建和关闭分片

    • ngx_rtmp_hls_open_fragmentngx_rtmp_hls_close_fragment 函数用于创建和关闭视频分片文件。这些分片会保存为 .ts 文件,并存储在指定的目录中。

  • 播放列表生成

    • ngx_rtmp_hls_write_playlist:该函数生成主播放列表(.m3u8 文件),其中包含所有 HLS 分片的信息。

    • ngx_rtmp_hls_write_variant_playlist:为不同的流变种(例如不同的分辨率或码率)生成变种播放列表。

  • 加密和密钥管理

    • ngx_rtmp_hls_open_fragment:在流开始时,如果启用了加密功能,会生成并保存加密密钥文件(.key 文件)。然后,视频分片会使用这些密钥进行加密。

  • 分片的命名和路径

    • ngx_rtmp_hls_get_fragment_id:根据配置的命名规则(如时间戳、顺序编号等)生成分片的 ID。

    • ngx_rtmp_hls_rename_file:重命名生成的 .ts 文件,将临时文件重命名为实际的分片文件。

4. 音视频流的处理

  • 音频:音频流首先会被缓存并分配一个缓冲区,如果音频帧大小超过缓冲区,则会被写入文件。ngx_rtmp_hls_audio 用于处理音频数据,生成音频的 ADTS 头,并对其进行 HLS 切片。

  • 视频ngx_rtmp_hls_video 用于处理视频数据。它将 H.264 视频帧转化为符合 HLS 格式的 .ts 分片,并在需要时进行分片和播放列表更新。

5. 流的恢复

  • 恢复播放流ngx_rtmp_hls_restore_stream 函数会从保存的播放列表中恢复分片信息,确保在流重新启动时能继续播放。

6. 目录和文件管理

  • ngx_rtmp_hls_ensure_directory:确保指定的目录存在,如果不存在则创建它。

总结:

  • HLS 流式传输模块:此代码是为支持 RTMP 到 HLS 转码和分发的模块。它的核心功能包括视频分片的创建、播放列表的生成、加密支持以及音视频同步。可以从分片的创建、播放列表的生成、文件的管理等基础功能开始,逐步了解如何通过 RTMP 实现视频流的 HLS 支持。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/41816.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

反向 SSH 隧道技术实现内网穿透

反向 SSH 隧道技术实现内网穿透 场景描述 有一台内网的 Linux PC 机,想在其他地方(如家中)使用浏览器,在浏览器中能够使用内网 Linux PC 机的命令行。 实现思路 内网 Linux PC 机在内网可以使用 SSH 进行连接,但内…

[MRCTF2020]套娃

一。 按F12看源代码 发现代码 读代码发现 1.我们传的参数中不能存在_和%5f,可以通过使用空格来代替_,还是能够上传成功。 2.正则表达式"/^23333/ " ,开头结尾都被 " " 和 " /",开头结尾都被&qu…

基于Windows11的WSL2通过Ollama平台安装部署DeepSeek-R1模型

DeepSeek-R1模型各参数版本硬件要求 一、在Windows上安装Linux子系统WSL2 检查电脑是否支持虚拟化&#xff0c;按住<font style"color:rgb(199, 37, 78);background-color:rgb(249, 242, 244);">WindowsR</font>输入<font style"color:rgb(199,…

PHP回调后门小总结

目录 1.call_user_func 函数说明 蚁剑连接 2.数组操作造成的单参数回调后门 array_filter 函数说明 蚁剑连接 array_map 函数说明 蚁剑连接 3.二参数回调函数 uasort 函数说明 uksort array_reduce array_udiff 蚁剑连接 4.三参数的回调后门 array_walk 函数说…

MinGW与使用VScode写C语言适配

压缩包 通过网盘分享的文件&#xff1a;MinGW.zip 链接: https://pan.baidu.com/s/1QB-Zkuk2lCIZuVSHc-5T6A 提取码: 2c2q 需要下载的插件 1.翻译 找到VScode页面&#xff0c;从上数第4个&#xff0c;点击扩展&#xff08;以下通此&#xff09; 搜索---Chinese--点击---安装--o…

-PHP 应用SQL 盲注布尔回显延时判断报错处理增删改查方式

#PHP-MYSQL-SQL 操作 - 增删改查 1 、功能&#xff1a;数据查询(对数据感兴趣&#xff09; 查询&#xff1a; SELECT * FROM news where id$id 2 、功能&#xff1a;新增用户&#xff0c;添加新闻等&#xff08;对操作的结果感兴趣&#xff09; 增加&#xff1a; INSERT INT…

Linux一步部署主DNS服务器

#!/bin/bash #部署DHCP服务 #userli 20250319 if [ "$USER" ! "root" ] then echo "错误&#xff1a;非root用户&#xff0c;权限不足&#xff01;" exit 0 fi #防火墙与高级权限 systemctl stop firewalld && systemctl disable …

Softmax 回归 + 损失函数 + 图片分类数据集

Softmax 回归 softmax 回归是机器学习另外一个非常经典且重要的模型&#xff0c;是一个分类问题。 下面先解释一下分类和回归的区别&#xff1a; 简单来说&#xff0c;分类问题从回归的单输出变成了多输出&#xff0c;输出的个数等于类别的个数。 实际上&#xff0c;对于分…

视频管理平台-信息泄露漏洞

一&#xff1a;漏洞描述 EasyCVR 部分版本存在用户信息泄露漏洞&#xff0c;攻击者可直接通过此漏洞获取所有用户的账号密码。 二&#xff1a;fofa查询 title"EasyCVR" 三&#xff1a;漏洞复现 在fofa中寻找有漏洞的url 并访问 poc:/api/v1/userlist?pageinde…

gz sim机器人SDF模型 [持续更新]

机器人SDF模型 linklink的一级pose材质 plugin话题信息通信键盘操作plugin Sensor传感器imu 不算教学&#xff0c;个人的记录 sdf的格式跟urdf有所不同&#xff0c;必须是完整的一个包括&#xff0c;比如< pose></ pose>这样前一个后一个&#xff0c;urdf中是有<…

极速全场景 MPP数据库starrocks介绍

目录 一、引子 二、起源 &#xff08;一&#xff09;前身 &#xff08;二&#xff09;定位 三、特点 &#xff08;一&#xff09;高性能架构 &#xff08;二&#xff09;实时分析 &#xff08;三&#xff09;高并发与扩展性 &#xff08;四&#xff09;兼容性与生态 …

计算机二级(C语言)考试高频考点总汇(二)—— 控制流、函数、数组和指针

目录 六、控制流 七、函数 八、数组和指针 六、控制流 76. if 语句可以&#xff08;嵌套&#xff09;&#xff0c; if 语句可以嵌套在另一个 if 语句内部&#xff0c;形成&#xff08;嵌套的条件判断结构&#xff09;&#xff0c;用于处理更复杂的条件判断逻辑。 77. els…

ECharts各类炫酷图表/3D柱形图

一、前言 最近鸡米花实现了各类的炫酷的图表&#xff0c;有3D柱形图、双边柱形图以及异形柱形图&#xff0c;好了&#xff0c;直接上图&#xff1a; 二、效果图 一个个来吧&#xff0c;下面就是代码啦&#xff0c;注意&#xff0c;一下图表展示的宽高均为800px*300px 三、异形横…

2024年3月全国计算机等级考试真题(二级C语言)

&#x1f600; 第1题 下列叙述中正确的是 A. 矩阵是非线性结构 B. 数组是长度固定的线性表 C. 对线性表只能作插入与删除运算 D. 线性表中各元素的数据类型可以不同 题目解析&#xff1a; A. 矩阵是非线性结构 错误。矩阵通常是二维数组&#xff0c;属…

从零构建大语言模型全栈开发指南:第三部分:训练与优化技术-3.2.3预训练任务设计:掩码语言建模(MLM)与下一句预测(NSP)

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 3.2.3 预训练任务设计:`掩码语言建模(MLM)`与下一句预测(NSP)1. 掩码语言建模(`Masked Language Modeling, MLM`)1.1 MLM的核心原理与数学形式1.2 高级掩码优化技术1.2.1 `Span Masking(SpanBER…

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例6,TableView16_06 分页表格拖拽排序

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录 Deep…

大模型训练步骤:预训练;增量预训练;微调;RLHF或者DPO

参考&#xff1a;https://blog.csdn.net/chengxuyuanyy/article/details/140949825 开发阶段分类 模型分成3个阶段: (1)、第一阶段:(Continue PreTraining)增量预训练&#xff0c;在海量领域文档数据上二次预训练GPT模型&#xff0c;以注入领域知识。 (2)、第二阶段: SFT(Sup…

多网络选择路由(windows环境)

问题 情况是这样的&#xff0c;公司环境需要连接网线才能连接内网&#xff0c;也能上网&#xff0c;但是网速贼慢&#xff0c;我就连接了自己的热点&#xff0c;但是还是很慢&#xff0c;但是一拔掉网线就快了&#xff0c;但是连不上内网环境了。 解决思路 我猜我访问外网时…

idea解决properties中文乱码

问题&#xff1a; 我的IDEA已经将文件的字符集设置成了UTF-8&#xff0c;但是中文在*.properties文件中还是会出现乱码&#xff0c;后来经同事指点修改了一项配置就ok了&#xff01;话不多说&#xff0c;看下面的对比就清楚了。 设置方法&#xff1a; Settings -> Editor…

BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多变量时序预测(Matlab)

BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多变量时序预测&#xff08;Matlab&#xff09; 目录 BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多变量时序预测&#xff08;Matlab&#xff09;预测效果基本介绍程序设计参考资料 预测效果 基本介绍 BKA-CNN-GRU、CNN-GRU、GRU、CNN四模型多…