멀티미디어

사용자가 흥미로운 미디어 환경을 만들고 재생할 수 있는 준비가 된 앱을 개발합니다. Windows 8.1에서는 다양한 환경에서 미디어를 캡처하기 위한 새로운 속성, XAML(Extensible Application Markup Language)을 사용하는 앱에 재생 컨트롤을 쉽게 추가하는 방법, HTML5를 위한 MSE(미디어 원본 확장) 재생에 대한 기본 지원을 통해 더 쉽게 개발할 수 있습니다.

Windows 8.1의 업데이트된 기능

  • 동영상 처리 기능
  • 오디오 및 동영상 캡처 기능
  • XAML MediaElement
  • HTML5 동영상 및 오디오 재생
  • 원격 재생 기능

동영상 처리 기능 업데이트

[지금 미디어 허브MediaStreamSource 샘플을 가져옵니다.]

Windows 8.1에서는 동영상 형식, 코덱 및 처리에 관련된 새 업데이트 및 지원을 제공합니다.

CFF 지원

Microsoft 미디어 파운데이션이 CFF(Common File Format)에 대한 지원을 MP4/fMP4 구현에 추가했습니다. CFF는 ISO 기준 미디어 파일 형식에 따른 오디오/동영상 컨테이너 형식입니다.

새 XVP 모드

미디어 파운데이션 XVP(Transcode Video Processor)는 항상 소프트웨어에서 실행되고 DXVA(DirectX Video Acceleration) 하드웨어 가속을 사용하지 않는 MrfCrf444 모드를 추가했습니다. 이를 통해 기본 하드웨어에 관계없이 전체 플랫폼에서 일관된 결과를 얻을 수 있습니다. MrfCrf444 모드는 완전히 소프트웨어에서 실행되므로 코드 변환 작업이 더 오래 걸리고 더 많은 전원을 사용할 수 있습니다. 이 새로운 모드는 강제로 더 큰 필터를 사용하고, 색 변환에 전체 정밀도를 사용하고, 더 높은 품질의 색 형식을 선호하고, 고품질 디인터레이스 장치를 활성화합니다.

앱에서 이 모드를 사용하려면 MediaTrancoder.VideoProcessingAlgorithmMediaVideoProcessingAlgorithm.mrfCrf444로 설정합니다.

// sourceFile and destFile are IStorageFile objects defined elsewhere.

var profile = Windows.Media.MediaProperties.MediaEncodingProfile.createMp4
    (Windows.Media.MediaProperties.VideoEncodingQuality.hd720p); 

var transcoder = new Windows.Media.Transcoding.MediaTranscoder(); 

transcoder.videoProcessingAlgorithm = 
    Windows.Media.Transcoding.MediaVideoProcessingAlgorithm.mrfCrf444; 

transcoder.prepareFileTranscodeAsync(sourceFile, destFile, profile); 
using Windows.Media.MediaProperties;
using Windows.Media.Transcoding;

var transcoder = new MediaTranscoder(); 
var profile = MediaEncodingProfile.CreateMp4(
    MediaProperties.VideoEncodingQuality.HD720p); 

transcoder.videoProcessingAlgorithm = 
    MediaVideoProcessingAlgorithm.MrfCrf444; 

// _InputFile and _OutFile are defined outside this example.
transcoder.PrepareFileTranscodeAsync(_InputFile, _OutputFile, profile); 

미디어 파운데이션에서 확장 범위 YUV 지원

Windows 8에서는 미디어 파운데이션 파이프라인이 기본적으로 스튜디오 스윙 YUV 범위[Y: 16-235]으로 설정되고 입력이 확장 범위 YUV[Y: 0-255]에 포함된 경우 신호를 보내는 기능을 제공하지 않습니다. 이제 미디어 파운데이션 파이프라인은 GPU(그래픽 처리 장치) 하드웨어에 확장 장치에 대한 신호를 보내는 기능을 제공합니다. 이 기능은 MJPEG 디코더, 확장 범위 인식을 포함하여 전체 미디어 파운데이션 파이프라인을 만듭니다.

