2011-08-16 4 views
3

우리는 MediaPlayer을 사용하여 로컬 파일에 처음 캐시 된 mp3 음악을 스트리밍하고 MediaPlayer는 localserver를 통해 스트리밍합니다. 소니 에릭슨 Xperia X10이 안드로이드 2.3.3으로 업데이트 될 때까지 꽤 좋은 (약 1.6 년 동안 안드로이드 1.6 년 동안). 갑자기 그 기기에서만, 안드로이드 2.3.3에서는 오디오 스트리밍이 작동을 멈췄습니다.Android MediaPlayer "피어로 연결 재설정"

MediaPlayer 경우에 따라 오류 (100,0)가 상승하지만 대체로 MediaPlayer.prepareAsync() 방법에 스택합니다. 그런데 성공적으로 예외 전에 2 번 실행

outstream.write(buffer, skipFirst, length); 

코드는 매우 복잡하므로 다음과 같습니다 조사는 그 문제 때문에 라인을 가리키는

“java.net.SocketException: Connection reset by peer” 

의 발생을 보여줍니다 나에게 열심히 그것을 여기에서 제공 할 수 있었다. 그러나 나는 필요하면 더 많은 정보와 함께 돌아올 수있다.

MediaPlayer은 콘텐츠를 채우기 시작한 순간에 연결을 닫습니다. 또한 꽤 이상하게 보이는 것, 때때로 (1/20) MediaPlayer 음악을 재생하는 데 성공합니다.

아이디어가 있으십니까?

답변

0

더 많은 도움을 드릴 수 있도록 몇 가지 코드 스 니펫과 디버그 로그가 필요하다고 생각합니다. 우리를 위해 준비해 주시겠습니까? 또는 APK의 버전을 보내 주시면 (APK의 commersial ideas을 훔치기를 원하지 않는다면 제거되었습니다) APK를 다른 휴대 전화에서 테스트 할 수 있습니다. 요한, 소니 에릭슨의 개발자 지원

+0

@Johan - 똑같은 문제를보고 있습니다. 연락하는 가장 좋은 방법은 무엇입니까? –

+0

저는 꽤 오랫동안 오프라인 상태였습니다. 죄송합니다. [email protected]을 사용해보십시오. –

2

은 프록시가 범위의 HTTP 헤더를 제대로 구문 분석해야합니다. Xperia 장치는 Range: bytes=10000- 대신 Range: bytes=10000-20000 형식으로 범위 요청을 보냅니다.

이것이 정말로 문제인지 모르겠지만 일부 최신 Xperia 장치에서 재생이 고정되어 있다고 생각합니다. 구형 장치의 MediaPlayer가 매우 유사하다고 생각됩니다.

0

검색을 건너 뛰거나 연결이 끊어지고 MediaPlayer가 프록시 서버에 다시 연결을 유지하면 클라이언트에서 요청 및 범위 (int)를 얻은 후에 상태 206으로이 응답을 보내야합니다.

String headers += "HTTP/1.1 206 Partial Content\r\n"; 
headers += "Content-Type: audio/mpeg\r\n"; 
headers += "Accept-Ranges: bytes\r\n"; 
headers += "Content-Length: " + (fileSize-range) + "\r\n"; 
headers += "Content-Range: bytes "+range + "-" + fileSize + "/*\r\n"; 
headers += "\r\n"; 

그리고 당신은 HTTP 헤더에 범위를 포함하지 않는 MediaPlayer를의 요청을받을 때, 당신의 응답 헤더는 다음과 같이한다이 경우, 새로운 스트림 파일을 요청 :

String headers = "HTTP/1.1 200 OK\r\n"; 
headers += "Content-Type: audio/mpeg\r\n"; 
headers += "Accept-Ranges: bytes\r\n"; 
headers += "Content-Length: " + fileSize + "\r\n"; 
headers += "\r\n"; 

즐기십시오!