iOS/이슈(19)
-
AVFoundation - 비디오의 인코딩(압축) 및 업로드(1) - Export Session 이용
비디오의 압축 비디오 업로드 시, AWS 서버 비용 때문에 용량을 줄여달라는 요구 사항이 있었다. 그래서 ExportSession를 거쳐 Asset Reader/Writer를 적용한 경험을 포스팅해보려고 한다. 애플 도큐먼트에는 가능하면 버전이 업데이트 될 수록 최신 기술들(HDR 등)이 적용될 테니 프리셋을 사용하라고 나와있었다. custom하면 대응해줘야하기 때문이다. 하지만 프리셋 만으로 원하는 크기만큼 인코딩(압축)되지 않았고, Asset reader/writer를 사용하기로 했다. 간단한 이론 비디오는 무엇인가? FFmpeg는 무엇인가?에 대한 설명들이 참조 링크에 잘 설명되어 있다. 아래 [참조 2]를 보고 [참조 1]을 보는 것을 추천한다. 자세한 내용은 따로 글 써봐야지 ExportSess..
2023.03.18 -
잘못된 코드로 인하여 AWS 폭탄 맞은 이야기
깊은 고민 없이 사용한 잘못된 코드(라이브러리)로 비용이 많이 청구된 이야기를 공유해보려고 한다. 결론 부터 말하자면, 비디오의 캐시 다운로드로 인하여 아직 개발 중이어서 사용자가 적은데도 불구하고 AWS 비용이 30만원이 청구되었다. 개발 히스토리 비디오 피드 리스트가 있는 화면을 만들게 되었다. 처음엔 트위터의 비디오 피드 같이 심플한 디자인이어서 AVKit만으로 충분했다. 하지만 점점 유튜브 비디오 UI처럼 요구 사항이 늘어나게 되어, AVPlayer Layer를 사용한 커스텀이 필요하게 되었다. ControlUI도 필요하고, 비디오 캐시 처리를 하면 데이터를 아낄 수 있을 것 같아 Custom 확장성과 비디오 캐시를 지원하는 GSPlayer 라이브러리를 사용했다. 이 당시에는 AVAsset의 이해..
2023.03.17 -
[AVAsset]에서 duration load delay 이슈
비디오 피드 리스트 스크롤에 버벅이는 이슈 발생 의심 case asset thumbnailGenerator case asset duration case video size 처음엔 썸네일과 비디오 사이즈 때문에 버벅이는 줄 알았는데 asset의 duration을 load하는 것 때문에 버벅였다. duration load를 background queue로 돌리고 할당하는 부분을 main으로 줬는데도 load 부분에서 버벅임. Try. Cell bind()에서 Background Thread로 로드하기 여전히 버벅임 Try. NSCache 이용하여 TableVIew/CollectionView에서 데이터 딜레이 없이 불러오기 아래 샘플 프로젝트를 참조하여 Image 대신 asset의 duration을 async..
2023.02.03 -
iOS 16 orientation change
iOS 16 들어와서 AVasset 관련도 그렇고 추상화, 비동기가 강조된 느낌이다. 프로젝트 설정은 Portrait Only로 설정되어 있음 // AppDelegate에서 orientation 값을 바꿔줘야한다. var myOrientation: UIInterfaceOrientationMask = .portrait func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow? ) -> UIInterfaceOrientationMask { return myOrientation } // Landscape ViewController // 지원할 오리엔테이션 모드 override var suppor..
2023.01.27 -
cancel cell's gestures when scroll
이슈 피드 리스트를 스크롤할 때 의도하지 않은 tap gesture가 실행되었다. 텝 제스쳐는 RxGesture로 VC에서 Cell로 옵저버를 전달하여 Stream을 연결시킨 상태 해결 scrollView delegate의 scrollViewWillBeginDragging(_:)를 이용하여 드래깅 시점에 아래 명령을 내렸다. cells들에 접근하여 cancelsTouchesInView = true
2023.01.19 -
XCode Run 시뮬레이터는 되는데 Device에서 안 되는 이슈
증상: Simulator는 되는데 Device에서 안 됨 원인: Pod_framework를 Embed and Sign으로 변경해서이다. Code signing 문제 해결 방법: Target - General - Frameworks, Libraries, and Embeded Content에서 Embed 옵션을 Do Not Embed로 변경 https://stackoverflow.com/questions/68467306/the-code-signature-version-is-no-longer-supported The code signature version is no longer supported An app signed with a codesign version provided on an older macO..
2022.11.07