MF_MT_VIDEO_NOMINAL_RANGE 특성은 콘텐츠에 대한 스튜디오 및 확장 YUV 범위를 지정하는 데 사용됩니다.

미디어 스트림 원본

Windows 8.1에서는 Windows 스토어 앱을 위한 MSS(미디어 스트림 소스)라는 새로운 일반 미디어 소스를 제공합니다. 이 기술에 대한 API는 Windows.Media.Core 네임스페이스에 있고 기본 미디어 원본 클래스는 MediaStreamSource입니다. MSS를 통해 앱은 재생, 코드 변환 및 스트리밍을 위해 압축 및 압축되지 않은 오디오와 동영상 샘플을 미디어 파이프라인에 전송할 수 있습니다. 미디어 샘플은 앱에서 동적으로 생성되거나 스트림이나 파일에서 디멀티플렉싱될 수 있습니다. 이런 유연성을 통해 앱이 더 쉽게 새 미디어 형식에 대한 플랫폼 지원을 확장하거나 관리 코드에서 사용자 지정 미디어 원본을 적응 스트리밍 또는 구현하는 등의 복잡한 문제를 해결할 수 있습니다.

MediaStreamSource API는 이름이 같은 Microsoft Silverlight API와 매우 유사합니다. 따라서 이러한 API의 Silverlight 버전에 친숙한 개발자들은 MSS를 사용하는 Windows 스토어 앱을 훨씬 잘 이해할 수 있습니다.

MSS는 JavaScript로 작성한 Windows 스토어 앱의 audiovideo 개체, C++, C# 또는 Visual Basic으로 작성한 Windows 스토어 앱의 MediaElement 개체 및 MediaTranscoder와 함께 사용할 수 있습니다.

다음은 몇 가지 기본 MSS API입니다. 순서는 MSS가 작동하는 방식의 기본 흐름을 반영합니다. MediaStreamSource는 이벤트 인수를 통해 요청 개체를 앱에 전송합니다. 이러한 요청 개체를 사용하여 앱이 MediaStreamSource와 상호 작용하고 데이터를 다시 원본에 전달합니다.

API 설명
MediaStreamSource 미디어 샘플을 미디어 파이프라인에 직접 전달하는 미디어 원본을 나타냅니다. MediaStreamSource는 앱에서 제공되는 MediaStreamSample 개체를 사용합니다.
MediaStreamSample MediaStreamSource에서 사용되는 미디어 샘플을 나타냅니다.
MediaStreamSource.Starting(이벤트)

MediaStreamSource는 이 이벤트를 사용하여 미디어 데이터 처리를 시작할 준비가 되었음을 앱에 알립니다.

MediaStreamSourceStartingRequest

미디어 데이터 처리를 시작할 준비가 되었음을 나타내는 MediaStreamSource의 요청을 나타냅니다.

앱은 SetActualStartPosition을 호출하여 최대한 빨리 이 요청에 응답해야 합니다. 앱이 MediaStreamSource의 데이터 처리를 연기해야 하는 경우 MediaStreamSourceStartingRequest.GetDeferral를 호출하여 비동기 지연을 가져올 수 있습니다. 앱이 MediaStreamSource를 시작할 준비가 되면 지연 개체에서 Complete을 호출합니다.

시작 요청은 MediaStreamSource.Starting 이벤트 처리기에 전달되는 MediaStreamSourceStartingEventArgs를 통해 액세스합니다.

MediaStreamSource.SampleRequested(이벤트)

MediaStreamSource는 이 이벤트를 사용하여 MediaStreamSample이 준비되었음을 앱에 알립니다.

앱이 이 이벤트에 대한 처리기를 등록해야 합니다.

MediaStreamSourceSampleRequest

새 미디어 샘플에 대한 MediaStreamSource의 요청을 나타냅니다. Sample 속성을 새 MediaStreamSample로 설정하면 MediaStreamSource가 트리거되어 미디어 샘플을 검색하고 계속해서 미디어 데이터를 처리합니다.

