视频录制到Android上的循环缓冲区

lac*_*cop 10 android video-capture continuous circular-buffer video-encoding

我正在寻找最佳方式(如果有的话)将连续视频捕获到SD卡上的循环缓冲区,允许用户在事件发生后捕获事件.

标准视频录制API允许您直接写入文件,当您达到限制(由用户设置或SD卡的容量)时,您必须停止并重新开始录制.这将创建长达2秒的长窗口,其中录制未运行.这就是DailyRoads Voyager等现有应用已经做过的事情.为了最大限度地减少丢失重要事物的可能性,你可以将分裂时间设置为很长的时间,比如10分钟,但是如果事件发生在接近这个时间跨度的末尾,你就会在开始时存储9分钟的空间而浪费空间.

所以,我现在的想法如下:我将有一个大文件作为缓冲区.我将使用我发现的一些代码来捕获帧并将它们保存到文件中,最后包裹.当用户想要保留一些部分时,我会通过指向缓冲区的开头和结尾的标记来标记它.录制可以像以前一样继续,跳过标记为保留的区域.

录制停止后,或者在后台线程中(取决于手机/卡的速度),我会将标记的区域复制到另一个文件并删除覆盖保护.

主要问题,如果您不关心上述细节:我似乎无法找到将各个帧转换为Android SDK中的视频文件的方法.可能吗?如果没有,是否有任何可用的库,可能是本机代码,可以做到这一点?

我并不关心未压缩帧的大缓冲区,但导出的视频应该以Android友好的格式压缩.但是,如果有一种压缩缓冲区的方法,我想听听它.

谢谢.

Ran*_*ku' 8

在Android中MediaRecorder有两种指定输出的方法.一个是文件名,另一个是文件名FileDescriptor.

使用静态方法fromSocketParcelFileDescriptor,你可以创建一个实例ParcelFileDescriptor指向一个插座.然后,调用getFileDescriptor以获取FileDescriptor要传递给MediaRecorder.

由于您可以从套接字获取编码视频(就像您创建本地Web服务器一样),您将能够访问视频的各个帧,尽管不是那么直接,因为您需要先解码它.

  • @albwq,你的方法对你有用吗? (2认同)
  • 你能提供一些演示代码吗?这将非常有帮助!=) (2认同)