내보내기(0) 인쇄
모두 확장
정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

Windows Phone 8의 배경 오디오 개요

2014-06-18

적용 대상: Windows Phone 8

 

백그라운드에서 오디오를 재생하는 Windows Phone 용 앱을 작성할 수 있습니다. 즉, 사용자가 뒤로 버튼 또는 시작 버튼을 눌러 응용프로그램에서 나간 뒤에도 응용프로그램이 오디오를 계속 재생할 수 있습니다. 이 문서에서는 배경 오디오 응용프로그램의 구성 요소와 이러한 구성 요소가 함께 작동하는 방법을 설명합니다.

팁팁:

배경 오디오 플레이어 샘플배경 오디오 스트리머 샘플용 코드를 다운로드할 수 있습니다.

MediaStreamSource 샘플용 코드도 다운로드할 수 있습니다.

Windows Phone 8의 배경 오디오 재생 방법을 참조하세요.

이 항목에는 다음 단원이 포함되어 있습니다.

 

배경 오디오 응용프로그램은 Windows Phone OS 7.1 에 도입된 백그라운드 에이전트를 이용합니다. 백그라운드 에이전트에 대한 자세한 내용은 Windows Phone 8의 멀티태스킹을 참조하세요.

Windows Phone 의 모든 미디어는 Zune Media Queue를 통해 재생됩니다. 배경 오디오 응용프로그램은 Zune Media Queue로 명령을 보내 현재 트랙, 재생 시작, 일시 중지, 빨리 감기, 되감기 등을 설정합니다. 이 작업을 수행하려면 BackgroundAudioPlayer클래스에서 메서드를 호출합니다. 그러면 Instance 개체가 Zune Media Queue와 통신하여 오디오 재생을 조작합니다.

UVC(Universal Volume Control)는 오디오가 재생 중이거나 사용자가 볼륨 컨트롤 스위치를 누를 때 잠금 화면에 표시되는 컨트롤 집합입니다. UVC는 Zune Media Queue도 조작합니다. 따라서 응용프로그램에서 재생을 시작하면 UVC를 사용해 오디오를 제어할 수 있습니다. UVC는 응용프로그램의 AudioPlayerAgent에 이벤트를 보내 재생 목록 논리를 구현할 수 있습니다. AudioPlayerAgent에 대해서는 이 항목의 뒷부분에서 자세히 설명합니다.

배경 오디오 앱을 잠금 화면 아래에서 실행하는 데에는 특수한 구성이 필요하지 않습니다.

배경 오디오 응용프로그램에는 두 가지 유형이 있습니다. 그 중 한 가지 유형은 간단한 재생 목록을 구현하고 미디어 파일 주소가 포함된 Uri를 Zune Media Queue로 전달하여 현재 트랙을 설정합니다. Uri는 휴대폰의 로컬 주소이거나 원격 주소일 수 있습니다. 어떤 주소를 사용하든 오디오는 Windows Phone 에서 재생용으로 지원하는 형식이어야 합니다. 올바른 오디오 파일 형식은 Windows Phone 8에 지원되는 미디어 코덱을 참조하세요.

다른 배경 오디오 응용프로그램 유형은 MediaStreamSource를 사용하여 재생 시스템에 오디오 샘플을 공급하기 위한 오디오 스트림을 구현합니다. 이 응용프로그램 유형에서는 MediaStreamSource에서 파생된 클래스를 구현하여 오디오 스트리밍 및 디코딩을 처리하므로, 이 스트림에는 원하는 모든 형식을 사용할 수 있습니다. MediaStreamSource 구현에 대해서는 이 문서에서 설명하지 않습니다.

이 두 가지 유형의 응용프로그램은 여러 항목을 공유합니다. 먼저 재생 목록을 구현하는 응용프로그램에 대해 설명합니다. 그런 다음 MSS(MediaStreamSource)를 사용하여 스트리밍을 구현하는 응용프로그램에 대해 설명합니다.

재생 목록 응용프로그램

배경 오디오 재생 목록 응용프로그램을 만들려면 다음의 두 항목을 구현해야 합니다. 이 두 항목은 재생을 제어하기 위한 사용자 인터페이스를 제공하는 응용프로그램과, AudioPlayerAgent에서 파생된 클래스를 구현하는 어셈블리입니다. 아래 다이어그램에는 구현해야 하는 두 항목이 녹색으로 표시되어 있습니다.

Background audio playlist app architecture

응용프로그램 UI

응용프로그램 사용자 인터페이스에서 응용프로그램의 사용자 인터페이스를 구현합니다. Visual Studio 템플릿을 사용하여 초기 응용프로그램을 만드는 경우 MainPage.xaml 및 MainPage.xaml.cs 파일에서 사용자 인터페이스를 구현합니다. 기본 응용프로그램은 Instance를 사용하여 Zune Media Queue에서 현재 트랙을 설정하고 재생을 시작하는 등의 작업을 수행합니다.

