OBS Studio 进度报告,2019 年 2 月

5年前 (2019-02-28)新闻资讯249

发布了新的更新,因此发布了新的进度报告。第 23 版的故事涉及大量研究和大量开发。


众筹

众筹是我现在意识到我们早就应该做的事情。我们没有理由不追求这一点。随着项目的发展,以及越来越多的贡献者加入,我想确保我们不仅可以为我自己,也可以为项目和尽可能多的贡献者保证未来。


经过多次讨论并查看现有的开源项目后,我们决定创建一个Patreon和Open Collective。我们的目标是确保项目不仅能够继续运营,而且具有增长的能力。就个人而言,我想确保我不仅可以为用户工作,而且可以将重要任务委派给其他具有核心代码工作经验的贡献者,并且实际上能够为此支付报酬。


有关详细信息,请参阅Ben (dodgepong) 的公告博客文章。


23.0 中基于浏览器的小部件的开发

浏览器小部件的目标是让我们可以集成 Twitch 等服务,并允许直接在程序中显示用户聊天等内容。在 22.0 中,我可以使用基于 CEF 的 Qt 小部件,但它们有许多问题尚未解决,所以我暂时搁置了它并发布了 22.0 版本。但是对于 23.0,我想完成它,并且把它做好。


对于那些不是程序员的人,CEF 是Chromium Embedded Framework,这是一个很棒的库,我们使用它允许我们在 OBS 中使用 Chrome 来处理浏览器源代码之类的事情。这也是 Spotify 用于其整个桌面应用程序的内容。由于 CEF,我们能够将浏览器实现为 UI,与 OBS 在加载浏览器源时已经使用的资源相比,没有额外的资源成本。


高 DPI 疯狂

第一个问题是 DPI 缩放支持。浏览器小部件无法在启用高 DPI 缩放的显示器上正确显示。最终我认为我已经找到了解决方法:浏览器子进程需要启用高 DPI 模式以及 OBS。我提交了eea74ff6,我认为它有效。然而,OBS 团队的另一个人发现,当他们有多个具有不同缩放比例的显示器时,跨显示器移动它会崩溃!在似乎花了整整一周的时间调查 DPI 问题并深入挖掘 CEF/Chromium 代码之后,我发现了微软最近在 Windows 10 中添加的一个特殊的新 API ,它修复了这个问题。这个谜团在提交8521b2中解开了。


这是前所未有的烦恼,而这完全是由于用户可以在他们的一台或多台显示器上设置的高 DPI 缩放。


Cookie 和配置文件

我实现了登录您的 Twitch 帐户的功能,并最终让 Twitch 聊天也作为可停靠面板工作。但是,我很快意识到用户可能需要跨配置文件的不同帐户;所以我必须创建一个特定于每个配置文件的“cookie 管理器”,这样如果用户从一个帐户的配置文件 A 切换到另一个帐户的配置文件 B,聊天窗口/等将适当地转到该帐户的频道。这需要将每个配置文件的 cookie 存储在一个离散且彼此独立的位置。这很痛苦,但 CEF 提供了所有工具来实现我的计划。


BTTV/FFZ 支持 Twitch 聊天

自然地,当我创建聊天时,我很快意识到还有另一个问题:太多用户使用 BTTV 和/或 FFZ 扩展来添加自定义聊天功能,例如额外的表情符号、动画表情符号或其他许多生活质量功能人们已经爱上了。如今,无论我们喜欢与否,它基本上都是 Twitch 聊天的必备工具。因此,在 OBS 团队网络专家的帮助下,我实现了自定义 javascript,将他们注入到 Twitch 聊天中。


弹出窗口和其他意外问题

在实现服务集成时,我从 Twitch 开始,它是最容易实现的服务。Mixer 同样简单,但在此过程中,我发现了另一个烦恼和延迟。当 Mixer 被 Microsoft 收购时,他们开始添加 Microsoft 功能是可以理解的:其中之一是通过您的 Microsoft 帐户登录。但是,当您在 OAuth 登录页面上使用 Microsoft 帐户登录时,它会创建一个从about:blankURL 开始并通过 Mixer javascript 控制的弹出窗口,以将其重定向到 Microsoft 登录。我以为我有自定义弹出窗口白名单工作,但后来我发现我必须将所有列入白名单的弹出窗口完全推迟到 CEF 并让它自己管理弹出窗口,只是为了让登录工作。这是一个学习过程。


Mac/Linux 浏览器问题

Mac 和 Linux 完全是另一回事。我尝试让浏览器小部件在 macOS 上运行,但发生了很多崩溃,所以我不得不推迟 Mac 对 23.0 补丁的小部件支持。我在一周前才发现问题所在,以及许多其他崩溃背后的根源,但在发布之前还需要做很多工作。因此,它必须等到 23.1 或之后的补丁。所以在未来,macOS 终于会得到一点爱和一些稳定性修复。


Linux 也一直被忽视。我计划让浏览器源代码最终在 Linux 上运行,以及浏览器小部件。


