音频延迟/滤波器

在现场制作中,有时需要将音频比视频延迟发送,以弥补大型液晶显示屏的处理延迟(唇形同步)。或者在麦克风输入音频中添加限幅器/门限器。.

本文内容:
简易音频延迟
复制音频和延迟
更多音频滤波器


简易音频延迟

在 PLAYDECK 中实现这一点其实非常快。你可以像这样将 ADELAY 音频滤波器添加到声道中。在此示例中,我们为音频声道 1 和 2 设置了 600 毫秒的延迟:

此选项也可设置为“INPUTS”,以补偿任何输入端的唇形同步问题。.


复制音频和延迟

您还可以将音频通道 1 和 2 复制到音频通道 3 和 4,并对它们进行延时处理。这样做的目的是让音频调音师能够听到实时预览音频。.

这需要在播放列表级别进行设置,因此请在“设置”中清除所有音频滤波器。.

首先,请务必增加输出通道的音频通道数,否则所有高于2的音频通道都将无法被处理:

右键单击任何播放列表项目,然后选择“音频通道映射”:

这将把音频通道 1 和 2 复制到音频通道 3 和 4:

现在再次右键单击播放列表项目,选择“音频滤波器”,并添加 ADELAY 滤波器,但仅适用于音频通道 3 和 4:


更多音频滤波器

如需查看所有音频滤波器的完整列表,请点击“显示示例”。这将打开一个包含示例的文本文件。.

视频引擎日志记录

本文将介绍如何配置 Video Engine 日志记录。.


1. 配置日志记录

启动 PLAYDECK,打开 设置, ,然后选择 申请 选项卡。在页面底部,您可以找到配置选项。.

输出文件夹: 选择目标目录。该目录也可以是网络共享文件夹。.

存储警告: 日志文件每分钟可能轻松占用高达 1 GB 的空间(在详细级别为 0 且所有模块均启用的情况下)。请根据问题可能出现所需的时间,确保您拥有足够的可用磁盘空间。.

冗长程度: 请务必使用以下命令开始记录日志: 0 – 跟踪. 这可确保视频引擎开发人员获得所有必要的信息。.

模块: 选择 全部 首先。如果日志文件变得过大,您可以通过重点关注特定模块来缩小其大小:

首先需要设置的是您的 输出文件夹 用于存储日志文件。这可以是网络上的一个共享文件夹。日志文件每分钟可能轻松占用高达 1 GB 的空间(在详细级别为 0 且所有模块均启用时)。请根据预计出现故障的时间,预留足够的可用磁盘空间。.

接下来的设置是 冗长: 请务必使用以下命令开始记录日志: 0 – 跟踪, ,这样视频引擎开发人员就能掌握所有信息。.

随着 模块 我们选择的设置 全部 首先。如果日志文件变得过大,我们可以针对特定模块来缩小其体积:

  • 全部: 记录一切。.
  • 播放列表、文件、编解码器:涵盖播出、文件解码以及片段加载/播放错误。.
  • 作者:涵盖流媒体、录制和编码。.
  • 网络: 涵盖流媒体协议。.
  • 渲染器: 涵盖设备输出和NDI。.
  • 直播: 适用于现场输入。.
  • 设备: 与硬件设备相关的所有内容。.
  • blackmagic: 与 Blackmagic Design 硬件相关的所有内容。.


拆分选项: 这取决于您正在运行多少个频道,因为每个频道都运行在独立的进程中。如果您使用 超过2个频道, ,我们强烈建议启用“拆分”选项。.


2. 开始/停止记录

要即时捕获一个错误,您需要先开启日志记录,复现该问题,然后关闭日志记录,最后将日志文件发送给开发团队。.

时间: 你可以 开始 以及 停止 随时开始录音。这样您就可以提前准备好播放列表或设备。尽量缩短录音开始与结束之间的时间,以确保文件总大小在可控范围内。.

会话文件夹: 点击后 开始, ,一个以当前时间戳命名的子文件夹(例如,, 2026-05-16__01-20-00) 将创建在您指定的日志路径中。.

停止: 一旦出现该错误,请点击 停止. 请等待至少10秒 以确保所有正在运行的日志进程完成向磁盘的写入操作。.

