如何像录音一样实现Nvidia ShadowPlay

问题描述 投票:0回答:2

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

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

我能想到的一种方法是每隔一分钟保存一次记录,再加上用户过去设置的一分钟。假设用户已设置15分钟,我们将每1分钟保存一次记录,并删除16分钟之前的任何记录。如果用户要求保存最近的15分钟,我们将所有最后16个文件合并在一起,并将它们保存在一个位置,然后将其提供给用户。甚至可以将第16个文件切成15分钟的文件。

我感觉ShadowPlay的实现并非如此简单。因此,我想知道是否有更好的方法可以做到这一点。谢谢!

audio-recording android-audiorecord
2个回答
0
投票

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

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

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

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


0
投票

[我发现了一个名为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或更高版本的设备上,应用可以使用所有可用内存, 当系统承受压力时将其释放。但是,这会干扰 使用后台应用程序(通常驻留在未使用的内存中),并且 启动占用大量内存的应用程序时,可能会导致记录丢失。 用户控制的内存使用情况可能是最好的,但要清楚并且 直观的设计在这里是个问题。
© www.soinside.com 2019 - 2024. All rights reserved.