앱은 이 요청에 대해 가능하면 빨리 응답해야 합니다. 앱에서 MediaStreamSample을 전송하기 전에 시간이 필요한 경우 MediaStreamSourceSampleRequest.GetDeferral을 호출하여 비동기 지연을 가져올 수 있습니다. 앱이 지연과 함께 완료된 경우에는 지연 개체에서 Complete을 호출합니다.

샘플 요청은 MediaStreamSource.SampleRequest 이벤트 처리기에 전달되는 MediaStreamSourceSampleRequestedEventArgs를 통해 액세스합니다.

앱은 MediaStreamSample을 제공하지 않고 MediaStreamSourceSampleRequest에 응답하거나 MediaStreamSourceSampleRequest.Sample 속성을 null에 할당하여 스트림의 끝에 도달했음을 표시합니다.

MediaStreamSource.Closed(이벤트)

MediaStreamSource는 이 이벤트를 사용하여 종료되었음을 앱에 알립니다.

MediaStreamSourceClosedRequest

닫혔음을 나타내는 MediaStreamSource의 요청을 나타냅니다.

닫기 요청은 MediaStreamSource.Closed 이벤트 처리기에 전달되는 MediaStreamSourceClosedEventArgs를 통해 액세스합니다.

MediaElement.SetMediaStreamSource MediaElement의 원본을 MediaStreamSource로 설정합니다.

 

MSS 사용에 대한 자세한 예제를 보려면 MediaStreamSource 샘플을 가져오세요.

오디오 및 동영상 캡처 업데이트

[지금 미디어 캡처오디오 효과 검색 샘플을 가져옵니다.]

Windows 8.1에서는 오디오 및 동영상 캡처에 대한 기능 업데이트 호스트를 제공합니다.

사진 시퀀스 모드

사진 시퀀스 모드에서는 사진의 연속 시퀀스를 사용합니다. MediaCapture.VideoDeviceController 속성을 통해 액세스하는 LowLagPhotoSequenceControl 클래스를 사용하여 이 모드를 구성합니다.

LowLagPhotoSequenceControl.Supported 속성을 사용하여 장치에서 사진 시퀀스 모드를 지원하는지 확인합니다.

사진 시퀀스 모드에 대한 주요 시나리오에서는 과거에서, 즉 사용자가 사진을 촬영하기 전에 사진을 가져오고 있습니다. PhotoCapturedEventArgs.CaptureTimeOffset을 사용하여 프레임이 미래 또는 과거에 있는지 알릴 수 있습니다. 0보다 큰 값은 미래에 있음을 나타내고 0보다 작은 값은 과거에 있음을 나타냅니다.

이 모드를 시작하려면 MediaCapture.PrepareLowLagPhotoSequenceCaptureAsync를 호출합니다. 사진 캡처를 시작하려면 StartAsync를 호출합니다. 앱은 작업이 중지될 때까지 계속해서 장치에서 사진을 수신합니다. 사진 캡처를 중지하려면 StopAsync를 호출합니다.

앱에서 초당 가져오는 프레임 수를 설정하려면 LowLagPhotoSequence.PhotosPerSecondLimit을 사용합니다. 이 속성은 장치의 센서가 30fps(초당 프레임)를 처리할 수 있지만 앱에서는 4fps만 필요한 경우에 유용하게 사용할 수 있습니다.

미리 보기 지원

미리 보기는 MediaCapture.VideoDeviceController를 통해 액세스하는 LowLagPhotoControlLowLagPhotoSequenceControl 클래스를 통한 사진 시퀀스 작업 및 단일 사진에 대해 지원됩니다.

미리 보기를 사용하려면 ThumbnailEnabled 속성을 true로 설정합니다. DesiredThumbnailSize를 사용하여 원하는 미리 보기 크기를 설정하고 ThumbnailFormat을 사용하여 형식을 설정합니다.

장면 모드