压缩: 打开日志路径,找到会话文件夹。右键单击该文件夹,选择 压缩为…, ,然后选择 7z (首选)或 邮编. 压缩过程可能需要一些时间,具体取决于文件大小。.

现在我们需要将会话文件夹中的内容压缩成 ZIP 文件。. 识别 按开始时间排序您的会话文件夹。然后右键单击会话文件夹,选择 压缩为 并选择 7z 文件 (如有)或 ZIP文件. 现在请向后靠,压缩过程可能需要一些时间。.


3. 上传日志

请通过我们的官方下载门户上传压缩后的日志文件:

https://download.joy-event-media.de

  1. 将您的 ZIP/7z 文件拖放到浏览器窗口中,或使用文件浏览器。.
  2. 点击 上传.
  3. 完成后,请点击 复制 将生成的下载链接复制到剪贴板。.
  4. 发送电子邮件至 [email protected] 并将下载链接粘贴到消息中。.

注意:由于数据保护政策,如果没有此特定下载链接,我们的团队将无法访问您的文件。.


4. 清理

请务必删除原始日志文件和会话文件夹 之后 成功压缩并上传以释放磁盘空间。PLAYDECK 不会自动删除或清理旧日志文件。.


将 SCTE-35 发送至流媒体服务器

SCTE标记主要用于向视频输出中插入广告,其作用是向接收端(例如流媒体服务器)发送信号,告知应在何时插入广告以及广告时长。这使得第三方系统能够从数据库中动态选择广告。您可以进一步了解SCTE-35的总体情况 在本网站上.

本文内容:
引言
SCTE-35 标记示例
在本地测试 SCTE-35 标记
在 Nimble Streamer 中测试 SCTE-35 标记
其他信息


引言

我们还推荐 我们关于SCTE的概述文章.

您可以在 PLAYDECK 中将 SCTE 标记附加到 4 个不同的对象上:
– 片段(任意位置)
– 区块(起始和结束)
– 覆盖层(显示和隐藏)
– 操作按钮

我们没有为您提供预定义的 SCTE 标记,而是采用了另一种方法:您需要自行编写 SCTE 标记。这可能需要一些学习过程,但最终会带来更大的灵活性。 其优势在于,您的标记始终能与所有接收器兼容。为了获取片段时长及其他“变量”,我们提供了特定的“占位符”。.

请注意,您需要在“流”选项中启用 SCTE:


SCTE-35 标记示例

让我们来看一些SCTE-35的示例。它展示了SCTE-35最常用的形式,即“接头”。.

注: 此处介绍的 SCTE-35 格式与 Nimble Streamer 配合使用效果最佳(见下文)。根据您使用的流媒体服务器不同,该格式可能会有所差异。请咨询您的服务提供商。.

这将插入一条广告,并在指定时长结束后自动返回您的节目。时长将由 PLAYDECK 根据您当前正在播放的片段自动设定。该值可用 {blockduration} 或手动输入的数值替换。 若选择手动设置时长,计算公式为:片段时长乘以90000后四舍五入。 这样设置的原因在于,90000是大多数SCTE系统使用的默认时间尺度。例如:若片段时长为12.4秒,则SCTE时长应为1116000。.

除了发送时长信息外,您还可以发送两个独立的 SCTE 标记来控制广告的开始和结束。它们分别称为 CUE-OUT(从节目切入广告)和 CUE-IN(切回节目)。.

正如您可能已经注意到的,唯一的区别在于“outOfNetworkIndicator”的值是1(CUE-OUT)还是0(CUE-IN)。SCTE系统会根据“spliceEventId”将这两个标记配对。.

注: 支持的占位符包括:{timestamp} {timestampunix} {airtimenext} {airtimenextunix} {plannednext} {plannednextunix} {clipid} {blockid} {blockduration} {clipduration}


在本地测试 SCTE-35 标记

打开 PLAYDECK。目前无需加载任何片段。右键单击任意“操作”按钮,创建一个新操作,然后选择“命令/SCTE”:

点击“SCTE-35”插入 SCTE-35 样本标签。点击“确定”(两次)关闭弹出窗口:

现在,我们可以向任何兼容的流(UDP、DVB、SRT)发送 SCTE-35 标签。如果您现在点击“操作”,将不会有任何反应,因为我们目前还没有流。.

