본문 바로가기

Computer science/WebRTC

WebRTC - Media capture and constraints

WebRTC의 media 파트는 하드웨어인 카메라와 마이크에 접근해서 비디오와 음성을 포착하는(capturing) 역할을 담당한다. 이 뿐만 아니라, media stream이 작동하는 방법과 screen capturing 같은 display media도 담당한다. 

 

Medi devices

Navigator.mediaDevices 오브젝트를 이용하여 모든 카메라와 마이크를 관리할 수 있다. media 장치(카메라, 마이크)는 언제든 연결되고, 연결 해제될 수 있기 때문에 잘 관리해야 한다.

 

Constraints

media 장치에 접근할 때는 가장 디테일한 제약 조건을 제공하는 것이 좋다. 간단한 제약 조건을 사용하면 쉽게 기본 카메라와 마이크에 접근할 수 있지만, 최적의 media stream을 전달하지는 못할 수 있다. 

 

잘 정의된(specific) 제약 조건은 MediaTrackConstraint 오브젝트에서 찾을 수 있다. 이 오브젝트의 atrribute type으로는 ConstraintLong, ConstraintBoolean, ConstraintDouble, ConstraintDOMString이 있다. 이들은 specific value(number, boolean. string) 혹은 range(LongRange, DoubleRange) 혹은  object(ideal, exact definition)일 수 있다. 이와 같은 잘 정의된 제약 조건을 사용하면

1. specific value를 사용하면 브라우저가 가장 적합한 무언가를 찾을 것이고,

2. range를 사용하면 범위 내에서 가장 적합한 값을 사용할 것이고,

3. exact를 잘 정의했을 때는 정확하게 맞아 떨어지는 제약 조건을 가진 media stream만이 반환될 것이다. 

// NEAR
// Camera with a resolution as close to 640x480 as possible
{
    "video": {
        "width": 640,
        "height": 480
    }
}

// RANGE
// Camera with a resolution in the range 640x480 to 1024x768
{
    "video": {
        "width": {
            "min": 640,
            "max": 1024
        },
        "height": {
            "min": 480,
            "max": 768
        }
    }
}

// EXACT
// Camera with the exact resolution of 1024x768
{
    "video": {
        "width": {
            "exact": 1024
        },
        "height": {
            "exact": 768
        }
    }
}

 

한 media stream의 구성(actual configuration)을 알아내기 위해서 MediaStreamTrack.getSettings()를 사용하면 된다. 이 함수는 현재 적용되어 있는 MediaTrackSettings 를 반환한다. 

 

applyConstraints() 함수를 이용하면 현재 사용 중인 media 장치의 제약 조건을 바꾸는 것도 가능하다. 이제 media 장치를 닫을 필요 없이 어플리케이션을 재구성할 수 있다. 

 

Display media

screen capturing과 recording을 사용하려면 반드시 Display Media API를 사용해야 한다. 

getDisplayMedia() 함수는 navigator.mediaDevices의 일부분이며 getUserMedia()와 유사하다. 이 함수는 디스플레이 컨텐트(혹은 윈도우와 같은 일부분)를 열 때 사용된다.

 

getDisplayMedia()함수에 사용되는 제약 조건은 보통의 비디오나 음성에 사용되는 것과는 다르다.

{
    video: {
        cursor: 'always' | 'motion' | 'never',
        displaySurface: 'application' | 'browser' | 'monitor' | 'window'
    }
}

위의 코드는 screen recording에 사용되는 특수한 제약 조건이 어떻게 생겼는지 보여준다. 이 특수한 제약 조건들은 media support를 지원하는 모든 브라우저에서 작동하진 않을 수 있다.

 

Streams and tracks

MediaStream은 비디오와 오디오 트랙(MediaStreamTrack)을 구성하는 media content를 대표한다. MediaStream.getTracks()함수를 호출하면 MediaStream에 있는 모든 트랙을 포함한 MediaStreamTrack 오브젝트 배열을 얻을 수 있다.

 

MediaStreamTrack

MediaStreamTrack은 kind 프로퍼티를 가지고 있으며, kind는 비디오와 오디오로 나뉜다. 각각의 트랙은 enabled 프로퍼티를 이용해 음소거 시킬 수 있다. 트랙은 Boolean 타입인 remote 프로퍼티도 가지고 있는데, 이는 RTCPeerConnection으로 remote peer에 의해 수신된 자료인지를 나타낸다. 

 

본 게시글은 www.webRTC.org 의 guide 부분을 번역한 글입니다.

'Computer science > WebRTC' 카테고리의 다른 글

WebRTC 참고 자료 모음  (0) 2020.07.10
webRTC 용어 정리  (0) 2020.07.10
WebRTC - other parts  (0) 2020.07.04
WebRTC - peer connections  (0) 2020.07.02
WebRTC - Media devices  (0) 2020.07.02