프로젝트 소개
pip install -U streamlit-webrtc로 설치합니다. 기본 앱은 webrtc_streamer(key="sample")을 호출하며, key는 필수 고유 식별자입니다. 사용자는 START를 누르고 카메라 또는 마이크 권한을 부여하여 세션을 시작합니다.
주요 처리 API는 video_frame_callback과 audio_frame_callback을 사용합니다. 콜백은 PyAV의 av.VideoFrame 또는 av.AudioFrame 객체를 전달받으며 동일한 프레임 유형을 반환해야 합니다. 프레임은 NumPy 배열로 변환하고 OpenCV 같은 라이브러리로 처리한 뒤 다시 변환할 수 있습니다. UI 값은 클로저를 통해 콜백에 전달할 수 있지만, 콜백이 분기된 스레드에서 실행되므로 콜백 내부에서 생성된 데이터는 신중하게 공유해야 합니다. 문서에서는 락이나 큐 같은 스레드 안전 컨테이너와 기본 Streamlit 스크립트의 폴링 루프를 권장합니다. Streamlit st.* 호출은 콜백 내부에서 작동하지 않으며 공유 상태는 동기화되어야 합니다.
이 컴포넌트는 WebRTC를 중지하거나 재협상하지 않고 트랙을 비활성화하는 카메라 및 마이크 토글 컨트롤을 표시할 수 있습니다. 비활성화된 비디오는 검은 프레임을 보내고 비활성화된 오디오는 무음을 보냅니다. on_video_ended와 on_audio_ended는 트랙이 중지되거나 페이지가 닫히거나 연결이 끊어질 때 정리 훅을 제공합니다. 소스 및 싱크 트랙용 팩토리 헬퍼는 st.session_state에 객체를 캐시하며 WebRTC 세션 또는 Streamlit 세션 생명주기 범위를 지원합니다. 함수 기반 콜백이 권장 API이며, 이전 클래스 기반 프로세서도 계속 지원되지만 향후 주요 릴리스에서 제거될 예정입니다.
원격 배포에서 localhost가 아닌 경우 브라우저 미디어 접근에는 HTTPS가 필요합니다. WebRTC 연결을 위해 rtc_configuration을 통한 STUN 구성도 필요하며, 제한적인 네트워크나 프록시 뒤에서는 TURN이 필요할 수 있습니다. README에는 Cloudflare Realtime TURN, Twilio, Open Relay, 자체 호스팅 TURN 옵션이 설명되어 있으며, HTTPS 또는 터널링 개발을 위한 헬퍼로 streamlit-remote가 언급되어 있습니다. 로깅은 Python 표준 logging 모듈을 사용합니다. 프로젝트 예제에는 객체 감지, OpenCV 필터, 오디오 처리, 단방향 비디오, 실시간 음성 인식, 스타일 전송, MediaPipe 자세 추정, 화상 채팅이 포함됩니다. API는 v1.0 전까지 확정되지 않은 것으로 설명됩니다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.