장면 모드는 현지 기록되고 있는 장면과 더 잘 일치하도록 캡처된 프레임의 사후 처리를 조정합니다. MediaCapture.VideoDeviceController 속성을 통해 액세스하는 SceneModeControl을 사용하여 이 모드를 구성합니다.

SupportedModes 속성은 장치에서 지원되는 장면 모드(예: Snow, NightSport)를 표시합니다. 모드를 선택하려면 SceneModeControl.SetValueAsync를 호출합니다.

토치 모드

토치 모드에서는 장치에서 토치 LED를 사용합니다. MediaCapture.VideoDeviceController 속성을 통해 액세스하는 TorchControl을 사용하여 이 모드를 구성합니다.

TorchControl.Supported 속성을 확인하여 장치에서 이 컨트롤을 지원하는지 확인할 수 있습니다. 지원되는 경우 캡처 앱 또는 비캡처 앱에서 토치 모드를 사용하여 공간을 밝게 하는 등의 작업을 수행할 수 있습니다.

플래시 모드

플래시 모드에서는 장치에서 플래스를 사용합니다. MediaCapture.VideoDeviceController 속성을 통해 액세스하는 FlashControl을 사용하여 이 모드를 구성합니다.

FlashControl.Supported 속성을 확인하여 장치에서 이 컨트롤을 지원하는지 확인할 수 있습니다. 지원되는 경우 사진 앱에서 플래시 모드를 사용하여 낮은 조명 조건을 처리하거나 RedEyeReduction을 적용합니다.

화이트 밸런스

화이트 밸런스는 장치에서 화이트 밸런스 설정에 대한 추가적인 제어를 앱에 제공합니다. MediaCapture.VideoDeviceController 속성을 통해 액세스하는 WhiteBalanceControl을 사용하여 이러한 수준을 구성합니다.

WhiteBalanceControl.Supported 속성을 확인하여 장치에서 이 컨트롤을 지원하는지 확인할 수 있습니다. 지원되는 경우 SetPresetAsync를 호출하여 ColorTemperaturePreset 값 중 하나를 사용할 수 있습니다. 또는 SetValueAsync를 호출하여 MinMax 사이의 특정 Value를 설정합니다.

노출 모드

노출 모드에서는 장치에서 노출 설정에 대한 추가적인 제어를 앱에 제공합니다. MediaCapture.VideoDeviceController 속성을 통해 액세스하는 ExposureControl을 사용하여 이 모드를 구성합니다.

ExposureControl.Supported 속성을 확인하여 장치에서 이 컨트롤을 지원하는지 확인할 수 있습니다. 지원되는 경우 SetValueAsync를 호출하여 앱에서 노출 값을 설정할 수 있습니다. 자동 노출을 켜려면 SetAutoAsync를 호출합니다.

노출 보정 모드

노출 보정 모드에서는 캡처된 사진의 노출 수준에 대한 제어를 앱에 제공합니다. MediaCapture.VideoDeviceController 속성을 통해 액세스하는 ExposureCompensationControl을 사용하여 이 모드를 구성합니다.

ExposureCompensationControl.Supported 속성을 확인하여 장치에서 이 컨트롤을 지원하는지 확인할 수 있습니다. 지원되는 경우 SetValueAsync를 호출하여 앱에서 노출 값을 설정할 수 있습니다.

초점 모드

초점 모드에서는 장치에서 초점 설정에 대한 추가적인 제어를 앱에 제공합니다. MediaCapture.VideoDeviceController 속성을 통해 액세스하는 FocusControl을 사용하여 이 모드를 구성합니다.

FocusControl.Supported 속성을 확인하여 장치에서 이 컨트롤을 지원하는지 확인할 수 있습니다. 지원되는 경우 SetPresetAsync를 호출하여 FocusPreset 값 중 하나를 사용할 수 있습니다. 또는 SetValueAsync를 호출하여 MinMax 사이의 특정 Value를 설정합니다.

ISO 모드

