2010-12-31 8 views
3

WebView에서 오디오를 재생하려고합니다. 이 오디오는 URL로 제공됩니다. URL 로딩을 무시하여이 문제에 접근했습니다. 그리고 그것은 오디오 재생을 시작하지만 Media Player가 멈추는 경우가 많습니다. 이것은 약 30 %의 시간에 발생하며이 오디오 파일은 30 초를 넘지 않습니다.MediaPlayer가 제대로 오디오를 재생하지 않습니다.

MP3, OGG 및 WAV로 시도해 보았습니다.

또한 파일을 다운로드 한 다음 스트리밍하는 대신 재생했지만 시도하지는 않습니다.

public boolean shouldOverrideUrlLoading(WebView view, String url) { 
    if (url.endsWith(".ogg")){ 
     AudioLoader audioLoader = new AudioLoader(url); 
     audioLoader.start(); 
     return true; 
    } 
    else if (url.endsWith(".wav")){ 
     Uri tempPath = Uri.parse(url); 
     MediaPlayer player = MediaPlayer.create(interfazWeb, tempPath); 
     if (player != null){ 
      player.start(); 
     } else { 
      Log.e(TAG, "No se puede abrir el audio:" + url); 
     } 
     return true; 
    } 
    else if (url.endsWith(".mp3")){ 
     AudioLoader audioLoader = new AudioLoader(url); 
     audioLoader.start(); 
     return true; 
    }else{ 
     return super.shouldOverrideUrlLoading(view, url); 
    } 
} 

나는 "AudioLoader"에 의해 저장된 오디오 파일을 확인한 결과 완전히 괜찮아 :

는 동작 방법을 설명하는 ... 코드의 조각이다. 그리고 WAV 케이스가 첫 번째 시도를 사용하고 스트리밍으로 재생합니다.

SoundPool 및 AsyncPlayer도 시도해 보았습니다 ... 아무 효과가 없습니다 !!

그래서 ... 지금까지 나는 통신, 코덱 또는 버퍼 문제는 아니라고 생각합니다.

12-31 09:41:49.284: WARN/AudioFlinger(59): write blocked for 160 msecs, 20 delayed writes, thread 0xd7a8 
12-31 09:41:49.554: WARN/TimedEventQueue(59): Event 6 was not found in the queue, already cancelled? 

아무도 어떤 단서가하십시오 있습니까 : 내 유일한 팁 문제가 발생 그쪽 모든 형식과 모든 방법으로, 모든 시간 동안 반복되는 이러한 로그 항목입니까? 아니면 버그/실수가 있습니다.

당신이 날 도울 수있어 특별히 경우, 행복한 2011 유무 : P

감사를, 마누엘.

답변

3

audioLoader 및/또는 MediaPlayer 객체를 로컬 방식으로 작성 중입니다. 이러한 객체는 함수 shouldOverrideUrlLoading의 지역 객체입니다. 따라서 함수에서 일단 가비지 수집기가 참조되지 않은 모든 객체를 수집하려고하면 객체를 파괴하고 사운드가 중지됩니다. , 재미있는 소리,

private AudioLoader audioLoader; 
private MediaPlayer player; 
public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     if (url.endsWith(".ogg")){ 
      audioLoader = new AudioLoader(url); 
      audioLoader.start(); 
      return true; 
     } 
     else if (url.endsWith(".wav")){ 
      Uri tempPath = Uri.parse(url); 
      player = MediaPlayer.create(interfazWeb, tempPath); 
      if (player != null){ 
       player.start(); 
      } else { 
       Log.e(TAG, "No se puede abrir el audio:" + url); 
      } 
      return true; 
     } 
     else if (url.endsWith(".mp3")){ 
      audioLoader = new AudioLoader(url); 
      audioLoader.start(); 
      return true; 
     }else{ 
      return super.shouldOverrideUrlLoading(view, url); 
     } 
} 
+0

HUMM을 나는 월요일 그라시아 예수님을 시도 할 것이다 :

는 AudioLoader 및 MediaPlayer를 글로벌 객체로 객체를 선언보십시오! – mdelolmo

+0

내가 여기에 왔을 때 처음 시도한 것은 ... 20 분 전, 그리고 지금까지 완벽하게 작동하는 것 같습니다! 감사. – mdelolmo

+0

당신은 오신 것을 환영합니다! –

관련 문제