iOS 32

[RTC] 마이크 권한 제거하기

회사에서 더욱 빠른 영상을 전달하기 위해서 webRTC를 도입하게 되었습니다. webRTC를 도입하는 과정에서 개인적으로 자료도 없고 귀찮았던 부분들을 앞으로 몇가지 기술할 예정입니다. 그 첫번째 주자로써는 바로 mic 권한 빼기인데요. webRTC 기술이 탄생한 배경 자체가 양방향 통신이라 googlWebRTC 프레임워크를 받고서 시작하면 자동으로 마이크 권한을 요구하는 것을 볼 수 있습니다. 하지만 저희 회사 같이 시청 전용으로 기술이 제공될때는 필수적인 요소가 아니게되는데요. 지금부터 어떻게 하면 마이크 권한을 뺄 수 있는지에 적어보겠습니다.  먼저 간단하게나마 AudioUnit에 대해서 짚고 넘어가야 합니다.  AVAudioUnitAVAudioUnit은 iOS에서 사용할 수 있는 가장 low-le..

iOS 2024.10.01

CFSocket을 통한 로컬 서버 만들기 5

매우 오랜만에 써보는 iOS관한 내용.옛날 옛적에 CFSocket을 이용한 로컬 서버 만들기 글을 포스팅 해놓고, 이제 와서야 다시 들춰보며github에 프로젝트를 올리다가 문득 의문점이 들어서 개인 기록용으로라도 쓰게 되었다. 의문의 시작점은 CFStreamCreatePairWithSocket 함수를 보기 시작하면서 들게 되었다.대충 이런식으로 되어 있는 함수인데, 글을 적극적으로 포스팅하고 있을 당시에는 저걸 Socket2개를 pairing하고 있는 것이라고 단단히 착각하고 있었다...근데 생각해보니 하나의 소켓에 그냥 stream만 연결하는 것 뿐이었는데, 분명 글에도 stream연결하는 놈이라고 써놓았건만 왜 오해를 하고 있었는지 모르겠다. 그리고 또 한가지, 코드를 다시 수기로 치면서 작성하고 ..

iOS 2024.05.02

[Swift] AVAssetDownLoadTask 사용하기

이전 글까지는 proxyServer를 통하여 HLS 미디어를 다운받는 방법에 대해서 기술하고 있었는데(시간 나면 계속 쓸 예정입니다.), 글쓴지도 좀 오래됬기도 하고 HLS를 다른 방법으로 캐싱하는 방법이 있어 소개해드리려 오랜만에 글을 쓰게 되었습니다. 바로 AVAssetDownLoadTask를 이용하는 방법입니다. 우선 결론적으로 말하면 완전히 실시간으로 진행되는 스트림은 결국은 proxyserver를 이용해야 하며 AVAssetDownloadTask로는 캐싱처리를 하지 못합니다. 1. AVAssetDownLoadTask VS AVAggregateAssetDownloadTask 관련된 것을 찾아보시면 이렇게 2가지가 나올건데요. 간단하게 어떤것이 다른지 비교만 하고 넘어가겠습니다. AVAssetDow..

iOS 2023.12.03

CFSocket을 통한 로컬 서버 만들기 4

