Android 录屏时通常使用 MediaCodec 做编码器,MediaCodec 会创建一个 Surface 提供给 VirtualDisplay 填内容。通常,Android系统系统刷新速率是60fps,硬编码成的h264文件帧率通常是30fps。如果想调整这个帧率怎么办呢?
文章 https://stackoverflow.com/questions/31527134/controlling-frame-rate-of-virtualdisplay 进行了讨论,结论就是不能在MediaCodec获取到的buffer里减数据,因为拿到的已经是硬编码的h264数据了;得从源头着手,源头就是 virtualdisplay。但是 virtualdisplay没有控制帧率的地方,那么我们就不能用 MediaCodec 的 Surface了,得自己创建一个surface,从这个surface得到帧的原始数据,然后可以剔除一些帧,达到降帧的目的。
文章 https://bigflake.com/mediacodec/EncodeAndMuxTest.java.txt 就是自己创建一个 OpenGL Surface的办法,把这样一个Surface传给virtualdisplay应该就能控制帧率了。
网友评论