Bleeding edge

Error accessing the camera: DOMException: Device in use 본문

Javascript/Electron

Error accessing the camera: DOMException: Device in use

codevil 2024. 1. 12. 19:46

 

이 글에서 이야기 하고 싶은 내용

일반적으로 chrome 하나만 사용할 때는 잘 볼 수 없는 에러이다. 이 글에서는 이 에러를 해결하는 방법보다는 일렉트론을 이용하여 프로그래밍을 할 때 어떻게 에러를 처리할 것인가에 대한 이야기를 하려고한다.

이 에러를 처음 만났을 때

이 에러를 처음 만난 것은 일렉트론으로 프로그램으로 빌드를 한 후에 패키지를 마친 새로운 프로그램이 완전히 꺼지지 않은 상태에서 같은 프로그램이 2개가 켜지고 그 프로그램이 각각 카메라를 킨 경우에 발생했다. 

 

이 에러는 정확히 언제 생길까?

이 에러를 만나기 이전에는 electron의 웹뷰에서 보이는 카메라 1개와, 보이지는 않지만 qr 리딩을 위한 카메라 1개 총 2개를 띄울 예정이었다.(사실, 웹뷰에서만 카메라를 1개를 띄워도 됬었지만, qr이 카메라에 들어가지 않은 경우도 고려해야 하기 때문에 [기기가 카메라가 아닌 바코드 리딩기기가 있는 경우] 이런 아키텍쳐를 만들게 되었다) 하지만 위의 에러를 보고, 식겁했었다.

한나만 골라 벨라.

 

문제의 상황 찾기

우선 해결방법으로 stream stop이라는 방법을 찾아두고, 내가 만들어야하는 기기의 특성상 1개의 프로그램만 메인으로 켜져있을 예정이기 때문에 (키오스크 기기 특성상) 1개의 프로그램에 2개의 카메라만 사용가능하면 문제가 없었다. 

1. 크롬 + 키오스크(사용 불가)

당연한 결과였던 것 같다. 

2. 크롬 1탭 + 크롬 1탭(사용 가능)

탭과 탭이 상관 없는 것을 보고 크롬 1 윈도우 + 크롬 1윈도우도 가능할까?를 확인했다.

3. 크롬 1윈도우 + 크롬 1윈도우(사용 가능)

 

결론

두개의 프로세스가 켜지지 않는다고 가정했을 때 문제가 없는 것을 보아, 카메라가 켜져야하는 시점에서만 잘 확인하면 문제가 없을 것 같다고 생각하고 그대로 사용하기로 했다. 사실 이번에 문제가 생겼던 것은 에러로 인하여 제대로 종료가 되지 않은 electron의 프로그램이 다른 electron의 프로세스에 영향을 주어서 생겼던 문제인데, 일반적으로 제대로 close버튼을 누른 electron의 경우에는 이러한 현상이 안생겨서 package를 완료한 상태에서 에러가 생긴 경우 프로세스의 관리에 대해서 시간이 있을 때 고민을 해보기로 했다 (힘내 미래의 나!)