rtpengine-recording(8) 手册页

rtpengine-recording(8) 手册页

名称

rtpengine-recording - Sipwise rtpengine 的媒体录制守护进程

概要

rtpengine-recording [选项...]

描述

Sipwise rtpengine 媒体代理支持导出其转发的媒体(RTP)数据包。rtpengine-recording 守护进程收集这些导出的数据包,并将其解码为可供收听的音频格式。

选项

所有选项都可以(并且应该)在配置文件中提供,而不是在命令行中提供。详情请参见下面的 --config-file 选项。

如果未提供任何选项,则使用默认值,这对于 rtpengine 的标准安装应该足够了。

--help

打印使用信息。

-v, --version

如果使用此选项调用,rtpengine-recording 守护进程将仅打印其版本号并退出。

--config-file=FILE

指定要使用的配置文件位置。配置文件是一个 .ini 风格的配置文件,此处列出的所有命令行选项在配置文件中也是有效选项。对于所有命令行选项,在配置文件中必须使用长名称版本而不是单字符版本(例如,使用 table 而不仅仅是 t)。对于存在或不存在(例如 output-mixed)的布尔选项,在配置文件中必须使用布尔值(truefalse)。如果选项同时在配置文件和命令行中给出,则命令行值会覆盖配置文件中的值。

作为特殊值,可以在此处传递 none 以禁止加载默认配置文件。

--config-section=STRING

指定要在配置文件中使用的 .ini 风格节段。配置文件中可以存在多个节段,但一次只能使用一个。默认值是 rtpengine-recording。在配置文件中使用方括号(例如 [rtpengine-recording])开始一个配置节段。

-L, --log-level=INT

接受一个整数作为参数,控制将发送到 syslog 的最高日志级别。日志级别与 syslog(3) 手册页中的级别对应。默认值为 6,相当于 LOG_INFO。最高可能值为 7 (LOG_DEBUG),这将记录所有内容。

--log-facility=daemon|local0|...|local7|...

向 syslog 守护进程发送日志消息时使用的 syslog 设施。默认为 daemon

-E, --log-stderr

记录到 stderr 而不是 syslog。仅在与 --foreground 结合使用时有用。

--split-logs

将多行日志消息拆分为单独的日志消息,以便每行都接收自己的日志行前缀。

--no-log-timestamps

不要向写入 stderr 的日志行添加时间戳。仅在与 --log-stderr 结合使用时有用。

--log-mark-prefix=STRING

添加到日志文件中被视为敏感和/或私人信息的特定数据字段的前缀。默认为空字符串。

--log-mark-suffix=STRING

添加到日志文件中被视为敏感和/或私人信息的特定数据字段的后缀。默认为空字符串。

-p, --pidfile=FILE

指定写入守护进程 PID 号的路径和文件名。

-f, --foreground

如果给出,将阻止守护进程进行守护进程化,意味着它将保持在前台。对调试有用。

-t, --table=INT

接受一个整数参数。该值必须与提供给 rtpengine 媒体代理用于内核内数据包转发的 table 选项匹配。如果未指定,默认为 0。

--spool-dir=PATH

此处给出的路径必须与提供给 rtpengine 媒体代理的 recording-dir 路径匹配。默认为 /var/spool/rtpengine。该路径必须位于支持 inotify 机制的文件系统上。

--num-threads=INT

启动多少个工作线程。默认为可用 CPU 核心数,如果少于该数或数量未知,则为 8。

--thread-stack=INT

将每个线程的栈大小设置为给定值(单位:kB)。默认为 2048 kB。可以设置为 -1 以保持操作系统提供的默认值不变。

--evs-lib-path=FILE

指向包含 EVS 编解码器参考实现的共享对象文件 (.so)。有关更多详细信息,请参阅 README。

--output-storage=file|db|memory|notify|s3|gcs|none

将媒体文件存储在哪里。此选项可以多次给出(或者在配置文件中使用逗号分隔的列表)以启用多种存储模式。默认情况下仅启用文件存储。

文件存储直接将媒体文件写入文件系统(参见 output-dir)。

设置 none 会覆盖文件存储作为默认设置,并允许仅进行转发操作。

数据库存储将媒体文件作为 BLOB 写入 MySQL 数据库。

字符串 both 被视为启用文件和数据库存储的旧版替代方案。

