CoreMedia) CMTime, CMSampleBuffer
·
앱/Swift
CM이란?cm은 core media의 약자이다. AVFoundation에 포함된 프레임워크를 의미한다.CMTime이란?CMTime은 apple의 core media프레임워크에서 쓰는 시간 표현 타입그럼 왜 초를 double로 표현하지 않고, cmtime이라는 타입을 사용하는가?미디어에서는 초, 미리초 단위가 굉장히 중요하며, double로 사용하게 돠면 부정확할수 있기 때문에 cmTime이라는 타입을 사용하고 있다.CMTime(value: ,timescale: ) CMTime = timescale/value이렇게 value를 받고있으며, timescale이라는 파라미터를 init할때 받게 되는데 다음과같다.value는 분모, timescale은 분자이러한 계산식을 통해서 더 정확한 seeking과 syn..
webRTC 완벽정리 4탄 - 가변적인 네트워크 대응, Probing과 Congestion Control
·
앱/webRTC
4. 개요 (Overview)WebRTC의 가장 큰 특징 중 하나는 UDP 기반으로 동작하면서, 네트워크가 나빠질 경우 화질을 일부 희생하더라도 지연(Latency)을 최대한 낮게 유지하려고 한다는 점임.즉, TCP처럼 무조건 재전송하여 품질을 보존하는 방식이 아니라, 실시간성을 우선하기 위해 상황에 따라 화질, 프레임, 비트레이트를 유동적으로 조절함.이를 위해 WebRTC 엔진과 미디어 서버 환경에서는 계속해서 현재 가용 대역폭을 추정함. 이 과정을 BWE(Bandwidth Estimation) 라고 함. 그리고 이 추정 결과를 바탕으로 송신 측 인코더의 출력량을 조절하는데, 이 전체 흐름을 Congestion Control 이라고 함.이번 장에서는 이 대역폭 추정과 혼잡 제어가 어떤 원리로 동작하는지..
WebRTC 완벽정리 3탄 - 네트워크의 관문, ICE와 NAT Traversal
·
앱/webRTC
3. 개요 (Overview)제2부에서는 SDP를 교환하며, 어떤 코덱과 미디어 설정으로 통신할지 협의가 끝남.이제 실제로 데이터를 주고받아야 하는데, 여기서 핵심 문제는 다음과 같음.“어디로(IP address, port) 보내야 하는가?”대부분의 클라이언트는 공유기(NAT) 뒤에 있고, 방화벽은 외부의 직접 접근을 차단함.따라서 단순히 SDP만 교환했다고 해서 바로 미디어를 주고받을 수 있는 것은 아님.이 복잡한 네트워크 환경에서,서로 실제로 통신 가능한 최적의 경로(Candidate Pair)를 찾아내는 프레임워크가 바로 ICE (Interactive Connectivity Establishment) 임.이번 3부에서는 범용적인 WebRTC 미디어 서버 환경을 기준으로, 클라이언트가 서버와 연결 가..
WebRTC 완벽 정리 2탄 - Signaling & SDP
·
앱/webRTC
2. 개요 (Overview)이번 시간에는 WebRTC를 사용한 클라이언트와 서버가 어떻게 연결하는지에 대해서 알아볼것WebRTC 표준은 "영상 데이터를 어떻게 보낼지(RTP/UDP)"는 정의하지만, "연결을 어떻게 시작할지(Signaling)"는 정의하지 않기 때문에 이부분을 직접 개발해야한다. 2-1. 시그널링클라이언트와 서버가 영상 데이터를 전달하고/전달받기 위해서는 우선적으로 3개의 정보를 교환해야함이정보를 교환하는 과정이 Signaling(시그널링)이다.제어 정보 (Session Control): 통신을 시작할지, 종료할지, 에러가 났는지미디어 정보 (SDP): 코덱등, 서로 교환할 내용의 정의네트워크 정보 (ICE Candidate): IP주소2-2. 시그널링 상세 프로세스보편적으로 시그널링을..
WebRTC 완벽 정리 1탄 - webRTC 프로토콜이란?
·
앱/webRTC
1. WebRTC란 무엇인가?1) 정의 및 특징WebRTC (Web Real-Time Communication)는 플러그인이나 별도의 소프트웨어 설치 없이, 웹 브라우저 간에 오디오, 비디오, 데이터를 실시간으로 주고받을 수 있게 하는 오픈 소스 기술 표준2) 왜 TCP가 아닌 UDP인가? (Real-time의 철학)WebRTC의 가장 큰 특징은 전송 계층에서 UDP(User Datagram Protocol)를 기반영상 스트리밍에서 TCP와 UDP의 결정적 차이는 신뢰성(Reliability)과 실시간성(Latency)의 트레이드오프에 있음.TCP의 문제점 (HOL Blocking):라이브 방송에서 1초 전 화면(2번 패킷)을 복구하기 위해 현재 화면(3번 패킷)을 멈추는 것은, 실시간성을 해치는 치명적..
[Swift] GCD와 swift concurrency가 나오게된 배경과, concurrency 기본개념
·
앱/Swift
Swift Concurrency 이전의 DispatchQueue (GCD)가 나오게 된 배경이전의 Grand Central Dispatch(GCD)는 정확히 당신이 생각한 대로 thread pool을 시스템 레벨에서 관리하여 thread explosion을 방지하기 위해 만들어졌음GCD 이전의 문제점들Thread 직접 관리의 어려움:개발자가 직접 Thread를 생성하고 관리해야 했음Thread 생성 비용이 높고(스택 메모리 할당, 커널 데이터 구조 등), 각 Thread마다 최소 512KB의 메모리 필요Thread explosion: 동시성 작업이 많아지면 무분별하게 Thread가 생성되어 시스템 리소스 고갈Apple 문서의 표현:"In the past, introducing concurrency to ..
[iOS] ReactorKit을 Combine으로 구현하는 법
·
앱/Swift
회사서비스 특성상, 서드파티 라이브러리를 사용할수 없기 때문에 아키텍쳐가 조금 난잡한 경향이 있어서, 리액터킷을 도입하기 위해서combine으로 리액터킷 프레임워크 만들어봤습니다. pulse 구현 state로 구현을 하고 싶었으나, 구현에 시간이 조금 부족해서 그냥 바로 publisher를 방출하는 pulse로 구현하였습니다.@propertyWrapperfinal class Pulse { private let subject: CurrentValueSubject var wrappedValue: Value { get { subject.value } set { subject.send(newValue) } } /// 외부에서 Combine 구독 할수..
[iOS] moya를 combine을 이용해서 구현해보자
·
앱/Swift
https://medium.com/@islammoussa.eg/building-a-network-layer-using-combine-ios-with-a-structure-similar-to-moya-3abd9d23b16참고해서 combine형태의 moya스타일로 처리할수 있다.TargetTypeprotocol TargetType { var baseURL: String { get } var path: String { get } var method: ShopLiveHTTPMethod { get } var parameters: [String: Any]? { get } var headers: [String: String] { get } var timeoutInterval: Dou..
Compositional Layout를 통해 리팩토링 하기
·
카테고리 없음
Compostional LayoutCompositional Layout은 iOS 13버전부터 지원되는 UICollectionViewLayout 의 한 유형입니다. 유연하고 빠르게 설계되어, 작은 구성 요소를 결합하는 방법으로 레이아웃을 구성하고 이를 통해 시각적 배열을 원하는 형태로 구성할수 있습니다. 대표적으로는 앱스토어 앱이나, 유튜브 뮤직 앱과 같은 레이아웃 구성을 쉽게 할수 있도록 해주는것이 바로 Compositional Layout입니다. Compositional Layout 구성Compostional Layout은 크게 3가지로 구성됩니다.Item : 단일 CellGroup : 아이템 또는 그룹 으로 구성된 하나의 단위Section : 그룹들로 이루어진 하나의 단위레이아웃은 데이터소스와 상관..