본문 바로가기

TroubleShooting

Unreal AR with Android

사용 스팩

Mobile -  Galuxy22

UnrealEngine -  4.27.2

Plugin - AndroidCamera

 

상황

순서대로 폰 카메라 캡쳐, 자이로 값을 UE 카메라에 연동, 캡쳐 영상에 크로마키 적용.

세 가지 상황의 테스트를 마치고 각 기능들을 합치던 중 문제 발생.


문제 1 - 별 문제는 아닌데,,

화면 캡쳐 버튼을 누리면 어플리케이션 종료.

 

문제 원인

모바일 카메라의 영상을 가져오기 위해 방법들을 찾다가 설치한 ARCore plugin.

카메라 폰(Pawn) 액터 생성 시 세션을 실행하도록 해뒀었는데 두 plugin 사이에 충돌이 발생했다.

 

해결

ARCore plugin 호출 안 함.


문제 2

문제1은 간단히 해결 되었지만, 모바일 카메라의 영상이 안 나왔다.

 

문제 원인

원인 파악에 시간이 많이 소모되었는데, 간단한 문제였다. 카메라 권한 요청이 문제였다.

 

원인 파악 과정

더보기

디바이스 로그를 보았다. 에러 로그가 노랗다.

D/UE4     : [2022.05.25-06.39.07:042][326]LogAndroidCamera: Warning: Failed to set data source for URL vidcap://rear

안드로이드 카메라 어플을 파고파고 들어가보면 cameraplayer14.java 파일을 훑어봤다.

setDataSourceURL함수 내부에 이런 부분이 있는데, 카메라 아이디 오류 로그는 찍히지 않았었다.

try
{
    mCamera = Camera.open(cameraId);
}
catch (Exception e)
{
    mCamera = null;
    GameActivity.Log.debug("setDataSource: could not open camera: " + cameraId);
    return false;
}

그럼 좀 더 위쪽으로 올라가며 최종적으로 로그가 찍히는 부분을 찾아보았다.

로그가 찍혀있지않아 무심코 지나쳤던 필터부분. 여기가 문제였다.

if (!CameraSupported)
{
    return false;
}

그리고 로그 색이 노랗지 않을 뿐 찍혀있었다.

D/UE4     : [GameActivity] Camera supported
D/UE4     : [GameActivity] Camera permission not granted

카메라 권한, 권한을 달라!

 

해결

권한요청 노드 추가.

 

해결 과정

1. ARCore 플러그인의 경우 세션실행 시 요청이 갔었기에, 해당 플러그인(AndroidCamera)에도 요청하는 곳이 있는지 찾아보았다. 그 과정에서 AndroidCamera_UPL.xml 파일을 봤더니 요청하는 부분이 적혀있었다. 다만, 자동으로 호출하지는 않는지 여전히 카메라 권한 요청을 하지 않았다.


2. 프로젝트 세팅 - 안드로이드 - 고급 apk 패키징 - 추가권한 메뉴에 android.permission.CAMERA 문구를 추가해보았다.

여전히 권한 요청이 없었다.

 

3. 사용될 블루프린트(UMG widget)에 RequestAndroidPermissions 노드를 사용해서 추가해서 요청했다. 요청이 잘 갔다.

< 안드로이드 권한 요청 노드. CameraPermissions 값에 담긴 값은 android.permission.CAMERA 이다. >

 


해결까지 걸린 시간

약 6시간 -> 거의 하루 업무시간 다 썼지 뭐..

 

 

 

 

'TroubleShooting' 카테고리의 다른 글

Stable-Diffusion-Webui(DDSD)  (0) 2023.06.02
Install Jupyter-Notebook on AWS EC2 server.  (0) 2022.10.12
웹 앱 호스팅  (0) 2022.04.29
Merge video and audio (with MediaRecorder)  (0) 2022.03.21
가상서버 설정  (0) 2022.03.15