通知输出将录音附加到 HTTP 通知请求。如果启用,通知请求将表现为 HTTP POST(隐式启用 notify-post)。

字符串 memory 作为修饰符使用,可以在文件存储未启用时使用。没有 memory 修饰符时,媒体首先写入临时文件,直到录音完成后才放入其目标存储。设置 memory 后,临时文件的使用被禁用,媒体仅在内存中保存,直到录音完成。
db-mem 可用作同时设置 dbmemory 的快捷方式。
s3 存储选项启用通过 HTTPS 上传到 S3 兼容服务,例如 AWS 或 MinIO。有关配置,请参见下面的相关选项。

使用 gcs 存储选项启用上传到 Google Cloud Storage 或兼容服务。请参见下面的相关选项。

--output-dir=PATH

如果启用了文件输出,则媒体文件的写入路径。默认为 /var/lib/rtpengine-recording。该路径不能与 spool-dir 使用的路径相同。

--output-pattern=STRING

用于录音文件的文件名模式。该模式可以引用子目录。父目录将根据需要创建。默认设置为 %c-%r-%t

模式必须包含 printf 风格的格式序列。支持的格式序列有:

%%

一个百分号字面量。

%c

呼叫 ID。输出模式必须包含此格式序列。

%r

由 rtpengine 生成的随机标签,用于区分可能重复或重复的呼叫 ID。

%t

流类型。对于单流,这是写为十六进制的 SSRC;对于混合流,这是字符串 mix。输出模式必须包含此格式序列。

%l

参与方的标签,由控制守护进程传递。

%Y
%m
%d
%H
%M
%S

这些格式序列引用当前系统时间(输出文件创建时),与 date(1) 或 strftime(3) 支持的格式序列相同(分别是年、月、日、时、分、秒)。

%u

微秒,扩展为 6 位数字(000000 到 999999)。

%INT

引用呼叫 ID 中给定长度的前缀。如果此格式序列出现多次,则前缀是累积的。例如,如果呼叫 ID 是 abcdefgh,输出模式配置为 %2/%3/%c,则生成的输出文件名为 ab/cde/abcdefgh