ISO 모드를 사용하여 앱이 장치에서 ISO 속도 설정을 관리할 수 있습니다. 낮은 조명 조건에서는 더 높은 전체 밝기를 위해 더 높은 노이즈 수준을 선호할 수 있습니다. ISO 속도 컨트롤을 통해 앱이 이 절충 요소를 조정할 수 있습니다. MediaCapture.VideoDeviceController 속성을 통해 액세스하는 IsoSpeedControl을 사용하여 이 모드를 구성합니다.

IsoSpeedControl.Supported 속성을 확인하여 장치에서 이 컨트롤을 지원하는지 확인할 수 있습니다. 지원되는 경우 SetPresetAsync를 사용하여 ISO 수준을 IsoSpeedPreset 값 중 하나로 설정합니다. SupportedPresets는 장치에서 지원하는 미리 설정된 값을 나열합니다.

관심 영역

관심 영역을 통해 앱이 미리 보기에서 RegionOfInterest를 지정할 수 있습니다. MediaCapture.VideoDeviceController를 통해 액세스하는 RegionsOfInterestControl을 사용하여 이 설정을 구성합니다.

이 설정을 사용하여 초점 및 노출 수준 같은 항목을 계산할 미리 보기의 영역을 지정합니다. 관심 영역을 통해 "탭하여 초점 잡기" 같은 시나리오가 가능해집니다.

시야

시야를 사용하면 앱에서 MediaCaptureSettings.PitchOffsetDegrees, MediaCaptureSettings.Horizontal35mmEquivalentFocalLengthMediaCaptureSettings.Vertical35mmEquivalentFocalLength 설정을 통해 시야 및 카메라 각도를 계산할 수 있습니다.

동영상을 기록하는 동안 사진 촬영

앱에서는 MediaCaptureSettings.ConcurrentRecordAndPhotoSupported 설정을 확인하여 장치가 동영상을 기록하는 동안 사진 촬영을 허용하는지 확인할 수 있습니다.

카메라가 소리를 재생해야 하는지 결정

MediaCaptureSettings.CameraSoundRequiredForRegion 설정은 카메라에서 사진을 촬영할 때 운영 체제에서 소리를 재생해야 하는지 나타냅니다. 앱에서는 이 정보를 사용하여 소리를 재생해야 할지 결정할 수 있습니다.

캡처 장치 최적화

VideoDeviceController.PrimaryUse 속성은 사진이나 동영상에 캡처 장치가 주로 사용되는지 여부를 나타냅니다. 이 속성을 사용하여 시스템이 성능과 품질을 최적화할 수 있습니다.

압축되지 않은 AVI 및 WAV 기록

앱에서는 MediaCaptureInitializationSettings.AudioProcessingRaw로 설정하여 마이크로부터 압축되지 않은 오디오 스트림을 기록할 수 있습니다.

오디오 효과 검색

앱에서는 끝점에서 오디오 처리 체인을 검색할 수 있습니다. 이 정보를 사용하여 앱에서 수행되는 오디오 처리를 구성할 수 있습니다. Windows.Media.Effects 네임스페이스에는 AudioEffect, AudioCaptureEffectsManager, AudioEffectsManagerAudioRenderEffectsManager 클래스가 포함되어 있습니다.

AudioCaptureEffectsManager 개체를 만들려면 AudioEffectsManager.CreateAudioCaptureEffectsManager를 호출합니다. AudioRenderEffectsManager 개체를 만들려면 AudioEffectsManager.CreateAudioRenderEffectsManager를 호출합니다.

XAML MediaElement 업데이트

[지금 XAML 미디어 재생 샘플을 가져옵니다.]

MediaElement 컨트롤은 기본 제공 전송 컨트롤 및 전체 창 렌더링을 지원하도록 확장되었습니다.

MediaElement.AreTransportControlsEnabled 속성을 통해 기본 제공 전송 컨트롤을 사용하거나 사용하지 않도록 설정할 수 있으므로 재생, 중지, 일시 중지 또는 삭제 같은 작업을 수행하기 위해 더 이상 사용자 지정 단추를 연결할 필요가 없습니다. 이 API는 HTML5 videoaudio 요소에서 controls 속성처럼 작동합니다.

