피드로 돌아가기
Dev.toInfrastructure
원문 읽기
GStreamer-WebRTC I420 버퍼 브릿지를 통한 RTSP 저지연 스트리밍 구현
Bridging RTSP to WebRTC on iOS: Feeding GStreamer Frames into a WebRTC Pipeline
AI 요약
Context
WebRTC iOS SDK는 로컬 캡처 장치 중심의 설계를 가지며 네트워크 비디오 소스를 직접 지원하지 않는 구조적 한계 존재. RTSP의 세션 설정 및 디코딩 프로세스를 WebRTC의 전송 엔진과 분리하여 처리해야 하는 아키텍처적 간극 발생.
Technical Solution
- GStreamer를 활용한 RTSP 수신 및 H.264 디코딩 프로세스를 별도 파이프라인으로 구축
- videoconvert와 videoscale를 통한 WebRTC 표준 규격인 I420 raw YUV 포맷 강제 변환
- appsink의 sync=false 설정을 통한 재생 클락 지연 제거 및 즉시 프레임 출력 구조 설계
- max-buffers=1 및 drop=true 설정을 통한 '최신 프레임 우선(Latest Frame Wins)' 정책 적용으로 누적 지연 시간 차단
- 커스텀 RTCVideoCapturer 구현을 통해 GStreamer의 raw 버퍼를 WebRTC 파이프라인에 직접 주입하는 브릿지 패턴 채택
- GLib main loop의 블로킹 특성을 해결하기 위해 별도의 Background Thread 및 GMainContext 운용
실천 포인트
1. 실시간 스트리밍 구현 시 큐잉으로 인한 지연을 방지하기 위해 'Drop Oldest' 정책 적용 여부 확인
2. 서로 다른 미디어 라이브러리 결합 시 픽셀 포맷(예: I420)과 해상도 일치 여부 우선 검증
3. 외부 라이브러리의 Event Loop가 메인 스레드를 점유하지 않도록 전용 백그라운드 컨텍스트 분리