- Raspberry Pi WebRTC는 Raspberry Pi 또는 NVIDIA Jetson을 약 200ms 지연의 WebRTC 스트리밍 플랫폼으로 바꾸는 C++20 기반 프로젝트임
- 네이티브 WebRTC를 사용하며 하드웨어/소프트웨어 인코딩, 스냅샷, 녹화, 방송, WebRTC DataChannel을 통한 원격 제어와 IoT 메시징을 지원함
- 신호 방식은 MQTT, WHEP, WebSocket을 지원하며, MQTT는 Pi 카메라와 클라이언트가 WebRTC 연결 정보를 교환하는 데 사용됨
- 지원 장치는 Raspberry Pi Zero/3/4/5와 NVIDIA Jetson Nano/NX/Orin이며, 카메라는 CSI 또는 USB를 사용할 수 있고 libcamera, libargus, V4L2를 지원해야 함
- Pi 5 또는 하드웨어 인코더가 없는 장치에서는 실행 옵션에서
--hw-accel을 제거해야 하며, WHEP는 브로커가 필요 없지만 공개 호스트명이 필요함
프로젝트 개요
- Raspberry Pi WebRTC는 Raspberry Pi 또는 NVIDIA Jetson을 저지연 WebRTC 스트리밍 플랫폼으로 바꾸는 프로젝트임
- 목표 지연 시간은 약 200ms로 제시됨
- 주요 기술 표기는 다음과 같음
-
libwebrtc m146.7680
-
C++20
- Apache 2.0 라이선스
-
지원 기능
- 네이티브 WebRTC 기반 스트리밍을 제공함
- 영상 인코딩은 하드웨어 인코딩과 소프트웨어 인코딩을 지원함
- 카메라 기능은 스냅샷, 녹화, 방송을 포함함
- WebRTC DataChannel을 통해 원격 제어와 IoT 메시징을 지원함
신호 방식과 클라이언트
- MQTT 신호 방식을 지원함
- WHEP 신호 방식을 지원함
- WebSocket 신호 방식을 지원함
- picamera.js: SFU 신호 처리와 방송
요구 사항
- 지원 보드는 Raspberry Pi Zero/3/4/5 또는 NVIDIA Jetson Nano/NX/Orin임
- 카메라는 CSI 또는 USB 카메라를 사용할 수 있음
- 카메라 입력은 libcamera, libargus 또는 V4L2를 지원해야 함
Raspberry Pi 빠른 시작
- Raspberry Pi OS 설치
- Raspberry Pi Imager로 SD 카드에 Lite OS를 플래시함
- 의존성 설치
libmosquitto1,pulseaudio,libavformat61,libswscale8,libyaml-cpp0.8을 설치함
- 바이너리 다운로드
- 최신 release binary를 내려받아 압축을 해제함
- MQTT 신호 처리
실행 방식과 주의점
- picamera-web을 열고 MQTT 설정을 추가한 뒤
UID를 생성함 - Pi에서
./pi-webrtc를 실행하며 카메라, FPS, 해상도, MQTT 호스트, 포트, 사용자명, 비밀번호, UID 등을 옵션으로 지정함 - 예시 옵션은
--camera=libcamera:0,--fps=30,--width=1280,--height=960,--use-mqtt,--no-audio등을 포함함 --hw-accel은 Pi Zero 2W, 3B, 4B에서 하드웨어 인코딩을 사용할 때 붙이는 옵션임- Pi 5 또는 하드웨어 인코더가 없는 장치에서는
--hw-accel을 제거해야 함