我正在寻找最好的方法(如果有的话......)将连续视频捕获到 SD 卡上的循环缓冲区,从而允许用户在事件发生后捕获事件。
标准视频录制API允许您直接写入文件,当达到限制(由用户设置,或SD卡的容量)时,您必须停止并重新启动录制。这将创建一个长达 2 秒的窗口,其中不运行录制。这就是 DailyRoads Voyager 等一些现有应用程序已经做的事情。为了最大程度地减少错过重要内容的可能性,您可以将分割时间设置为较长的时间,例如 10 分钟,但如果事件发生在该时间跨度即将结束时,您会通过在开始时存储 9 分钟的任何内容来浪费空间。
所以,我现在的想法如下:我将有一个大文件作为缓冲区。我将使用我找到的一些代码来捕获帧并将它们保存到我自己的文件中,最后进行环绕。当用户想要保留某些部分时,我将通过指向缓冲区中的开头和结尾的指针来标记它。记录可以像以前一样继续,跳过标记为保留的区域。
录制停止后,或者可能在后台线程上(取决于手机/卡速度),我会将标记的区域复制到另一个文件并删除覆盖保护。
主要问题,如果您不关心上述细节:我似乎无法在 Android SDK 中找到将各个帧转换为视频文件的方法。是否可以?如果没有,是否有任何可用的库(也许是本机代码)可以做到这一点?
我并不真正关心未压缩帧的大缓冲区,但导出的视频应该以 Android 友好的格式压缩。但如果有一种方法可以压缩缓冲区,我想听听。
谢谢。
在安卓中MediaRecorder
有两种方法来指定输出。一个是文件名,另一个是FileDescriptor
.
使用静态方法fromSocket
of ParcelFileDescriptor
你可以创建一个实例ParcelFileDescriptor
指向一个套接字。然后,致电getFileDescriptor
得到FileDescriptor
传递给MediaRecorder
.
由于您可以从套接字获取编码视频(就像您创建本地 Web 服务器一样),因此您将能够访问视频的各个帧,尽管不是那么直接,因为您需要先对其进行解码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)