%{

取花括号(在此 { 和下一个 } 之间)内的字符串,并使用它作为键在 rtpengine 提供的元数据字符串中查找相应的值。元数据字符串必须作为管道 (|) 分隔的 key:value 对列表给出,如 rtpengine 文档所述。

示例:如果元数据字符串为 foo:bar|blah:baz 且模式包含格式 %{foo},则 bar 将被插入到文件名的该位置。

--output-format=wav|mp3|none

用于生成的媒体文件的文件格式。默认为 PCM WAV (RIFF) 文件。适用于文件系统和数据库中存储的文件。
noneoutput-storage=none 的旧版别名。

--resample-to=INT

将所有音频重新采样到给定的采样率(例如 48000)。默认禁用重新采样,意味着文件将以与源媒体相同的采样率写入。

--mp3-bitrate=INT

如果选择了 MP3 输出,则为 MP3 编码器使用给定的比特率(例如 64000)。没有默认值,因此如果选择了 MP3 输出,必须给出此选项。请注意,并非所有比特率与所有采样率的组合都有效。因此,对于 MP3 输出,建议同时设置 resample-to

--output-mixed
--output-single

是否生成混合音频文件、单个音频文件或两者。如果两者都未给出,则默认同时启用两者。如果不需要文件输出,将 output-format 设置为 none

单个音频文件包含单个 RTP SSRC 的音频,这通常意味着单向音频流。这些直接从 RTP 流解码,不考虑时间戳,这意味着 RTP 流中的间隙或暂停不会反映在输出音频文件中。

混合音频文件由前四个看到的 RTP SSRC 组成,混合成一个输出文件,这通常意味着产生双向音频流。音频混合考虑 RTP 时间戳,因此 RTP 媒体中的间隙和暂停会反映在输出音频中,以保持多个音频源同步。

--mix-method=direct|channels

选择将多个音频输入混合成单个输出文件的方法,用于混合输出。默认是 direct,它直接将所有音频输入混合在一起,生成与单个输入 (output-single) 音频文件格式相同的混合输出文件。
channels 混合方法将每个音频输入放入输出文件自己的音频通道中,从而产生多通道输出文件。混合输出最多支持四个独立的 RTP SSRC,这意味着如果每个输入是单声道音频,那么混合输出文件将包含 4 个音频通道。此混合方法需要支持此类多通道音频格式的输出文件格式(例如 wav)。

--mix-num-inputs=INT

更改输出文件中的录音通道数。值在 1 到 4 之间(例如 4,这也是默认值)。

--output-chmod=INT

将录音文件的权限更改为给定的模式。必须作为八进制整数给出,例如 0660。

--output-chmod-dir=INT

更改录音文件的目录权限为给定模式。必须作为八进制整数给出,例如 0700(这也是默认值)。

--output-chown=USER|UID
--output-chgrp=GROUP|GID

更改录音文件的所有权。支持用户/组名或数字 ID。如果值为空或给出为 -1,则用户/组保持不变。

--output-buffer=INT

设置用于写入文件的 I/O 缓冲区大小。默认为 2^18 字节(256 kB)。可以设置为零以实现无缓冲 I/O。

--mysql-host=HOST|IP
--mysql-port=INT
--mysql-user=USERNAME
--mysql-pass=PASSWORD
--mysql-db=STRING

MySQL 存储后端的配置。生成的呼叫和媒体文件的详细信息存储到数据库中。可以选择性地存储媒体文件本身(参见 output-storage)。

关于 MySQL 数据库模式,请参见 数据库模式 部分。

--forward-to=PATH

将原始 RTP 数据包转发到 Unix 套接字。默认禁用。

--tcp-send-to=IP:PORT
--tcp-resample=INT
--tcp-mixed
--tls-send-to=IP:PORT
--tls-resample=INT
--tls-mixed

通过 TCP 或 TLS 连接将解码后的音频发送到指定目标。音频以给定采样率的原始 16 位 PCM 格式发送。

默认情况下,将为每个 SSRC 建立一个包含一个单声道音频流的连接。如果启用混合模式,则类似于混合文件输出,每个呼叫将建立一个连接,包含从所有捕获的 SSRC 混合的音频。mix-method 设置以相同方式生效,因此音频将是单声道或多声道,具体取决于设置。

一次只能激活其中一种选项组合(TCP 或 TLS)。

--notify-uri=URI

启用向指定 URI 发送关于完成录音的 HTTP 通知,该 URI 必须是 HTTP 或 HTTPS URI。关于完成录音的信息通过自定义 HTTP 头部提供,所有这些头部都使用 X-Recording- 前缀。

--notify-post

对 HTTP 通知请求使用 HTTP POST 而不是 GET。即使使用 POST,请求体也为空。

--notify-no-verify

禁用 HTTPS 请求的 TLS 对等证书验证。

--notify-command=PATH

启动外部命令以发送关于新录音的通知。该命令将接收两个命令行参数:录音的完整路径和文件名,以及数据库条目的 ID 号。

--notify-concurrency=INT

可以同时执行的 HTTP 请求的最大数量。

--notify-retries=INT

在放弃之前重试失败的 HTTP 通知的次数。每次后续尝试使用指数退避时间,从 5 秒开始。

--notify-record
output-storage=notify 的旧版别名。如果未启用其他输出存储,则默认文件存储保持启用(除非也设置了以下选项)。

--notify-purge

启用通知输出时禁用默认文件存储的旧版选项。

--output-mixed-per-media

强制每个媒体一个通道,而不是每个 SSRC。请注意,此选项仅在同时启用 --output-mixed 时有用。

--flush-packets

强制在每个数据包后刷新输出缓冲区,确保录音文件稳定增长,并可无延迟地进行处理。

--s3-host=HOST
--s3-port=INT
--s3-path=STR
--s3-access-key=STR
--s3-secret-key=STR
--s3-region=STR
--s3-no-verify

如果启用了 S3 存储上传,则必须配置这些选项。端口是可选的,如果未配置则默认为 443 (HTTPS)。

主机名可能需要也可能不需要包含存储桶名称。例如 minio.example.comexamplebucket.s3.amazonaws.com

如果主机名包含存储桶名称,则路径可以为空。否则,存储桶名称成为路径的一部分(例如 /examplebucket)。即使路径为空,也必须设置此选项。

访问密钥和秘密密钥是服务提供的凭证(例如 AKIAIOSFODNN7EXAMPLEwJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY)。

区域代码是凭证的一部分(例如 us-east-1)。如果服务不使用区域代码,则必须设置为空字符串。

默认情况下验证 TLS 证书,除非设置了 no-verify 选项。

--gcs-uri=URI
--gcs-key=STR
--gcs-service-account=FILE
--gcs-scope=STR
--gcs-no-verify

配置这些设置以使用 GCS 存储。至少必须设置 URI 和一种身份验证方法。
gcs-uri 必须指向要发布上传的完整 URI。通常它包含存储桶的名称。URI 不能包含查询字符串(即没有 ?)。例如:https://storage.googleapis.com/upload/storage/v1/b/examplebucket/o

对于身份验证,必须通过 gcs-key 提供 API 密钥,或者必须通过服务帐户文件配置 OAuth2 身份验证。

要使用 OAuth2/JWT 身份验证,gcs-service-account 设置必须指向 JSON 格式的服务帐户文件。该文件应至少包含 client_email、RSA/PEM 格式的 private_keytoken_uri。身份验证范围默认为 https://www.googleapis.com/auth/cloud-platform,但可以通过 gcs-scope 更改。

设置 gcs-no-verify 以禁用 TLS 证书验证。请注意,这仅适用于上传本身,不适用于 OAuth2 请求。

退出状态

0

成功终止。

1

发生错误。

文件

/etc/rtpengine/rtpengine-recording.conf

配置文件。

数据库模式

将录音保存到 MySQL 数据库需要正确的数据库模式:

sql 复制代码
CREATE TABLE `recording_calls` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `call_id` varchar(250) NOT NULL,
  `start_timestamp` decimal(13,3) DEFAULT NULL,
  `end_timestamp` decimal(13,3) DEFAULT NULL,
  `status` enum('recording','completed','confirmed') DEFAULT 'recording',
  PRIMARY KEY (`id`),
  KEY `call_id` (`call_id`)
);

