iOS(50)
-
AVFoundation - 비디오의 인코딩(압축) 및 업로드(3) - 업로드 개선
짧은 비디오가 아니라 20분가까이 되는 비디오이다 보니 압축과 업로드에 유저가 불편함을 느낄 정도로 시간이 많이 소요된다. 해서 업로드 부분을 탭바가 책임지도록 변경했다. 피드 업로드에서 비디오와 제목/컨텐트 등의 데이터로 피드DTO로 가공하여 탭바-뷰모델로 넘겼다. 이 과정에서 2가지 에러가 발생했다. 하나는 AssetReader 참조 에러 이 과정에서 ARC에 의해 assetReader가 먼저 Release되는 에러가 발생했다. cannot copy next sample buffer before adding this output to an instance of AVAssetReader 나머지 하나는 Memory Crash 용량이 큰 비디오에서 메모리 때문에 앱이 튕기는 현상이 발견되었다. 전에도 해당..
2023.03.21 -
AVFoundation - 비디오의 인코딩(압축) 및 업로드(2) - AssetReader / Writer 이용
AVFoundation - 비디오의 인코딩(압축) 및 업로드(1) - ExportSession 이용 ExportSession을 사용하지 않게된 이유 exportSession은 프리셋을 사용해 인코딩을 조절할 수 있기 때문에, 원하는 화질을 유지하면서 용량을 낮추는데에 한계가 있었다. 따라서, low level API인 Asset Reader / Writer를 사용하게 되었다. stream을 이용한 파일 입출력과 비슷한 느낌이다. Asset Audio Reader: 오디오가 없는 비디오 case를 고려하여 처리 // Set AudioReader var assetReaderAudioOutput: AVAssetReaderTrackOutput? if let audioTrack = asset.tracks(with..
2023.03.20 -
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 -
Apple Design Challenge Part 1 - 컨설팅 후기
챌린지에 참가하면 소정의 혜택으로 원하면, 본인의 앱을 애플 에반젤리스트 분이 컨설팅 해준다. 할까말까 고민하다가, 현재 회사 앱이 앱이 너무 예쁘지 않아서 받게 되었다. 컨설팅에서 다음과 같은 말을 해주셨는데 아주 정확한 말씀이셨다. 앱의 첫 인상이 초기 기획보다 피처가 많이 확장되어보이는데, UX의 고려 없이 덧붙힌 느낌이다. 초기 기획은 채팅 + 음성/영상 VOIP였다. 이 후, 유료 비디오 스트리밍 + 정기 구독이 추가되었다. 컨설팅 전 세션 듣고 수정한 사항 첫 페이지 이후 탭바 숨김 처리한 것 해제 - 트위터 / 인스타 / 슬랙 등이 이미 이를 지키고 있음. 프로필 메뉴를 80 / 20 룰을 지켜 분리 함 컨설팅을 원하는 항목 찾기(검색) 탭 타이틀의 애매함. 더보기 탭 메뉴 이름 및 정체..
2023.03.15 -
Apple Design Challenge Part 1
애플에서 개발자와 UX디자이너를 대상으로한 온라인 세션이다. 처음엔 AsyncSwift에서 애플 로고가 박힌 후드티를 준다고 하여 가벼운 마음으로 참가하였다. (결국 받았다 ㅎㅎ) 이 세션의 슬라이드는 비공개이지만 대부분의 내용이 WWDC에서 공개된 세션을 바탕으로 하기 때문에 못 들었다고 아쉬어 하지 않아도 된다. Part1: 네비게이션 / 워크플로우 중점 예측 가능성과 안정성 명확하고 도움이 되는 정보 자연스럽고 단순한 워크플로우 즐거운 경험 - 앱을 소개해주는 계기가 됨 이 step이 앱을 사용하는데 이득이 되는지 항상 고민하기 네비게이션 길 찾기 멘탈 모델 워크플로우 점진적 공개 80/20 규칙 네비게이션: 길 찾기 예시 공항가는 길 / 공항에서의 게이트 → 점점 세분화하고 디테일한 정보들이 들어..
2023.03.15