服务整合

这导致了服务集成:当进入设置或自动配置时,用户现在可以简单地连接他们的帐户,登录到他们的服务并立即使用它,而无需四处搜索他们的流密钥。我们打算整合 YouTube,但它的 API 相当复杂,所以我们暂时搁置它,先发布一个可靠的版本。其他服务如 Facebook、Restream.io 等也将陆续推出。我们还可能会添加一个外部 API,以便插件将来可以单独添加自己的集成。


请注意,如果出于某种原因您更愿意使用流密钥,您仍然可以。对于支持流密钥的服务,它是完全可选的。


NVENC 改进

最初,我们使用 FFmpeg 的 NVENC 实现来节省时间。它的实现代码不到几百行,而且与 x264 一样,它只需要系统 RAM 上的原始帧。然而,我知道如果我自己实现它并将后端改进到我们可以直接给编码器纹理的地方,它会提高性能。我们没有这样做的原因还在于支持 Windows 7 的复杂性。NVIDIA 已联系我询问此事,我们就此事进行了反复讨论。经过讨论,我想出了一个非常简单的计划:忘记 Windows 7。如果用户使用的是 Windows 7,只需退回到旧版本即可!它节省了很多时间,尽管没有我希望的那么多。


多线程很难做对

我从简单的开始开始进行初始实施:让编码器成为图形线程(通常用于渲染),但如果渲染或编码滞后,则会导致后续滞后级联。我希望编码调用不会停止,但不幸的是它可能会停止,所以唯一的解决方案是将编码分离到另一个线程,就像我们已经对软件编码器所做的那样。我必须在提交b64d7d7中实现纹理共享。这不仅可以共享纹理(就像我们为游戏捕获所做的那样),还可以在多个线程和图形上下文之间锁定纹理以确保帧同步。


经过大量的反复试验,我终于在 libobs 后端找到了一个很好的线程实现,我在 commit 93ba6e7中实现了它。它在几个纹理的圆形纹理队列缓冲区上运行,我能够进行特定的优化,如果使用 RAM 数据的编码器未同时处于活动状态(例如 x264),那么我可以直接将 NV12 纹理交换到队列而不是必须做一个额外的纹理副本。最后,在痛苦地为后端基于纹理的编码支持奠定了所有基础之后,是时候完成我的新自定义 NVENC 实现了,它已在提交 ed0c7bc 中完成。


不用说,我对自己实现它的方式以及能够提出的优化感到非常满意。这很有趣。


性能优势

新 NVENC 的性能优势非常显着。之前,流程是这样的:


OBS渲染一帧

OBS 将该纹理从 GPU 传输到 RAM,就像任何其他编码器一样

FFmpeg NVENC 上传到GPU

FFmpeg NVENC 对其进行编码

现在,它看起来像这样:


OBS渲染一帧

NVENC 对其进行编码

这不仅是 OBS 的性能改进,而且还减少了 OBS 对您在使用 NVENC 玩的任何游戏的影响。对于任何使用单一 PC 设置流式传输或录制游戏的人来说,它都是必备的。


贡献者的拉取请求和新功能

当然,我绝不是唯一一个从事这个项目的人。OBS 开发人员社区继续做出大量重大改进,而我在战壕中处理其中一些更大的问题,其中许多是您在我们的想法页面上提出的建议。事实上,我开始寻求贡献者DDRBoxman的帮助来帮助维护项目,这样我就可以委托拉取请求并专注于代码和项目管理。


以下是我们的贡献者在这个补丁中添加的一些内容:


DDRBoxman努力添加对长期存在的功能请求的支持:Decklink 输出,包括键控器支持。对于在更高级别的制作中使用 OBS 的用户来说,这是一个非常有用的功能。

pkv这个补丁肯定很忙。他在使用 FFmpeg 输出时添加了对录制多个音轨的支持,这是一个长期存在的功能请求。他还致力于添加几个新的音频增强功能,包括用于保护您的音频免受削波影响的音频限制器滤波器(在此处请求)和用于更平滑噪声门控的音频扩展器滤波器(在此处请求)。他还添加了对添加 PSD 文件作为图像源的支持。

cg2121仍然是我们最活跃的贡献者之一。他使录音完成后自动重新混合成为可能(在此处请求),这样您就不必记得自己做不想做的事情。他还在高级音频属性对话框中实现了立体声音频平衡的能力,添加了“关于”对话框以显示许可证和列表贡献者,为幻灯片源添加了图像限制,以防止用户在需要时占用过多内存使用大量图像,最后,他添加了将 OBS 画布大小调整为特定源大小的功能(在此处请求),这使得以原始分辨率准确记录应用程序变得更加容易。

nleseul添加了对批处理文件 remuxing 的支持,这样您就可以一次将多个文件从 FLV 重新 mux 到 MP4。