AudioPlayerAgent

AudioPlayerAgent는 운영 체제에서 인스턴스화되어 응용프로그램 사용자 인터페이스 또는 UVC를 통해 사용자가 요청한 작업을 처리합니다.

AudioPlayerAgent는 백그라운드에서 실행되며 BackgroundAudioPlayer 인스턴스를 호출합니다. 그런 다음 Zune Media Queue를 호출하여 오디오를 실제로 재생합니다.

에이전트에서 OnUserAction(BackgroundAudioPlayer, AudioTrack, UserAction, Object), OnPlayStateChanged(BackgroundAudioPlayer, AudioTrack, PlayState) 또는 OnError(BackgroundAudioPlayer, AudioTrack, Exception, Boolean)를 처리하면 NotifyComplete()를 호출하여 처리가 완료되었으므로 에이전트를 메모리에서 안전하게 제거할 수 있음을 알립니다.

Visual Studio에서 Windows Phone 오디오 재생 에이전트 템플릿을 사용하여 새 AudioPlayerAgent 프로젝트를 만든 다음 솔루션에 추가합니다.

Background audio playback agent template

그러면 기본 응용프로그램 프로젝트에서 새 AudioPlayerAgent에 대한 참조를 추가합니다.

BackgroundAudioSolution

응용프로그램 프로젝트의 참조 노드를 마우스 오른쪽 버튼으로 클릭한 다음 참조 추가...를 선택합니다.

스트리밍 오디오 응용프로그램

스트리밍 오디오 응용프로그램을 만들려면 재생 목록 응용프로그램과 같은 항목을 구현해야 합니다. 구체적으로는 사용자 인터페이스를 제공하는 기본 응용프로그램과 AudioPlayerAgent를 만들어야 합니다. 그러나 스트리밍 오디오 응용프로그램의 경우 AudioStreamingAgent에서 파생된 클래스와 MediaStreamSource에서 파생된 클래스도 구현해야 합니다. 아래 다이어그램에는 구현해야 하는 항목이 녹색으로 표시되어 있습니다.

Background audio streaming app architecture

오디오 스트리밍 에이전트

AudioStreamingAgentOnBeginStreaming(AudioTrack, AudioStreamer) 메서드로 전달되는 AudioStreamer 인스턴스에서 SetSource(MediaStreamSource)를 호출하여 Zune Media Queue를 만들고 MediaStreamSource를 가리키도록 합니다.

Visual Studio에서 Windows Phone 오디오 스트리밍 에이전트 템플릿을 사용하여 새 AudioStreamingAgent 프로젝트를 만든 다음 솔루션에 추가합니다.

Background audio streaming agent template

MediaStreamSource

Zune Media Queue는 MediaStreamSource를 호출하여 오디오 샘플을 요청합니다. MediaStreamSource를 만드는 방법에 대해서는 이 항목에서 설명하지 않습니다. 자세한 내용은 MediaStreamSource 샘플을 참조하세요.

백그라운드 에이전트 수명 주기

BackgroundAudioPlayer는 응용프로그램의 사용자 인터페이스 또는 UVC의 UserAction 요청을 처리하는 데 필요한 경우 AudioPlayerAgent를 만듭니다.

AudioStreamingAgentBackgroundAudioPlayer에서 새 스트림이 필요한 경우에 만듭니다. 에이전트가 만들어지면 BackgroundAudioPlayerAudioStreamingAgent에서 OnBeginStreaming(AudioTrack, AudioStreamer) 메서드를 호출합니다.

백그라운드 에이전트는 Abort() 또는 NotifyComplete()를 호출할 때 삭제됩니다.

기타 배경 오디오 클래스

배경 오디오 응용프로그램은 다른 클래스를 사용하여 오디오 플레이어 환경을 구현합니다.

BackgroundAudioPlayer

BackgroundAudioPlayer 클래스는 Zune Media Queue와 상호 작용합니다. 장치에서 오디오 재생을 제어하려면 Instance 메서드를 호출합니다.

AudioTrack

AudioTrack 클래스는 트랙의 제목, 아티스트, 앨범, URI 등 트랙에 대한 메타데이터를 나타냅니다. URI가 null로 설정되면 시스템은 트랙을 MediaStreamSource로 설정하는 것으로 가정합니다. 이 경우 Tag 속성을 사용하여 정보를 AudioPlayerAgent에서 AudioStreamingAgent로 전달할 수 있습니다.

AudioStreamer

AudioStreamer 인스턴스가 OnBeginStreaming(AudioTrack, AudioStreamer)으로 전달됩니다. OnBeginStreaming 구현에서는 SetSource(MediaStreamSource)를 호출하여 MediaStreamSource(오디오 샘플 제공함)에서 파생되는 클래스를 가리킵니다.

이 섹션에서는 배경 오디오를 재생하는 응용프로그램을 만들 때 구현할 몇 가지 모범 사례에 대해 자세히 설명합니다.