CREATE TABLE `recording_streams` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `call` int(10) unsigned NOT NULL,
  `local_filename` varchar(250) NOT NULL,
  `full_filename` varchar(250) NOT NULL,
  `file_format` varchar(10) NOT NULL,
  `stream` mediumblob,
  `output_type` enum('mixed','single') NOT NULL,
  `stream_id` int(10) unsigned NOT NULL,
  `sample_rate` int(10) unsigned NOT NULL DEFAULT '0',
  `channels` int(10) unsigned NOT NULL DEFAULT '0',
  `ssrc` int(10) unsigned NOT NULL,
  `start_timestamp` decimal(13,3) DEFAULT NULL,
  `end_timestamp` decimal(13,3) DEFAULT NULL,
  `tag_label` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `call` (`call`),
  CONSTRAINT `fk_call_id` FOREIGN KEY (`call`) REFERENCES `recording_calls` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
);

CREATE TABLE `recording_metakeys` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `call` int(10) unsigned NOT NULL,
  `key` char(255) NOT NULL,
  `value` char(255) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `prim_lookup` (`value`,`key`),
  KEY `fk_call_idx` (`call`),
  CONSTRAINT `fk_call_idx` FOREIGN KEY (`call`) REFERENCES `recording_calls` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
);
相关推荐
无名3873 天前
FreeSWITCH limit 中文手册
通信
xixixi777774 天前
系统性地解析——边缘计算(从定义与驱动力、核心架构、关键技术特征、与云计算的范式对比、典型应用场景以及挑战与趋势等方面)
安全·架构·云计算·边缘计算·信息与通信·通信·反诈
xixixi777777 天前
从宏观架构、核心技术、战术对抗、治理挑战和未来趋势五个层面,系统性地剖析“短信反诈骗”
安全·架构·安全架构·通信·反诈·短信反诈
无名3878 天前
Kamailio usrloc 细节测试
通信
xixixi777778 天前
App反诈骗:一场面向移动生态的深度安全战争(接上文短信反诈)
安全·信息与通信·通信·电话反诈
无名38712 天前
FusionPBX Debian 12 安装
运维·debian·通信
交换机路由器测试之路14 天前
什么是网络直径
网络·以太网·交换机·通信
无名38717 天前
RTPEngine 官方自带的 perl 测试程序
开发语言·perl·通信
xixixi7777717 天前
讲一下卫星移动通信网络(系统架构、核心技术与协议挑战及应用场景和战略价值)
网络·学习·安全·信息与通信·通信·卫星通信