MediaElement.IsFullWindow 속성을 사용하여 전체 창 렌더링을 사용하거나 사용하지 않도록 설정할 수 있습니다.

다음 코드에서는 기본 제공 전송 컨트롤을 사용하도록 설정하는 방법을 보여 줍니다.

<MediaElement Name="media" 
              Source="testVideo.mp4" 
              AreTransportControlsEnabled="True" />
MediaElement media = new MediaElement();
media.AreTransportControlsEnabled = true;

또한 다음 코드에서는 전체 창 동영상 렌더링을 사용하도록 설정하는 방법을 보여 줍니다.

<MediaElement Name="media"
              Source="testVideo.mp4" 
              IsFullWindow="True" />
MediaElement media = new MediaElement();
media.IsFullWindow = true;

HTML5 동영상 및 오디오 재생

[지금 HTML 미디어 재생 샘플을 가져옵니다.]

Windows 8.1에서는 W3C(World Wide Web Consortium) HTML5 MSE(Media Source Extensions)에 대한 지원, W3C HTML5 EME(Encrypted Media Extensions)에 대한 지원을 포함한 오디오 및 동영상 미디어 재생에 대한 많은 업데이트와 XAML MediaElement 컨트롤에 대한 업데이트를 제공합니다.

HTML5 동영상 및 오디오에 대한 MSE(Media Source Extensions)

HTML5 MSE(Media Source Extensions)는 videoaudio 요소를 확장하여 플러그인을 사용하지 않고 미디어 스트림을 동적으로 변경할 수 있는 W3C 표준입니다. 이 표준은 적응 미디어 스트리밍, 라이브 스트리밍, 동영상 스플라이싱 및 동영상 편집 같은 시나리오를 지원합니다.

사용자 지정 적응 스트리밍 솔루션을 MSE에서 빌드할 수 있습니다. 적응 스트리밍 솔루션에서는 최고 품질의 스트리밍 환경을 제공하기 위해 미디어 스트림의 비트 전송률을 동적으로 변경합니다. 이 솔루션에서는 네트워크 대역폭, CPU 사용 같은 제약 조건에 따라 최적 비트 전송률을 결정하려고 합니다. 예를 들어 네트워크 대역폭이 감소하면 MSE를 사용하여 동영상 스트림을 낮은 비트 전송률로 전환할 수 있습니다. 이 경우 이미지의 품질이 감소하지만 동영상을 중단 없이 계속 재생할 수 있습니다.

동영상을 동적으로 함께 스플라이싱하는 하나의 사용 예는 미디어를 재생하는 동안 광고를 삽입하는 것입니다. 이는 사전에 미디어 파일에 광고 클립을 삽입할 필요가 없지만 재생하는 동안 미디어 스트림에 클립을 삽입할 수 있음을 의미합니다.

다음은 MSE API의 몇 가지 중요 요소입니다.

API 설명
MediaSource HTML 미디어 요소에 연결된 미디어 개체입니다. MediaSource에는 하나 이상의 SourceBuffer 개체에 지정된 미디어 데이터가 포함되어 있습니다.
MediaSource.readyState MediaSource의 현재 상태 및 미디어 요소에 연결되어 있는지 여부를 나타냅니다.
SourceBuffer 미디어 데이터를 저장하는 데 사용되는 버퍼입니다.
SourceBufferList SourceBuffer 개체의 컬렉션입니다.
MediaSource.endOfStream 스트림 끝의 원인을 나타냅니다.
MediaSource.sourceBuffers MediaSource에 대한 미디어 데이터가 포함된 SourceBuffer 개체의 컬렉션입니다.
createObjectURL MediaSource 개체에 대한 URL을 만듭니다. src 속성을 이 URL로 설정하여 MediaSourcevideo 또는 audio에 연결할 수 있습니다.

 

HTML5 동영상 및 오디오 요소에 대한 EME(Encrypted Media Extensions)