디버깅

코딩, 디버깅, 코드 편집 및 디버깅 다시 시작 프로세스 중에 디버거는 디버깅을 다시 시작할 때 응용프로그램이 아닌 배경 오디오 에이전트에 연결될 수 있습니다. 이와 같이 연결되지 않도록 하려면 응용프로그램 시작 시 백그라운드 에이전트가 닫히도록 해야 합니다. 이 작업을 편리하게 수행할 수 있는 한 가지 방법은 App 클래스의 생성자에 Close() 호출을 삽입하는 것입니다. Visual Studio 템플릿에서 응용프로그램을 만든 경우 App 클래스 생성자에서 검사하여 응용프로그램이 디버거에서 실행되는지 체크인합니다. 이 검사를 실행하려면 아래 if 문 내에 BackgroundAudioPlayer.Instance.Close 호출을 삽입합니다.

// Show graphics profiling information while debugging.
if (System.Diagnostics.Debugger.IsAttached)
{
    // Close the background audio player in case it 
    // was running from a previous debugging session.
    BackgroundAudioPlayer.Instance.Close();

    // ...

사용자 작업 처리

BackgroundAudioPlayerUserAction 요청 수를 제한하지 않습니다. 응용프로그램이나 UVC(Universal Volume Control)을 통해 UI에서 호출된 작업은 대기되었다가 하나씩 처리됩니다. AudioPlayerAgent에서는 연속하는 호출이 있는지 확인할 방법이 없습니다. 네트워크 요청이 필요한 SkipNext, SkipPrevious 또는 Play 호출의 경우 몇 초가 걸릴 수 있습니다.

사용자 환경에 끼치는 영향은 다음과 같습니다.

  1. 연속하는 SkipNext, SkipPrevious 또는 Play 호출은 소요 시간에 관계없이 순서대로 처리됩니다.

  2. 각 호출에는 30초가 허용됩니다.

  3. PlayPause 작업에는 우선 순위가 적용되지 않으므로 에이전트가 사용자 작업에 응답하는 데 몇 초나 몇 분까지 걸릴 수 있습니다. 이는 PlayPause에 즉시 응답해야 하는 사용자 환경의 특성을 위반하는 것입니다.

이를 방지하려면 대기되는 SkipNextSkipPrevious 요청의 수를 제한하고, PlayPause에 더 높은 우선 순위를 지정합니다. 배경 오디오 플레이어 샘플에서는 요청이 처리될 때까지 다음이전 버튼을 사용할 수 없도록 설정합니다.

상태 전환 처리

BackgroundAudioPlayer의 상태가 변경되면 PlayStateChangedEventArgs에서 상태 전환에 대한 정보를 캡처할 수 있습니다. 오디오 플레이어가 현재 재생 상태로 전환되기 전에 발생한 CurrentPlayStateIntermediatePlayState를 모두 확인할 수 있습니다.

이벤트 인수에서 제공된 정보를 사용하여 처리할 수 있는 상태 전환의 예는 다음과 같습니다.

  1. IntermediatePlayState = BufferingStopped

  2. CurrentPlayState = Playing

  1. IntermediatePlayState = TrackEnded

  2. CurrentPlayState = Stopped

MediaElement 및 BackgroundAudioPlayer

BackgroundAudioPlayerMediaElement를 함께 사용하여 오디오를 재생할 때는 주의해야 합니다.

  1. Close()를 호출한 후에 MediaElement 재생으로 전환해야 합니다.

  2. 미디어 대기열이 하나뿐이므로, 응용프로그램에서 배경 오디오를 일시 중지하고 MediaElement를 사용하여 항목을 재생한 다음 배경 오디오 스트림을 계속할 수 없습니다.

메모리 및 런타임 제약 조건

  • AudioPlayerAgent 구현 시 30초 이내에 NotifyComplete() 또는 Abort()를 호출해야 합니다.

  • AudioStreamingAgent 구현의 경우 제한 없는 런타임이 허용됩니다.

  • 두 배경 오디오 에이전트 유형 모두 같은 프로세스에서 호스트되며, 다음과 같은 최대 메모리 제한도 동일합니다.

    • Windows Phone 8 업데이트 3 가 설치된 Windows Phone 8(8.0.10492 이상 버전)의 경우 25MB

    • Windows Phone 8 업데이트 3 가 설치되지 않은 Windows Phone 8(8.0.10492 미만 버전)의 경우 20MB

    • Windows Phone OS 7.1 의 경우 15MB

  • 디버거에서 실행되는 경우에는 Windows Phone 운영 체제에서 메모리 및 런타임 제약 조건을 무시합니다.

Microsoft는 MSDN 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 진행하고 있습니다. 참여하도록 선택하시면 MSDN 웹 사이트에서 나가실 때 온라인 설문 조사가 표시됩니다.

참여하시겠습니까?
표시:
© 2015 Microsoft