MediaStream 개요
MediaStream은 WebRTC (Web Real-Time Communication)에서 실시간 미디어(예: 오디오 및 비디오)를 다루기 위한 핵심적인 API이다. WebRTC는 브라우저 간 실시간 커뮤니케이션을 가능하게 하며, MediaStream은 이러한 커뮤니케이션에서 미디어 스트림을 캡처, 처리, 전송하는 역할을 한다. MediaStream은 사용자 장치에서 미디어 소스를 가져오고, 이를 조작하거나 다른 노드로 전송하는 데 사용된다.
MediaStream은 주로 다음 두 가지 구성 요소로 이루어진다:
- MediaStreamTrack: 개별 미디어 트랙 (오디오 또는 비디오)으로 구성된다.
- MediaStream: 하나 이상의 MediaStreamTrack을 포함하며, 이들을 그룹화하여 하나의 스트림으로 취급한다.
MediaStreamTrack: 미디어 트랙의 기본 단위
MediaStreamTrack은 MediaStream의 기본 구성 요소로, 각각 오디오 또는 비디오와 같은 미디어 데이터를 표현한다. 각 MediaStreamTrack 객체는 특정한 미디어 소스에 연결되며, 이 소스는 사용자 장치의 마이크, 카메라 또는 화면일 수 있다.
- Track의 속성
kind
: 트랙의 종류를 나타내며, "audio" 또는 "video" 값을 가질 수 있다.enabled
: 트랙이 활성화되어 있는지 여부를 나타낸다.true
로 설정되면 해당 트랙이 전송되며,false
로 설정되면 트랙이 비활성화된다.muted
: 트랙이 음소거되었는지 여부를 나타낸다. 이 속성은 주로 오디오 트랙에 사용된다.-
readyState
: 트랙의 현재 상태를 나타내며, "live" 또는 "ended" 값을 가질 수 있다. -
Track의 메서드
clone()
: 기존 트랙을 복제하여 새로운 트랙을 생성한다. 복제된 트랙은 원본 트랙과 독립적으로 작동한다.stop()
: 트랙의 소스를 중지하고, 트랙의readyState
를 "ended"로 설정한다.
MediaStream: 다중 트랙의 그룹화
MediaStream은 여러 MediaStreamTrack을 하나의 논리적인 스트림으로 그룹화하여 관리한다. 이는 단일 오디오 및 비디오 트랙을 함께 전송하거나 처리할 때 유용하다. MediaStream은 주로 사용자의 미디어를 캡처하거나, 다른 피어와의 연결에서 미디어를 주고받는 데 사용된다.
- MediaStream 생성
- 빈 MediaStream을 생성하거나, 기존의 MediaStreamTrack 배열을 사용하여 새로운 MediaStream을 생성할 수 있다.
-
getUserMedia()
: 사용자 장치의 마이크와 카메라를 사용하여 MediaStream을 생성하는 메서드이다. 이 메서드는 Promises를 반환하며, 사용자 권한 요청이 필요하다. -
MediaStream의 속성
id
: MediaStream의 고유 식별자이다.-
active
: MediaStream이 활성 상태인지 여부를 나타낸다. 하나 이상의 트랙이 "live" 상태이면active
는true
가 된다. -
MediaStream의 메서드
getTracks()
: 스트림에 포함된 모든 트랙의 배열을 반환한다.getAudioTracks()
: 스트림에 포함된 오디오 트랙의 배열을 반환한다.getVideoTracks()
: 스트림에 포함된 비디오 트랙의 배열을 반환한다.addTrack()
: 새로운 트랙을 MediaStream에 추가한다.removeTrack()
: 기존 트랙을 MediaStream에서 제거한다.
MediaStream의 이벤트 처리
MediaStream과 MediaStreamTrack은 다양한 이벤트를 통해 스트림의 상태 변화를 처리할 수 있다. 이러한 이벤트는 스트림 또는 트랙의 상태 변경, 트랙 추가 또는 제거, 소스의 끝 등 다양한 상황에서 발생한다.
- MediaStream 이벤트
active
: MediaStream이 활성화될 때 발생한다.-
inactive
: MediaStream이 비활성화될 때 발생한다. -
MediaStreamTrack 이벤트
ended
: 트랙의 소스가 끝났을 때 발생한다.mute
: 트랙이 음소거되었을 때 발생한다.unmute
: 트랙이 음소거가 해제되었을 때 발생한다.
이벤트 처리를 통해 개발자는 미디어 스트림의 상태를 실시간으로 모니터링하고, 사용자 인터페이스나 연결 로직을 적절히 조정할 수 있다.
관련 자료: - Mozilla Developer Network (MDN), MediaStream, https://developer.mozilla.org/ko/docs/Web/API/MediaStream - W3C WebRTC 1.0 Specification, MediaStream Interface, https://www.w3.org/TR/webrtc/#mediastream