HTML5 EME(Encrypted Media Extensions)는 videoaudio 요소를 확장하여 플러그인을 사용하지 않고 DRM(디지털 권한 관리) 보호 콘텐츠를 사용할 수 있는 W3C 표준입니다. EME는 Windows 8.1에서 실행되는 Internet Explorer 11 및 JavaScript로 작성한 Windows 스토어 앱에서 지원됩니다.

다음은 EME와 함께 사용되는 주요 API 중 일부입니다.

API 설명
MediaKeys 미디어 데이터를 암호화하고 암호 해독하는 데 사용되는 키입니다.
MediaKeySession 키가 연결되어 있는 재생 세션입니다.
MediaKeys.createSession MediaKeys와 연결된 MediaKeySession을 만듭니다.
keySystem 키 시스템을 지정하는 미디어 요소의 특성입니다. 키 시스템은 콘텐츠 보호 공급자 또는 암호 해독 메커니즘을 식별합니다.
MediaKeyError MediaKeys와 연결된 오류의 유형을 지정합니다.
MediaKeyMessageEvent MediaKeys 관련 이벤트의 유형을 지정합니다.

 

원격 재생 기능 업데이트

[지금 미디어 원격 재생SystemMediaTransportControls 샘플을 가져옵니다.]

Windows 8.1에서는 원격 재생 환경을 향상시키기 위한 많은 업데이트를 제공합니다.

프로그래밍 방식으로 원격 재생 UI 시작

Windows 8.1에 대한 새 UI 지침에서는 사용자가 장치 참 메뉴를 살짝 밀어 UI를 표시할 필요 없이 앱 개발자가 표준 원격 재생 문자 모양을 사용하여 원격 재생 플라이아웃을 프로그래밍 방식으로 표시하기 위한 앱에서 바로 단추를 제공하도록 권장합니다. ShowPlayToUI를 사용하여 플라이아웃을 표시합니다.

다음 코드에서는 원격 재생 UI를 표시하는 방법을 보여 줍니다.

private void showPlayTo() {
    Windows.Media.PlayTo.PlayToManager.ShowPlayToUI();
}
Private Sub showPlayTo()
    Windows.Media.PlayTo.PlayToManager.ShowPlayToUI()
End Sub
function showPlayTo() {
    Windows.Media.PlayTo.PlayToManager.showPlayToUI();
}

참조에 의한 원격 재생

참조에 의한 원격 재생을 사용하면 웹 페이지와 Windows 스토어 앱에서 DRM 보호 콘텐츠를 재생할 수 있습니다. 앱에서는 원격 재생 대상 장치에 전송될 기본 설정 URI(Uniform Resource Identifier)를 지정합니다. 이 URI가 클라우드 기반 미디어 서버를 가리킬 수 있습니다. preferredSourceUri가 있는 경우에는 원격 재생 대상 장치가 클라우드에서 직접 콘텐츠를 스트리밍할 수 있고 해당 콘텐츠를 DRM으로 보호할 수 있습니다. 콘텐츠가 보호되지 않아야 하는 —Windows 8.1 컴퓨터의 —대체 스트리밍 콘텐츠와 대조적입니다.

다음 코드에서는 참조에 의한 원격 재생을 설정하는 방법을 보여 줍니다.

// video is a MediaElement defined in XAML.
using Windows.Foundation;

video.Source = new Uri("https://www.contoso.com/videos/video.mp4"); 
video.PlayToSource.PreferredSourceUri = 
   new Uri("https://www.contoso.com/catalogid=1234"); 
<video src="https://www.contoso.com/videos/video.mp4" 
   x-ms-playToPreferredSourceUri="https://www.contoso.com/catalogid=1234" /> 
var video = document.createElement('video'); 
document.body.appendChild(video); 

video.src = "https://www.contoso.com/videos/video.mp4"; 
video.msPlayToPreferredSourceUri = "https://www.contoso.com/catalogid=1234"; 
auto video = ref new Windows::UI::Xaml::Controls::MediaElement(); 