让我们创建一个测试 UDP 流,我们将输出直接写入文件,这样(暂时)就不用费心处理服务器相关的事务了。请复制以下设置,然后点击“立即开始”启动流。别忘了在“参数”中启用 SCTE-35:

现在,我们要将 SCTE-35 示例标签发送至直播流。请关闭“设置”界面,点击操作按钮数次,然后返回“设置”界面,通过“立即停止”停止直播。.

您的 SCTE-35 标签已由 PLAYDECK 记录。您可以通过“操作”按钮返回您的 SCTE-35 代码,然后点击“打开事件日志”来查看日志:

您还可以显示录制流中的 SCTE-35 标签。为此,我们需要一个名为“DVBInspector”的独立工具。该工具还需要 JAVA 运行时环境,因此请同时下载以下两项:

此工具需要 Java 运行时环境。如果尚未安装,您可以在此处下载:
https://www.oracle.com/java/technologies/downloads/

现在请解压“DVBinspector-1.18.0-dist.zip”(或类似文件名),并运行“DVBinspector-1.18.0.jar”。然后将您的 TS 文件拖放到应用程序上。按以下步骤展开树形结构,查看您的 SCTE 标记。.


在 Nimble Streamer 中测试 SCTE-35 标记

Nimble Streamer 是我们首选的流媒体服务。它不仅经济实惠、易于部署和维护,同时还具备满足高级应用场景所需的深度和复杂性:

https://softvelum.com/nimble/

请将 Nimble 的 14 天试用版安装在与 PLAYDECK 运行在同一台机器上。虽然这不是必须的,但这样会更简单,因为您无需进行网络配置。 Nimble 还会提示您在 WMSPanel 上创建一个账户,WMSPanel 是 Nimble 的基于 Web 的配置工具,因为 Nimble Streamer 本身在安装时不提供用户界面。.

信息: 若要在正式环境中测试此 SCTE-35 示例,您无需安装“Nimble Live Transcoder”或“Nimble Advertizer”插件。在试用版安装中,这些插件默认处于禁用状态。.

让 Nimble 运行起来后,还有一项配置需要手动完成。请在此处打开 Nimble 服务器配置文件:
c:\Program Files\Nimble Streamer\conf\nimble.conf

在该文件末尾添加以下几行,然后保存文件。.

scte35_processing_enabled = true 
scte35_forwarding_enabled = true 
hls_ad_scte35_forwarding_enabled = true
hls_ad_marker_format = cue
hls_ad_splice_out_cont_marker_enabled = true

重要提示: 您现在需要重启 Nimble,方法是重启电脑或手动重启 Windows 服务“Nimble Streamer”。.

以下是这些代码行,但添加了注释供您参考(请勿使用这些代码):

scte35_processing_enabled = true  // 启用 SCTE 模块。这是使用所有其他选项的前提条件
scte35_forwarding_enabled = true  // 允许通过 Live Transcoder 传递 SCTE-35 标记
hls_ad_scte35_forwarding_enabled = true  // 启用将 SCTE-35 标记转发至 HLS 流的功能
hls_ad_marker_format = cue  // 设置 Nimble 使用 CUE-OUT 和 CUE-IN 标记
hls_ad_splice_out_cont_marker_enabled = true  // 启用自动插入 EXT-X-CUE-OUT-CONT 标记

现在,让我们在 WMSPanel 中设置您的流媒体:
首先,我们将定义输入流。在菜单中选择“Nimble Streamer”,然后选择“MPEGTS In”,点击“添加 UDP 流”按钮,接着按如下方式添加输入流。如果端口 5001 已被占用,您可以使用其他任何端口。.

接下来,我们将设置输出流格式。 这里我们将使用 HLS 来演示如何将 SCTE 标记从 UDP 转换为 HLS。在同一页面中,转到“MPEGTS 输出”部分,点击“添加输出流”按钮,然后按如下方式添加。请确保将输入流选为视频和音频源。.

接下来,我们继续在 PLAYDECK 中进行设置。进入“流输出设置”,将流 URL 更改为“udp://127.0.0.1:5001”。.