근 4 달만에 이어지는 글이네요. 이번편은 단순하게 전 글들에서 만든 ServerSocket과 ClientSocket을 객체화 시켜 연결하는 과정이기 때문에 어려울 것도 없어 최대한 짧게 쓰려고 합니다. CFSocket에 관한 제일 첫번째 글에 나왔던 이 이미지를 다시 한번 상기시켜 봅시다. ServerSocket을 만든 목적은 Avplayer에서 request한 Network를 intercept하기 위함이었고 ClientSocket이 intercept한 url을 대신 remote Server에 요청하여 데이터를 기기에 저장 및 serverSocket을 거쳐 avplayer에 반환하는 것이 전체 과정입니다. 5. ProxyServer 만들기 class ProxyServer { private var s..

iOS 2023.10.22

CFSocket을 통한 로컬 서버 만들기 3

전글에서 Server Socket을 간단하게 만들어 보았고 이번에는 ClientSocket을 만들어 보겠습니다. 4. ClientSocket 만들기 먼저 풀 코드부터 보여 드리겠습니다. class ClientSocket : NSObject { var fileDescriptor: Int32 private var inputStream: InputStream! private var outputStream: OutputStream! private var address : sockaddr! init(fileDescriptor: Int32, address: sockaddr) throws { var readStream : Unmanaged? var writeStream: Unmanaged? self.fileDesc..

iOS 2023.06.26

CFSocket을 통한 로컬 서버 만들기 2

전글에서 setsocketopt()의 함수를 통해서 생성한 소켓의 옵션까지 정하는 것을 했습니다. 계속 이어서 이번에는 socket의 주소를 설정하는 법을 알아보겠습니다. 우선 코드 부터 보겠습니다. var addr = sockaddr_in(sin_len: __uint8_t(MemoryLayout.size), sin_family: sa_family_t(AF_INET), sin_port: port.bigEndian, sin_addr: in_addr(s_addr: INADDR_ANY), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0)) let addrData = withUnsafePointer(to: &addr) { ptr in return ptr.withMemoryRebound(to: soc..

iOS 2023.06.26

CFSocket을 통한 로컬 서버 만들기 1

새로운 회사에 취직한지 어언 1달이 되었습니다. 새롭게 취직한 회사는 라이브 스트리밍 솔루션을 제공하는 업체이다 보니 라이브 스트리밍과 관련된 기술들을 많이 배우고 접하게 되었습니다. 이러한 와중에 iOS에서 hls 라이브 스트리밍을 캐싱해야 하는 과제를 부여받았습니다. 단순 mp4 캐싱이었으면 얼마나 좋았겠습니까? ㅋㅋㅋㅋ 근데 이놈의 애플은 hls 캐싱을 지원해주지 않더군요.... 그렇다고 또 못하는 것도 아니고 결국 삽질을 하게 되었습니다. 방법은 제목에 쓴 것처럼 앱 안에 로컬 서버를 만들고 이를 통해 외부와 소통하면서 m3u8파일과 ts파일을 추출해서 저장해야 합니다. 일단 가장 간단한 방법으로는 바로 그냥 라이브러리 쓰시면 됩니다. https://github.com/StyleShare/HLSC..

iOS 2023.05.29

Rx와 XCTest를 이용할시 생기는 에러사항들 3

SPM과 RxSwift 그리고 TestUnitBundle을 사용하면서 생기는 에러 사항들 모음집입니다. 저번 글에서 발생한 demangle ~~~ error를 해결하기 위한 글입니다. 1. RxCocoaRuntime프레임 워크만을 추가한다. 해당 프레임 워크는 https://github.com/ReactiveX/RxSwift/releases 요 링크로 들어가셔서 찾아보시면 있습니다. 6.0.0버전 릴리즈를 보시면 됩니다. 프레임 워크를 찾았으면 드래그 앤 드롭으로 세팅해줍니다. 그리고 cmd + u를 실행하면 똭! 이렇게 에러가 나오면서 실행이 안됩니다. 지금보니 RxCocoaRuntime이 RxSwift에 의존성을 가지고 있었네요. 그리고 RxSwift를 /PlugIns/{name}Tests.xctes..

iOS 2023.03.27

Rx와 XCTest를 이용할시 생기는 에러사항들 2 [missing Required module "RxCocoaRuntime"]

SPM과 RxSwift 그리고 TestUnitBundle을 사용하면서 생기는 에러 사항들 모음집입니다. 저번글에서 MainApp에서의 에러 사항을 해결했습니다. 따라서 우리는 TDD를 적용하기 위해서 TestCase를 돌리려고 합니다. cmd + u를 눌러 TestCase를 돌리게 되면 다음과 같은 에러가 나오게 됩니다. 1. Missing Required module "RxCocoaRunTime" 이것에 대한 해결방법은 아주 쉽습니다. TestTarget에 RxTest,RxBlocking,RxCocoa를 추가해주시면 사라지게 됩니다. 요렇게 해만 해주면 에러가 사라지게 됩니다. 하지만 뭔가 꺼림칙한 메세지가 잔뜩 나옵니다. 요런식으로 코드가 중복됬다는 이야기가 나옵니다. 보니까 MainApp과 Test..

iOS 2023.03.27

Rx와 XCTest를 이용할시 생기는 에러사항들 1 [library not loaded XCTest]

SPM과 RxSwift 그리고 TestUnitBundle을 사용하면서 생기는 에러 사항들 모음집입니다. 1.MainApp에 RxTest 프레임워크를 포함시켰을때 SPM으로 RxSwift를 다운받고 메인 번들을 실행시키면 아마 다음과 같은 에러들을 만나실 겁니다. Undefined symbol: _$s6XCTest14XCTAssertEqual___4file4lineyxyKXK_xyKXKSSyXKs12StaticStringVSutSQRzlF Undefined symbol: _$s6XCTest7XCTFail_4file4lineySS_s12StaticStringVSutF Undefined symbol: __swift_FORCE_LOAD_$_XCTestSwiftSupport 요 에러는 단순히 보시는 바와 같이 메..

iOS 2023.03.26