video->Source = 
   ref new Windows::Foundation::Uri("https://www.contoso.com/videos/video.mp4"); 

video->PlaytoSource->PreferredSourceUri = 
   ref new Windows::Foundation::Uri("https://www.contoso.com/catalogid=1234"); 

Adobe Flash 오디오 및 동영상 지원

이제 원격 재생은 DMR(디지털 미디어 수신기)에 대한 새로운 Windows UI의 Internet Explorer를 통해 보호되지 않은 플래시 오디오 및 동영상 재생을 지원합니다.

Media Source Extensions 지원

MSE(Media Source Extensions)는 웹 브라우저만 사용하여 고품질, 프리미엄, 전원 효율적, 장편 길이 동영상을 제공하기 위한 중심이 될 W3C 표준입니다. MSE에는 플러그인이 필요하지 않습니다. 이제 원격 재생은 JavaScript를 사용하는 Windows 스토어 앱 및 Windows UI의 Internet Explorer를 통해 웹 사이트에서 보호되지 않은 MSE 콘텐츠를 재생하도록 지원합니다.

오디오 전용 장치에 대한 동영상

이제 원격 재생 UI에서는 동영상 콘텐츠에 대한 원격 끝점으로 오디오 전용 수신기를 선택하도록 지원합니다. 동영상 콘텐츠가 해체되고 오디오 구성 요소만 장치에 전송됩니다.

미디어 전송 컨트롤 UI

Windows 8.1에서는 MediaControl 클래스 대신에 새 SystemMediaTransportControls를 사용할 수 있습니다.

볼륨 크게 또는 작게를 누를 때 표시되는 UI인 미디어 전송 컨트롤 UI를 원격 재생 장치에서 재생에 대한 원격 제어로 사용할 수 있습니다.

전송 컨트롤을 표시하고 사용하여 원본 앱이 백그라운드에 있거나 장치 화면이 잠겨 있는 동안 로컬 또는 원격 재생을 제어할 수 있습니다. 모든 Windows 스토어 앱에서는 다음이 포함된 기본 구현을 가져옵니다.

  • 재생, 일시 중지 및 검색 같은 기본 전송 컨트롤 연결

  • 노래 제목 대신 앱 이름

  • 앨범 아트 대신 앱 아이콘

앱에서 다음 작업을 통해 기본 구현을 향상시킬 수 있습니다.

  • 다음 트랙 및 이전 트랙 기능 같은 고급 전송 컨트롤 연결

  • 노래 제목 제공

  • 앨범 아트 제공

  • 앨범 제목 제공

장치 참 메뉴 UI 업데이트

장치 참 메뉴는 계층 구조로 구성되고 장치를 다음 범주로 분류합니다.

  • 재생

  • 인쇄

  • 프로젝트

  • 탭하여 보내기(장치 하드웨어에서 지원하는 경우)

이렇게 분류하면 사용자가 장치 참 메뉴에서 찾을 것으로 예상할 수 있는 정보에 대한 혼동을 줄일 수 있습니다. 현재 사용 가능한 장치가 없는 경우에도 이러한 섹션이 표시됩니다.

디지털 미디어 수신기 지속성

가장 최근에 선택한 디지털 미디어 수신기가 그 연결 상태와 함께 장치 참 메뉴에서 강조 표시됩니다.

향상된 연결/연결 끊김 흐름 및 향상된 오류 보고

이제 원격 재생 UI에서는 향상된 연결 및 연결 끊김 흐름을 지원합니다.

장치에 대한 원격 재생 연결이 설정되는 동안 새 UI에는 "연결 중"이라는 메시지가 표시되고 원격 재생 플라이아웃은 연결이 설정될 때까지 계속 표시됩니다. 연결에 실패하면 연결 오류가 원본 앱에 보고됩니다.

연결 끊기 단추가 제거되었습니다. 대신에 원격 재생을 종료하고 로컬로 재생을 다시 시작하려면 이제 사용자가 원격 재생 UI에서 다른 장치와 함께 나열되는 이 PC를 선택합니다.