信息: 您可以选择任何喜欢的视频编解码器。在此示例中,我选择了 H.264,以便让我的 NVIDIA GPU 进行编码,从而降低 CPU 占用率。此外,请在“参数”中启用 SCTE-35。.

信息: 请注意,PLAYDECK 无法直接流式传输 HLS。如果您选择“Apple HTTP Live Streaming”作为流媒体格式,输出内容将被写入文件。 因此,您需要将“流媒体 URL”指定为文件路径,例如“c:\Users\Public\Documents\stream.m3u8”。 随后可通过任意流媒体服务器使用该文件进行流媒体传输。PLAYDECK无法将 HLS SCTE 标签写入 HLS 清单文件(即 *.m3u8 文件)中。.

接下来,我们希望PLAYDECK能够自动发送SCTE信号,不仅通过按钮触发,还要与片段相关联。因此,我们插入任意片段,点击工具栏中的“命令”图标,然后添加一个新命令,选择“播放时间 0”,接着插入SCTE-35示例:

信息: 您还可以将 SCTE 标记添加到块、叠加层和操作按钮中。.

现在让我们开始吧:在 PLAYDECK 设置中对片段执行“CUE”和“PLAY”操作,并启动直播。切换到 WMSPanel,从“Nimble Streamer”菜单中打开“Live Streams”选项。 此时您将看到 1 个正在运行的直播流。点击它,然后像这样点击最右侧的问号图标。.

在“待播放的 URL”列表中,选择以“playlist.m3u8”结尾的那个,然后点击“复制”。现在将此 URL 粘贴到任何已集成或安装了 HLS 播放器的浏览器中。在本示例中,我们使用安装了以下 HLS 播放器扩展程序的 CHROME 浏览器:
https://chromewebstore.google.com/detail/hls-player-m3u8-streaming/eakdijdofmnclopcffkkgmndadhbjgka

将该网址粘贴到 Chrome 浏览器后,您会立即看到 PLAYDECK 流媒体开始播放。 现在让我向您演示如何监控 SCTE 标记。在 Chrome 中按 F12 打开开发者工具。点击顶部的“网络”选项卡。您现在会看到几个“chunks.m3u8”文件,它们是流媒体的一部分。 点击其中一个分块文件(也称为 HLS 清单),并选择旁边的“预览”。此时您将看到 HLS SCTE 标签。如果未显示,请点击另一个分块,因为我们仅在片段开始时发送 SCTE。.

就这样!我们已经达到了测试目标。接下来还有更多值得深入了解的信息。.


其他信息

登录 PLAYDECK

我们会记录所有输入和输出的 SCTE 标签。这还让您能够通过将输出信号(包括 SDI 和流媒体)循环回输入端,让 PLAYDECK 检测 SCTE 信号,从而测试您的输出 SCTE。您可以通过“日志”主菜单打开日志文件:


Nimble Streamer 中的日志记录

如果出现任何问题或情况与预期不符,首先可以查看 Nimble 日志文件。在 Windows 系统中,日志位于此处:
c:\Program Files\Nimble Streamer\log

在 Nimble 试用版中,日志记录功能默认已启用,但如果您需要手动启用该功能,以下是“nimble.conf”文件中的相关配置选项。.

log_access = file
logging = debug

现在打开日志文件,查找“SCTE”。你可能会看到类似以下的内容,这表明你在 PLAYDECK 中的 SCTE 标记中存在拼写错误:

[SCTE35] [mynewapp/mynewstream] 不支持的拼接命令类型=6

如果您的 SCTE 标记在 Nimble 中解析成功,其显示效果如下:

[SCTE35] splice_insert: event_id=4157 oon=1 immediate=1 pts_adjustment=0 pts=0 actual_pts=202593600 duration=2707200 data=0xfc....



工具:TSDuck

这是一个包含大量工具和插件的集合,用于处理 MPEG 传输流。借助这些工具,您可以根据算法或其他复杂逻辑,在 PLAYDECK 之外插入 SCTE 标记。.

https://tsduck.io/


工具:x9k3

该工具还可以将UDP流或MPEG-TS文件中的SCTE-35标记转换为HLS SCTE标签。这样,您就可以部署一个不具备自动将SCTE-35转换为HLS功能的流媒体服务器。.

https://github.com/futzu/x9k3