我在考虑有效的解决方案时遇到了一些麻烦。我预见到了一些问题,首先是...
OOM预防
如果我想要过去30秒甚至5分钟它是可行的,但是如果我想要过去30分钟或整整一小时,或者可能一切呢?保持字节缓冲区意味着将其存储在RAM中。存储超过一百兆字节听起来像虚拟记忆自杀。
好的,如果我们将先前录制的媒体的Y时间(例如30秒)存储到某个tmp文件中的磁盘,该怎么办?这可能会起作用,我可以使用像mp4解析器这样的库来完成它们的连接。然而...
如果我们有30分钟的价值,大约60个30秒的剪辑。这似乎是一种刻录SD卡的好方法,即使这不是问题,我也无法想象将一百多个文件连接成一个文件所需的时间。
根据我一直在研究的内容,我正在考虑使用本地套接字来做类似的事情......
MediaRecorder - > setOutputFile(LocalSocket.getFD())
然后在本地套接字......
LocalSocket - > FileOutputStream - >写(数据,位置,bufsiz) - >齐平()
后台线程处理写入和跟踪位置和缓冲区的位置。
这纯粹是伪代码,我还没有足够的时间来测试这个,我是否正朝着正确的方向前进?从我的想法来看,这只会保留一个被覆盖的文件。由于它每Y秒只写入一次,因此它最大限度地减少了IO开销,并最大限度地减少了它占用的RAM量。
视频长度与缓冲区大小
如何根据请求的视频大小获取缓冲区的大小。这很奇怪,因为我看到一些视频很小的短视频。所以我不知道如何准确地确定这一点。如果我知道从Media Recorder设置的视频长度,编码等,我知道如何预测这个吗?
实施例
有谁知道这方面的任何例子?我不认为这个想法完全是原创的,但是我没有看到很多它们,如果它确实是闭源的。一个例子很长。
提前致谢