Codenameone 捕获并播放代号为One的方形视频和照片

Codenameone 捕获并播放代号为One的方形视频和照片,codenameone,Codenameone,通常情况下,视频和照片的格式不是方形的。。。但是我怎样才能在捕获和回放(代号为1)中都做到方正呢 关于拍摄,CameraKit cn1lib能否在这方面提供帮助?还有其他选择吗 谢谢您的建议。由于尺寸固定,相机套件没有这种功能。但是,如果底层API也支持它,您可能可以对其进行增强以支持该功能 播放square视频应该可以正常工作,尽管我自己还没有测试过。你可以用一个预先存在的square视频来检查它。在我提问几个月后,我平静地解决了这个问题。我在这里写了一个答案,这个答案可能对了解当前形势和其他

通常情况下,视频和照片的格式不是方形的。。。但是我怎样才能在捕获和回放(代号为1)中都做到方正呢

关于拍摄,CameraKit cn1lib能否在这方面提供帮助?还有其他选择吗


谢谢您的建议。

由于尺寸固定,相机套件没有这种功能。但是,如果底层API也支持它,您可能可以对其进行增强以支持该功能


播放square视频应该可以正常工作,尽管我自己还没有测试过。你可以用一个预先存在的square视频来检查它。

在我提问几个月后,我平静地解决了这个问题。我在这里写了一个答案,这个答案可能对了解当前形势和其他有同样问题的人都很有用

首先,Codename One的唯一选择无疑是CameraKit,除非您想重新编写另一个cn1lib。。。但是您必须区分预览相机、捕获照片或视频、查看照片或视频

在以下考虑事项中,我将只探讨Android和iOS:在本例中,我对模拟器和Javascript端口不感兴趣,因为它们与我正在开发的应用程序无关。在模拟器中,我甚至看不到相机的预览,这可能是一个与我在虚拟机中开发有关的问题

关注构建提示

请注意,CameraKit使用android.buildToolsVersion=28,这是一个较低级别的android API,低于目前由Codename one使用的android API,也是Google所要求的API(29)。目前我还没有解决这个问题,我还没有验证API 29的正确功能

相机预览

CameraKit()的当前官方版本已经足够好,可以在iOS上获得相机的方形预览:重要的是将peerComponent放置在一个容器中,通过覆盖calcPreferredSize,该容器的首选大小是强制平方的。Android上的情况不同:在这种情况下,必须修改本机界面的Java代码,以获得类似于iOS上的方形预览。简而言之,CameraKit使用GoldenEye,可以在此处找到获取任意(不一定是正方形)尺寸相机预览的答案:。为此,我创建了自己的CameraKit分叉,允许您指定视频的尺寸:。如果您想快速了解官方CameraKit版本和我的fork版本之间的差异,您必须查看这里:我没有发送拉取请求,原因很简单,我的定制只涉及我的用例,我甚至不确定我所做的所有更改是否严格必要,此外,为了发送正确的拉取请求,我还应该考虑JavaScript端口和模拟器。 拍摄照片和视频

Android以与相机预览相同的大小获取照片,在本例中为正方形。iOS以相机的实际最大分辨率(即矩形格式)获取照片。这些视频在Android和iOS上都以矩形格式拍摄。因此,一般来说,尽管相机预览是方形的,但我不知道拍摄的照片和视频

查看照片和视频

通过虚拟裁剪来查看正方形格式的照片和视频(但不修改文件,尤其是裁剪视频会涉及严重的复杂性和很长的执行时间),基本解决方案是使用自定义布局(我称之为AutoFitVideoLayout)。我不久前编写的基本代码如下:。虽然这段代码是我为视频设计的,但我发现它也适用于照片。它可以工作,但你必须根据你的应用定制它。您还应该注意日志记录,并注意Android和iOS之间是否存在任何差异

未来的改进


我的CameraKit fork很少会在Android上导致崩溃:我仍然不明白为什么,无论如何,这是一个罕见的问题(我不知道这是一个预先存在的问题还是与我的定制相关)。您还应该检查API 29支持,如开头所述。我在iOS上用CameraKit录制的视频音频方面也有问题:不过,我认为这个问题与我的定制无关。CameraKit文档也应该改进,所有功能都应该再次检查:例如,flash设置(开、关、自动)在Android或iOS上似乎都不起作用。

Hi Shai,我分析了问题并添加了详细的答案。