MediaStream 지원 중단

getUserMedia() 또는 WebRTC를 사용하는 경우 Chrome 45 이상에 맞게 코드를 조정해야 할 수 있습니다.

MediaStream API는 동기화된 미디어 스트림을 나타냅니다. 예를 들어 카메라 및 마이크 입력에서 가져온 스트림에는 동기화된 동영상 및 오디오 트랙이 있습니다. 각 트랙은 MediaStreamTrack으로 표현됩니다. <track> 요소와 혼동해서는 안 됩니다.

Chrome 45에서 세 가지 MediaStream가 지원 중단됩니다.

  • MediaStream.ended
  • MediaStream.label
  • MediaStream.stop()

그와 동시에 다음 두 가지 사항이 추가됩니다.

  • MediaStream.active
  • MediaStreamTrack.stop()

다음과 같이 변경해야 합니다.

  • MediaStream.ended가 아닌 MediaStream가 스트리밍 중인지 확인하려면 MediaStream.active를 사용합니다.
  • 스트리밍을 중지하려면 MediaStream.stop()가 아닌 MediaStreamTrack.stop()를 사용하세요.
  • MediaStream의 고유 식별자가 필요하면 MediaStream.label 대신 MediaStream.id를 사용하세요. MediaStreamTrack.label는 스트림의 소스 기기에 사람이 읽을 수 있는 이름을 제공합니다(예: FaceTime HD 카메라(내장)(05ac:8510)).

실제 동작을 확인할 수 있습니다. 카메라가 있는 기기의 Chrome에서 simpl.info/gum을 열고 Chrome DevTools 콘솔을 확인합니다. 이 데모에서 getUserMedia() 콜백에 전달된 MediaStream 객체 stream는 전역 범위 내에 있으므로 콘솔에서 검사할 수 있습니다. 이 스트림의 MediaStreamTrack을 보려면 stream.getTracks()[0]를 호출합니다.

Chrome DevTools 콘솔의 MediaStream 및 MediaStreamTrack을 보여주는 스크린샷

Stop(), 종료 및 활성 상태

미디어 캡처 및 스트림 W3C 실무 그룹은 MediaStream에 새 트랙을 추가할 때 발생하는 일과 빈 MediaStream의 종료 여부에 관한 문제를 검토하면서 MediaStreamended를 구현할 적절한 방법이 없다는 사실을 깨달았습니다('다시 시작되지 않음'). HTML5의 다른 부분에서 '종료'는 '종료되었으며 재개되지 않음'을 의미합니다. '활성'에는 이러한 의미가 없습니다. 예를 들어 새 트랙이 추가되면 비활성 스트림이 다시 활성화될 수 있습니다. 실무 그룹에서는 혼란을 야기하는 속성과 기능을 유지하는 대신 이를 삭제하기로 했습니다.

다음은 'MediaStream.active'를 사용하여 스트림의 상태를 확인하는 방법의 예입니다.

var gumStream;

navigator.getUserMedia({audio: false, video: true},
    function(stream) {
            gumStream = stream;
        // ...
    },
    function(error) {
        console.log('getUserMedia() error', error);
    });

// …

if (gumStream.active) {
    // do something with the stream
}

MediaStream에서 stop()를 삭제해도 실제 기능은 삭제되지 않았습니다. 소스 기기를 분리하는 프로세스 등은 어차피 MediaStreamTrack에서 실행되어야 합니다. 대신 MediaStreamTrack에서 stop()를 사용하세요.

navigator.getUserMedia({audio: false, video: true},
    function(stream) {
            // can also use getAudioTracks() or getVideoTracks()
        var track = stream.getTracks()[0];  // if only one media track
        // ...
        track.stop();
    },
    function(error){
        console.log('getUserMedia() error', error);
    });

라벨

아무도 이 속성의 용도를 알 수 없었습니다.

MediaStream.label가 사양의 첫 번째 버전에 추가되었지만 아무도 label의 용도를 알지 못했습니다. 스트림이 RTCPeerConnection를 통해 전송되었을 때 label이 어떻게 되었는지도 불분명했습니다.

W3C 실무 그룹에서는 주도해 본 내용을 아무도 원하지 않아서 삭제했습니다.

반복하자면, MediaStream.idMediaStream의 고유 식별자를 제공하고 MediaStreamTrack.label는 카메라 또는 마이크 유형과 같은 스트림 소스의 이름을 제공합니다.

MediaStreamMediaStreamTrack에 관한 자세한 내용은 Mozilla Developer Network를 참조하세요. HTML5 Rocks는 오디오 및 동영상 캡처getUserMedia()에 관한 훌륭한 소개를 제공합니다.

Google은 Chrome의 변경사항에 대해 의견을 보내주셔서 감사합니다. 여기여기에서 지원 중단으로 인한 버그를 확인하고 구현 인텐트에서 자세한 내용과 설명을 확인할 수 있습니다.