picture 0

有时候不得不承认,码代码也是个充满玄学的东西

前段时间从皮蛋那接了一个外包,需求很简单,调摄像头录一小段视频,然后上传到服务器基本就可以了。最开始说只需要做Android的,那就原生无压力,可是后面又说iOS版本也要,那没办法,只能上React Native,其实问题也不大,三方库一大堆,yarn add就完事了

❀❀

磨磨唧唧等了好久,首笔款到账后开干,没几个页面很快就搞完了,拿了几个手机测试,没啥大问题,丢过去测试没啥大问题,那就完事,休息。
然后中间胡乱操作,差不多解决了几个头疼的问题,比如播放avi格式的视频啊,服务端不能读取mp4的视频等待问题,三方库加了删,删了加,虽然麻烦,但是好歹解决了。
后来甲方换了一个P30 来测试,并指明要求4K分辨率,没辙,只能分辨率拉满,自己手机装上测试,没问题,4k,丢过去,完事。
然后就Boom了……

❀❀❀

其他手机都没事,P20也没事,录4k完全没问题,到了P30,只要是3840*2160的分辨率,开始录像后摄像头预览就冻住了,然后录像失败,各种尝试,再加上手头没有p30真机,debug起来贼麻烦。
首先,远程真机走一波,wetest走起,还好还有免费额度,直接上,然后崩溃,下载日志,一点点看,终于找到报错

1
2
3
MediaRecorder: start failed: -16
Record start failed
java.lang.RuntimeException: start failed.

有报错就好办了,先搜一波,然而并没有找到, start failed的有很多,但是code码缺大多是-19,-38 。大部分解决方案也都是设置分辨率,设置编码之类的。摄像头三方库的issue也被我翻了个边,有人有同样问题,却也没人回复。由于手头没有能复现的真机,测试只能打包丢过去,而RN打包一次要10几分钟,可想而知效率有多低。

❀❀❀❀

试着换了分辨率后,发现P30录制1080p的视频是没问题的,然后就简单粗暴,直接判机型,p30就给1080p,测试没问题,休息。
没过几天,甲方反馈,1080p不行,必须要4k,手机支持4k必须给我4k。没办法,谁让是甲方爸爸,还好甲方提供了一台p30给皮蛋。在此期间,我也找了一个谷歌给的录像demo测试。远程皮蛋的电脑开始调试。
在试了多种分辨率和编码方式后,发现只要是3840*2160的分辨率就崩溃,他崩溃了,我也崩溃了。无奈,最终只能用3648*2056交差完事

❀❀❀❀❀

问题是永远解决不完的,这不,刚解决分辨率的问题,甲方爸爸又提出了新问题,录视频的时候会有自动对焦,所以焦距会发生点变化,画面就会模糊一下然后变清晰,甲方爸爸将其描述为“呼吸感”,不得不佩服其形容能力。
既然新问题,那就解决呗,查api,查属性,把自动对焦给关了。然后就有了新问题,画面会模糊(这不废话么,除非手动拿手机前后对焦),录像开始的时候画面会放大一下。
第一个问题好解决,因为查属性的时候看到了有这个,加上,顺便给个滑动条,你自己调吧。debug测试,欸,怎么不顶用呢???又是一顿翻issue,最终加上useCamera2Api属性完事
第二个就不好办了,试了几下后发现只是预览放大了,视频并没有,搜了一波,并没有有效的解决方案,就暂时先不管了,休息

❀❀❀❀❀❀

所以就很迷,华为到底在p30上搞了啥,只要是3840*2160就不行,百思不得其姐,就这样吧,世界未解之谜……希望这单快点结束,告辞……