gpt4 book ai didi

c# - 保留录制视频的最后 X 分钟

转载 作者:太空宇宙 更新时间:2023-11-03 10:57:31 25 4
gpt4 key购买 nike

我正在开发一个应用程序,它需要我录制大量视频数据,但我不需要将它们全部存储。我需要做的是仅保留录制流的最后 X 分钟。

这意味着每次我需要存储新样本时,我都需要一种方法来删除最旧的样本。

所以我开始研究这篇文章:http://msdn.microsoft.com/library/windowsphone/develop/hh394041%28v=vs.105%29.aspx

我的第一个想法是每隔 X 分钟使用计时器调用 StopVideoRecording(),然后调用 StartVideoRecording()

现在,起初这是有道理的,但行不通。

问题是这样做会每隔X分钟删除之前的数据。

这意味着,如果我们记录 12 分钟并且我们需要保留最后 5 分钟,按照这个想法,我们将删除前 5 分钟,然后删除后 5 分钟,只留下最后 2 分钟,这不是我想要的寻找。

由于 OnSample 方法,我将注意力转移到了 VideoSink 类。

这看起来很简单,我们拦截每个样本并将其存储在一个固定大小的字节数组中(大小取决于所需的长度和样本的大小)。

当缓冲区已满时,我们只需在添加新样本之前向左移动所有内容。问题是仅仅 1 分钟的测试视频会生成大约 2GB 的样本,这使得这种方式真的很难管理。

我知道这些样本是未压缩的,但对于智能手机来说并不难,获取样本、压缩它、移动一个大数组、插入样本并将数组写入文件并在每个 sample 收到了吗?

是的,我说的是将数组写入文件,因为我们需要以某种方式保留该视频。电池可能会停止工作,将它放在 RAM 中会让我们丢失我们记录的所有内容!

想到的最后一个想法是使用 VideoSinkFileSink 的组合。虽然 FileSink 具有压缩魔力(我什至反编译了此类以了解它的作用,但里面没有代码!),我们使用 VideoSinkOnSample 方法从 FileSink 使用的 mp4 文件中手动删除不需要的数据。

这听起来很难,因为我不知道我是否可以同时使用 FileSinkVideoSink 写入文件而不会出现并发问题,而且我还没有找到一个很好的 c# 库,可以帮助我处理 mp4 文件,而无需处理其结构。我找到的唯一图书馆是这个 http://basemedia.codeplex.com/但它完全没有文档(文档页面中的每个链接都会出现 404 错误)。

我开始认为这是无法完成的事情,但我想看看这里是否有人可以为我指明正确的方向。

编辑:需要明确的是,我使用了“录制”这个词而不是“录制”这个词,因为我说的是在视频还在录制的时候对其进行修剪!这不是在保存后对其进行编辑,而是更像是在将其写入磁盘时从流中删除内容。

最佳答案

我无法为您提供代码,只能提供一个想法。因为你有需求:

  1. 我需要做的是只保留录制流的最后 X 分钟
  2. 目标平台是windows phone 8

我想对您的第一个想法进行一些修改:

  1. 在单独的文件中写入视频流的每一分钟
  2. 此外,您还需要将 +1 视频文件保留几分钟以上。例如,如果您需要 5 分钟,您应该始终保留 6 个文件,因为最后一个文件可能未满。
  3. 通过使用 DirectShow,您可以将这些文件合二为一。准备好使用 C++(作为替代方案,您可以使用一些服务或为此创建自己的后端)

关于c# - 保留录制视频的最后 X 分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18932781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com