티스토리 뷰

반응형

목적 : 차량용 블랙박스를 한번 만들어 볼까 해서 시작

내용 : 디바이스 성능에 따라 다르겠지만 아이폰을 통해 블랙박스를 사용하고 싶었기에 Tmap이나 사용하고 있었던 Ployd Black Box를 참조하여 개발하게 되었다.


역시나 생각했던것과는 달리 시작과 동시에 문제점들이 나타나기 시작하였다.

1. 기존 앱 개발하면서 사용하였던 UIImagePickerController 를 이용하여 녹확를 시도 해 보았으나 옵션 설정 코드를 어떤 순서로 주느냐에 따라 앱이 죽는문제가 발생하여 2~3일 허송세월을 보냈다. 

=> 이리저리 옵션을 바꿔보다 애플 셈플코드가 생각나 부랴부랴 관련 코드를 찾기 시작했다. 동영상을 녹화하기 위해서 사용하는 프레임워크나 라이브러리를 찾아보기 시작하여 플레이어부터 레코딩 할 수 있는 앱까지 다양하게 받아보았다. 당연히 애플에서 제공해주는 셈플이 최고!! 다음과 같은 프로젝트 셈플을 받아 하나씩 실행해 보기 시작하였다. 내가 너무 쉽게 생각했었던거다.


2. 동영상 관련 자료를 찾다가 자주 보았던 AVCam이라는 프로젝트를 실행시켜 보았을 때 이것도 내가 찾고 있는 셈플일거라고 믿어 의심치 않았지만 사용해보지 않은 프레임워크라 처음에 망설여졌다. 일단 녹화를 진행 했을경우 카메라롤에 저장이 잘 되었기에 "손대고 보자" 하고 무대포로 기존 코드를 하나씩 붙여보았다. DB저장 및 플레이어등 여러 기능을 붙여보고 사용해보면서 쓸 수 있을거라 생각했고, 실제로 쓰는데도 문제가 없을것 같아 실제 운전하면서 테스트를 해보던중 디바이스 용량이 없다는 경고 메시지를 보게 되었다. 



"어라 기본 사진폴더에만 저장되는줄 알았것만" Organizer를 통해 개발한 앱들의 내부 폴더를 살펴보았더니 temp 폴더에 지금까지 녹화된 영상 파일이 저장된것을 확인할 수 있었다. 다소 번거롭지만 운행중에 저장했던 파일들은 그날저녁 지우고 다시 녹화를 했었기에 몰랐었던 것이다. 쩝... 삽질한건가? temp파일만 지우면 되지 않을까? 고민이 또 다시 되기 시작한다. 
어떻게 할까 하다가 아직 확인해 보지 않은 셈플 코드를 더 확인해 보기로 하였다.

두둥!! VideoRecorder를 실행해 보는 순간 이것 또한 내가 찾는 셈플같은데? 하지만 순간 또 고민이 되기 시작한다. imagePicker를 쓰는게 코드도 단순하고 편하긴 한데 avCam셈플 또한 버리기 아깝고 과연 지금 나온 앱들은 어떤것으로 녹화를 하고 있을까? 결국엔 둘다 해보는 수 밖에... 트랜드를 따라가자면 당연히 avCam을 써야하는게 맞는거 같기도 하고 더 늦게 개발된 셈플소스기도 하고 블럭코딩도 이제 많이 써야할텐데...고민이 되기 시작한다. 그러다 기존 UIImagePickerController 개발하다 버린 소스를 보니 옵션 주는 순서에 따라 앱이 Crash되는 문제를 발견하고서...이건 머지?!! 결국 다시 avCam을 버리고 기존 이미지피커 소스를 활용하기로 결정하였다.


3. 테스트 목적으로 레코드를 시작했으나 녹화를 진행하면 최대 10분씩만 녹화된다는걸 알 수 있었다. 10분이 지나면 다음과 같은 Alert화면이 나오고 더 이상 녹화는 진행되지 않았으나, 영상을 저장해주는 시점에 다시 레코딩을 시작하면 Alert과 무관하게 녹화는 계속해서 진행할 수 있었다. 하지만 Alert이 발생하는 문제는 해결해야만 했다. Alert이 점점 쌓이기 때문이었다.


=> 이미지피커의 옵션중 videoMaximumDuration 속성을 주었지만 팝업은 계속해서 생성되었다. 그 순간 드는 생각은 타이머를 이용해서 10분이 초과되기전 녹화를 중지하면 되지 않을까? 싶어 타이머를 추가하였다. 하지만 비디오 퀄리티에 따라 용량이 800Mb정도는 상관이 없었지만 그이상 되는 파일들은 파일 저장시 저장되지 못하고 tmp폴더에 저장되었다. 여기서 2가지 방법이 떠올랐다. 첫째는 비디오 품질에 따라 녹화시간을 줄이는 것과 avCam에서 수정하려 했던것 처럼 tmp폴더에 저장된 파일을 재 압축을 통해 다시 저장한 후 tmp폴더에 파일은 지우는것이다. 타이머를 이용하는 방법은 생각해 보았을 때 테스트를 통해 시간만 정하면 해결될 문제였다. 물론 디바이스마다 메모리 크기때문에 다를 수 있겠지만 그것 또한 테스트로 가능한 문제였다. 해서 일단 mp4형식으로 재 저장하는방법으로 테스트를 진행해 보기로 하였다.

테스트 결과 별도로 파일을 mp4로 저장한다 하더라도 mov파일과 용량이 같으며, 별도로 파일을 쪼개거나 변환하기에는 메모리가 감당할리 없을 터 결론은 비디오 압축이나 분활 저장이 해당 앱 성격상 맞지도 않으며, 처리 또한 되지 않을것이다. 별 수 없이 시간제한을 통해 처리를 해야할듯 싶으나 스토어 앱을 분석한 결과 저장시간에 따라 저장된것이 아닌 파일 크기에 따라 저장이 되는것을 발견하였다. delegate 매서드 중에서는 용량을 체크하는게 없는데 실시간으로 앱 저장공간을 체크한건지 어떻게 처리했는지는 아리송하다. 이번엔 용량체크 OR 시간체크 둘중 또 고민을 해봐야 할 것 같다.


 <10초 녹화시 videoQuality 속성에 따른 파일 크기>

 UIImagePickerControllerQualityTypeLow

 104 ~ 188kb( 형태만 구분되는 정도)

 UIImagePickerControllerQualityTypeMedium

 656 ~ 972kb

 UIImagePickerControllerQualityType640x480

 3.9 ~ 4.5Mb

UIImagePickerControllerQualityTypeHigh

 26.4 ~ 28.6Mb

UIImagePickerControllerQualityTypeIFrame960x540

 59.1 ~ 71.4Mb

UIImagePickerControllerQualityTypeIFrame1280x720

 81.9 ~ 119.3Mb




반응형
댓글
반응형