什么是缓冲MediaProjection最后X分钟的最有效方法

时间:2015-11-22 20:09:02

标签: android android-mediarecorder circular-buffer screencast android-mediaprojection

我在考虑有效的解决方案时遇到了一些麻烦。我预见到了一些问题,首先是...

OOM预防

如果我想要过去30秒甚至5分钟它是可行的,但是如果我想要过去30分钟或整整一小时,或者可能一切呢?保持字节缓冲区意味着将其存储在RAM中。存储超过一百兆字节听起来像虚拟记忆自杀。

好的,如果我们将先前录制的媒体的Y时间(例如30秒)存储到某个tmp文件中的磁盘,该怎么办?这可能会起作用,我可以使用像mp4解析器这样的库来完成它们的连接。然而...

如果我们有30分钟的价值,大约60个30秒的剪辑。这似乎是一种刻录SD卡的好方法,即使这不是问题,我也无法想象将一百多个文件连接成一个文件所需的时间。

根据我一直在研究的内容,我正在考虑使用本地套接字来做类似的事情......

MediaRecorder - > setOutputFile(LocalSocket.getFD())

然后在本地套接字......

LocalSocket - > FileOutputStream - >写(数据,位置,bufsiz) - >齐平()

后台线程处理写入和跟踪位置和缓冲区的位置。

这纯粹是伪代码,我还没有足够的时间来测试这个,我是否正朝着正确的方向前进?从我的想法来看,这只会保留一个被覆盖的文件。由于它每Y秒只写入一次,因此它最大限度地减少了IO开销,并最大限度地减少了它占用的RAM量。

视频长度与缓冲区大小

如何根据请求的视频大小获取缓冲区的大小。这很奇怪,因为我看到一些视频很小的短视频。所以我不知道如何准确地确定这一点。如果我知道从M​​edia Recorder设置的视频长度,编码等,我知道如何预测这个吗?

实施例

有谁知道这方面的任何例子?我不认为这个想法完全是原创的,但是我没有看到很多它们,如果它确实是闭源的。一个例子很长。

提前致谢

0 个答案:

没有答案