【问题标题】:How to implement Nvidia ShadowPlay like audio recording如何实现 Nvidia ShadowPlay 之类的录音
【发布时间】:2020-09-04 03:06:10
【问题描述】:

所以,我一直对 Nvidia 的 ShadowPlay 功能很感兴趣,它始终保持录制,当您按下按钮时,它会将视频从现在保存到过去 X 分钟,比如 15 分钟。 因此,您不会错过任何精彩的游戏时刻。

我想为 Android 构建一个类似的录音机,并且对你如何做的伪代码或概念或逻辑感兴趣。

我能想到的一种方法是每隔一分钟加上用户设置的过去一分钟保存一次录音。假设用户设置了 15 分钟,我们每隔一分钟保存一次录音,并删除任何超过 16 分钟的录音。如果用户要求保存最后 15 分钟,我们会合并所有最后 16 个文件并将它们保存在一个位置并提供给用户。甚至可以剪切第 16 个文件以生成正好 15 分钟的文件。

我有一种感觉,ShadowPlay 的实现没有这么简单。所以,我想知道是否有更好的方法来做到这一点。谢谢!

【问题讨论】:

    标签: audio-recording android-audiorecord


    【解决方案1】:

    我发现一个名为 Echo 的 FOSS 应用程序正在做我想做的事情,但不同的是,该应用程序没有写入磁盘,而是仅将音频存储在内存中,直到用户选择保存录音。

    开发人员声称使用内存缓冲区而不是写入磁盘,因为写入磁盘会耗尽电池寿命。

    Echo Play Store

    Echo Github page

    以下是从应用描述中获取的与此应用如何工作相关的一些关键点。

    1. 它在技术上是如何工作的?

      • 它使用一些内存作为循环记录缓冲区
      • 当它录制时,它只是将声音处理器指向该内存并进入睡眠状态
      • 声音处理器完成后,它会唤醒,指向内存的下一部分并再次进入睡眠状态
      • 它不以任何方式处理声音 - 不重新采样,不压缩,它只是让录音继续进行
      • 一旦您想保存录音,内存就会保存到 sdcard 上的 .wav 文件中。
    2. 这会占用多少内存?

      • 设备总内存的 1/16,但不少于 5 分钟。通常是 从 6 到 24 分钟。如果您有 2GB 的 RAM,它可能会存储 大约25分钟。您可以将此时间最多增加三倍 设置。
    3. 它可以使用闪存来扩展历史吗?

      • 它会使 cpu 写入闪存。理论上这是可能的,但我 没有添加它,因为它会缩短电池寿命。
    4. 它可以使用空闲内存来扩展历史吗?

      • 在 4.0+ 设备上,应用程序可以使用所有可用内存和 当系统处于压力下时释放它。然而,这会干扰 使用后台应用程序(通常位于未使用的内存中)并且它 内存密集型应用程序启动时可能会导致录制丢失。 用户控制的内存使用可能是最好的,但清晰且 直观的设计在这里是个问题。

    【讨论】:

      【解决方案2】:

      ShadowPlay 或 GeForce Experience 和类似软件(我认为 AMD 具有类似功能)正在将视频永久录制为 WMV 等流格式。它们具有可配置的缓冲区大小,例如 15 分钟。

      因为它是一种流媒体格式,所有超过 15 分钟的数据都将在设定的时间间隔内从视频文件的开头截断。它可能是每一分钟或每一秒。但录制会继续将新的视频数据同步追加到文件末尾。

      如果您点击保存按钮并且软件配置为保存最后 5 分钟,它只会剪切最后 5 分钟的缓冲记录并将其保存到配置的目的地。

      所以对于您的录音机来说,这实际上是相同的原理。不要每分钟都创建新的音频文件,使用 WMA 等流式音频格式。记录到缓冲区,当用户点击保存按钮时,从缓冲区中提取相关部分并将其保存到设备上的某个位置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-31
        • 2014-03-21
        • 1970-01-01
        • 2013-04-07
        • 1970-01-01
        • 2014-09-24
        • 1970-01-01
        相关资源
        最近更新 更多