6

Windows Phone 8 앱. 우리는 AudioStreamingAgent/Mp3MediaStreamSource을 사용하여 로컬로 캐시되거나 웹에서로드 할 수있는 MP3 파일을 재생합니다.BackgroundAudioPlayer가 재생되지 않음

파일을 다운로드 할 때 우리는 현재 AudioStreamingAgent/Mp3MediaStreamSource를 사용하여 현재 파일을 재생할 때 다음 파일을 미리 캐시 할 수 있습니다. 예, 캐시 된 파일에 WP8 내장 플레이어 만 사용할 수 있지만이 경우 다음 파일을 미리 캐시 할 수 없습니다.

문제점 : 여러 트랙 후에 BackgroundAudioPlayer가 더 이상 재생을 시작하지 않습니다.

  1. AudioStreamingAgent.OnBeginStreaming 실행한다 MediaStreamSource를 만드는
  2. Сode 실행되는 방법은 새로운 MediaStreamSource 인스턴스 실행
  3. AudioStreamer.SetSource
  4. PlayStateChanged가 PlayState.TrackReady 및 player.Play (백그라운드 프로세스에서 소성
  5. ) 이 경우 호출됩니다.

결국 트랙은 UVC로 표시되지만 상태는 '일시 중지됨'상태입니다. UVC에서 "재생"을 누르면 player.Play()를 호출하는 백그라운드에서 OnUserAction이 호출됩니다. 아무것도 바뀌지 않습니다.

Picture of "stuck state"

Sample with problem reproduction, VS 2012 (샘플 Background Audio Streamer Sample을 기반으로)

단계 샘플 코드를 재현하기 :

  1. 앱에게 "사전로드 트랙을"
  2. 버튼을 눌러 설치합니다. XAP에서 IsolatedStorage로 mp3 파일을 복사합니다.
  3. "Track 1"버튼을 누르십시오. 트랙 재생이 시작되면 "Track 2"버튼을 누르십시오. 그런 다음 트랙 2가 시작되면 "Track 3"버튼을 누르십시오.
  4. "Track *"버튼 트랙이 재생을 시작할 때까지 3 단계를 반복하십시오.
  5. 선택한 마지막 트랙은 UVC와 페이지의 진행률 막대 모두에서 활성 트랙으로 표시됩니다 (picture 참조).
  6. 대부분의 경우 다른 트랙 버튼을 눌러도 아무런 차이가 없습니다.

이 문제는 WP8 및 WP8.1 개발자 미리보기에서 모두 장치 및 에뮬레이터에서 재현됩니다.

업데이트 : 메모리가 부족한 경우는 아닙니다. sample code을 사용하여 backgroundlog.xml 파일을 보면이 문제의 재현은 sample uses only 6 Mb out of 20 Mb allowed입니다.이 그림의 마지막 열은 "메모리 사용 | 최대 허용 메모리 사용량"입니다.

+0

어쩌면 단계를 거쳐 디자인을 재평가해야 할 수도 있습니다. 내가 수집 한 것에서는 기본적으로 트랙을 재생하고 계속 연주하면서 다음 파일을 미리 캐시하려고합니다 (내가 틀렸다면 수정하십시오). 너 자신을 구현하는 것은 꽤 쉬운 일 인 것처럼 들린다. 그렇게 생각한거야? – Sam

+0

샘, 문제는 디자인 그 자체가 아니라 WP8. 샘플은 사전 캐싱을하지 않으며 MediaStreamSource/AudioStreamingAgent를 통해 로컬 파일을 재생하는 것입니다. 다음 파일을 캐시하면 재생을 위해 MediaStreamSource를 사용하는 것입니다. 그것은 그 자체가 원인이 아닙니다. 불행히도, 이것이 우리에게 맞는 유일한 접근 방식이므로 디자인을 변경할 수 없습니다. –

+0

아하이오. 그래서 기본적인 요구 사항은 단지 로컬 mp3 파일을 재생하는 것입니다? 나는 당신이 여기서 무엇을하는지 (핵심 목표는 무엇인지) 결정하려고 노력하고 있습니다. 그래서 나는 더 나은 도움이 될 수 있습니다. – Sam

답변

1

내 경험에 의하면 제 제안은 포트를 만들고 작업을 시작하는 것입니다. WPA8.1에서는 배경 오디오 재생의 한계가 사라집니다.

WP 용 뮤직 플레이어 앱을 개발하고 mediastreamsource을 사용하면서 음악을 캐시하려 할 때 나는 마침내 가능하지 않을 수도 있다는 결론에 도달했습니다.운영 체제가 모든 작업 또는 백그라운드 유형 작업을 수행하기 전에 일정 시간이나 다른 변수가 설정되어있는 것으로 보입니다. https://drive.google.com/file/d/0By_e5C-QWr9Ka3RmbVBlWVF3R1E/edit?usp=sharing

다음

이 해결하려고 할 때 내가 선호하는 다른 SO의 다음과 같습니다 :

BackgroundAudioPlayer is 'Playing' but not calling GetSampleAsync()

WP7 background audio resources are no longer available

HttpWebRequest from AudioPlayerAgent

은 내가 MS 전도사이를 썼다

AudioPlayerAgent, timer and webservice

WP7 Mp3MediaStreamSource demo not working

+1

Derek, 답변 해 주셔서 감사합니다. 그러나,)이 모든 스레드를 봤어, 고마워! b) 제 3 자 앱인 경우 8.1 미리보기로 갈 수 있습니다. 아무도 출시 날짜를 알지 못합니다. 단단한 비즈니스는 모든 사용자가 사용할 수있는 미리보기 빌드에서 작동하는 앱을 출시 할 수 없습니다 (모르는 경우). 우리는 MS와 이야기를 나눴고, 정확한 날짜도 말하지 않았습니다. c) 문서가 흥미 롭습니다. 실제로 # 3과 유사하지만 HTTP 스트리밍을 사용하여 구현되었습니다. –