Android上同时发生的MediaRecorder实例的最大数量?

时间:2015-04-27 10:35:51

标签: android mediarecorder

我创建了Android应用程序,可同时记录设备屏幕(使用MediaProjection)API和来自摄像头的视频。我在两种情况下都使用MediaRecorder。我需要一种方法来确定设备是否实际上能够同时录制两个视频流。我假设在给定设备上可以同时编码的流数量有一些限制,但我在Android平台上找不到任何API来查询该信息。

到目前为止我发现的事情:

MediaRecorder.release()的文档建议尽快发布MediaRecorder: "即使支持相同编解码器的多个实例,当同时使用不必要的多个实例时,也可能会出现性能下降。" 这表明对编码实例数量的限制直接限制了MediaRecorder的数量。

我已经编写了测试代码,用于创建MediaRecorders(配置为使用MPEG4 / H264)并在循环中启动它们 - 在Nexus 5上,当在第6个实例上调用prepare()时,它始终以java.io.IOException: prepare failed失败。这表明在Nexus5上只能有5个MediaRecorder实例。

2 个答案:

答案 0 :(得分:0)

我认为这实际上取决于设备和内存容量...你可以随心所欲地读取屏幕和凸轮的缓冲区,但是一次只能读取一次,我想是为了防止并发,但说实话,我不是&#39 ;我确实知道

答案 1 :(得分:0)

我不知道你可以查询这些信息的任何东西,尽管有可能是我没看到的Lollipop。

硬件编解码器实例的数量有很大限制,这在很大程度上取决于硬件带宽。设备可以处理多少个流并不是一个简单的问题 - 一些设备可能能够编码两个720p流但不能编码两个1080p流。

在某些设备上,如果编解码器的硬件资源不足,编解码器可能会回退到软件实现。事情会奏效但速度会慢很多。 (我已经看过这个用于H.264解码,但我不知道它是否也适用于编码。)

我认为CTS中没有最低系统要求。知道所有设备可以解码两个1080p流并同时编码一个1080p将是有用的,这样就可以为所有设备制作视频编辑器,但我不知道是否添加了这样的东西。 (一些非常便宜的设备很难满足这一要求。)