直播服务交接写“已经复制一个来源”,可能仍没有说清是否得到独立对象。OBS Studio 33.0.0的Source API参考文档,给出DO_NOT_DUPLICATE能力标记:带有它的来源不作完整复制,而采用持有引用的方式。[1] 这里讨论的是接口文档中的资源关系,没有在软件里执行复制。

来源的含义比一种画面文件更广。开头说明,它可用于渲染音视频,例如捕获显示、播放视频或显示图片,也能实现音视频过滤器与转场。obs_source_t被定义为引用计数的音视频输入来源。因而,记录中出现“source”,需要先理解它是一个软件资源对象,而非默认已经另存出一份媒体文件。

组合关系使复制范围更值得注意。COMPOSITE标记描述来源包含并渲染一个或多个子来源,场景和转场就是文档列举的例子。在这种关系里,外层对象能够包含其他来源;一次涉及场景的复制,不能只从外层名称判断每个子对象都会怎样处理。原文特意在后续规则中同时提到sources与child sources。

DO_NOT_DUPLICATE段明确说,相关来源或子来源永远不会被完整复制,而是被引用。它列举视频设备、浏览器以及音视频捕获作为不应完整复制的来源类型例子。本篇保留这些例子的身份,不根据它们推定某一实际工程已经设置了该标记,也不将接口说明转成捕获隐私或资源性能保证。

具体到obs_source_duplicate,函数条目再次说明:若来源设置了这个标记,返回的只是指向同一来源的新引用。另一项关于名称的条件只在非私有的新来源名称不唯一时成立,此时名称会被处理为唯一。新名称和新引用因此各自描述不同关系,不能只见到一次复制请求,就补写所有内容均已独立存在。

引用还连着生命周期。相邻get_ref条目说,来源仍有效时可取得增加的引用;release条目则说,最后一个引用释放后,来源被销毁。对资料阅读而言,多一个持有关系与多一个来源对象,是需要区别的计数。本文没有调用这些函数、管理内存或观察工程运行,只采用其文字定义。

这种解释的具体用途,是让直播工程的资源说明保留“完整复制”还是“引用同一对象”,以及是否包含子来源。它与把显示器区域裁成窗口大小的捕获范围问题不同。首次发布日期未知,采用范围为当前33.0.0文档主定义、能力标记及复制与引用条目的连续文字,未通读全部长页,不提供代码、设备配置、开播或可靠性结论。

信息来源

本文基于上述公开资料整理,未使用来源页面的图片、视频或嵌入媒体。