MediaStream 지원 중단

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

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

Chrome 45에는 세 가지 MediaStream 지원 중단이 있습니다.

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

동시에 다음 두 가지가 추가됩니다.

  • MediaStream.active
  • MediaStreamTrack.stop()

이를 위해서는 다음과 같이 변경해야 합니다.

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

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

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

Stop(), 종료됨, 활성 상태

미디어 캡처 및 스트림 W3C 작업 그룹은 MediaStream에 새 트랙을 추가할 때 어떤 일이 발생하는지, 빈 MediaStream가 종료되는지 여부에 관한 문제를 살펴본 결과 MediaStream에서 ended를 구현할 만한 적절한 방법이 없다는 것을 깨달았습니다('다시 시작되지 않음'과 같이). 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 개발자 네트워크에서 확인할 수 있으며, HTML5 Rocks에서는 오디오 및 동영상 캡처에서 getUserMedia()에 관해 자세히 설명합니다.

Chrome 변경사항에 관한 의견을 보내주셔서 감사합니다. 이러한 지원 중단에 관한 버그 (여기여기)를 추적하고 구현 의도에서 자세한 내용을 확인하세요.