VAAPI 支持最终合并到这个补丁中,在 Linux 上添加了对 Intel 和 AMD 显卡硬件编码的支持。这是 OBS 开发者社区的几个成员的长期合作,特别感谢w23、reboot、kingargyle、kc5nra、GloriousEggroll和kkartaltepe帮助实现了这个功能。

Andersama使 Stats 窗口可停靠,以便您可以使其成为 OBS UI 中更永久可见的部分(在此处请求)。

Dillon继续他的工作,为 OBS 添加了可用性改进,这次改进了源选择和位置在 OBS 预览中的显示方式。这样可以更轻松地查看选择了哪个源,如果单击预览可能会选择哪个源,以及源的哪些部分当前在预览之外。他还添加了过滤热键列表的功能,以便更容易找到您要设置的热键。

请记住,许多贡献者的作品中仍有许多功能。很多伟大的人都在从事我这个不起眼的小项目,添加他们想要的功能,添加他们喜欢的小改进,提高性能,并左右提交修复。很明显,这个项目已经成为一个由人民创建、为人民服务的项目,而这正是我想要的。我非常喜欢这个社区,我迫不及待地想看看我们未来还能取得什么成就。


事后看来,23.1、24.0 及以后

简而言之,我想分享一些我近期和长期的计划。


首先,我想指出 23.0 并不意味着要花那么长时间。我原本想在 2018 年 11 月下旬发布它。但是我们一次添加了太多太大的功能,进行了太多的研发,遇到了太多我们不得不跨越的意想不到的障碍,最终以需要几个月才能完成。幸运的是,我今年不会很快再看到那个级别的任何重大研发,所以补丁速度应该会再次大大加快。


我们计划在之后迅速发布 23.1 补丁;该计划主要是合并拉取请求并快速发布次要版本,希望不超过几周。它应该有一堆较小的新功能和小错误修复,至少集成了一个或两个服务。


我近期最大的关注点是改善用户体验、设计和首次用户入职。我们需要让用户更容易开始直播或第一次录制,让他们更容易理解和使用 OBS。自动配置对话框是迈出的一大步,但很明显,我们仍然可以做一些事情来改善首次体验。今年,尤其是 24.0,预计不仅会看到更多新功能,还会看到对用户体验、入门和设计的改进。


我还想说,我也计划向我们的录音用户表达一些爱意,比如要求很高的暂停录音功能。我还计划花一些时间在 macOS 和 Linux 版本上。期待在不久的将来看到所有这些东西。


从长远来看,我们想要实现的功能几乎是无穷无尽的,用户要求的功能也几乎是无穷无尽的。我自己也有一些计划,我一直想看到它实现,现在看来我终于可以实现它了。对于请求的功能,我们不能总是保证我们可以立即获得所有功能,但如果您有您真正想要看到的功能,请务必访问想法页面,并点赞或提交您喜欢的功能查看。即使我们不能总是立即实施它,它也可以帮助我们衡量大多数人想要看到的内容,并帮助我们确定事情的优先级。


告别长期贡献者和朋友

该项目的长期贡献者 Michel “Osiris” Snippe 于 2019 年 2 月 15 日意外去世。他在项目一开始就加入了该项目;他总是积极帮助用户并修复错误,几年前当浏览器插件的原作者不得不转向其他项目时,Osiris 亲自接管了插件的维护一两年,在一段时间内,由于它的复杂性,我无法花时间自己维护它。在最长的时间里,他负责管理浏览器插件的构建:尽可能地修复小错误、添加小功能、合并拉取请求,他尽其所能地照顾插件,直到我终于能够重构项目并制作它是 2018 年的核心插件。


他为人和善,总是积极参与社区活动。在我们发现失去他之前不到一周,他正在我们的 Discord 服务器上闲聊,帮助用户提供支持,并与其他贡献者、模组和管理员闲逛。突然失去一个朋友很痛。这很伤人。这让我难过,也让我心烦意乱。


谢谢米歇尔,感谢你在我们需要的时候帮助我们,感谢你成为我们社区的一员,感谢你成为我们的好朋友。我们都会想念你的。


谢谢

我要感谢大家使用我们不起眼的项目,我要感谢社区将它提升到一个新的水平并制作自己的功能,以及对我的耐心。它最初是我想出于无聊而创造的一种工具,它不仅彻底改变了我的生活,也改变了许多其他人的生活。它创造了一个美妙的朋友社区。由于我们不起眼的工具的帮助,你们中的许多人都取得了成功,这一事实让我很高兴看到。非常感谢您使用 OBS,我希望我们能尽可能地继续努力。


另外,感谢您阅读这篇巨型博文。有一大堆东西要讨论,我什至没有涵盖所有内容。


- 其他


此软件“仅限学习交流,不能用于商业用途”如用于商业用途,请到官方购买正版软件,追究法律责任与本站无关!

我们每月需支付高额服务器费用,捐赠将保证服务器有更好的配置和稳定运行;非常感谢您的捐赠支持。
(资源收集整理维护不易,敬请珍惜并感谢开发者。)