2011-08-08 2 views
13

내 프로젝트에서 끝없이 흐르는 스트림을 사용하여 라이브 라디오를 구현합니다. 스트림이 audio/mpeg 유형이므로 안드로이드의 이전 버전을 실행하는 장치에서도 nativ Android MediaPlayer를 사용하면 문제가 없습니다. 나는 1.6을 실행 HTC 매직에서 이것을 테스트하고 완벽하게 작동합니다. WLAN과 3G 사이를 전환 할 때조차도 버퍼가 올라가고 나는 작은 딸꾹질 만 인식 한 다음 아무 일도 일어나지 않는 것처럼 계속 재생합니다. 또한 내가 근무일 동안 라디오에서 듣고있는 것처럼 연결을 거의 끊어 버리는 일이 없으며, 직장까지가는 길에 사용자 경험이 정확히 내가 원하는 것처럼 느껴지기도합니다. Android 2.1, HTC Wildfire 2.2 및 Samsung Galaxy Tab 2.2를 실행하는 HTC Legend와 같은 다른 장치에 대해 동일한 절차를 반복했습니다. 모든 장치가 스트림을 완벽하게 처리합니다.Android 2.2를 사용하여 HTC Desire에서 Android MediaPlayer를 사용하여 스트리밍 할 때 이상한 동작

그러나 이것은 내가 고착 된 곳입니다. HTC Desire 2.2에서 스트림을 재생하는 데 심각한 문제가 있습니다. MediaPlayer의 표준 구현 인 setDataSource (String path)를 사용하면 10 ~ 30 초 동안 재생되고 WLAN과 3G에서 모두 수신해도 연결이 끊어집니다. 나는이 문제를 해결하기 위해 NPR News 프로젝트의 StreamProxy을 사용하여 여러 가지 방법을 시도해 보았습니다. 그러나 HTC Desire는 여전히 연결을 끊어 버리고 어떤 경우에는 실제로 안정 연결을 유지할 때까지 4-5 번 다시 연결하려고 시도합니다.

08-08 09:35:17.810: ERROR/AwesomePlayer(67): Not sending buffering status because duration is unknown. 
08-08 09:35:19.849: ERROR/HTTPStream(67): recv failed, errno = 11 (Try again) 
08-08 09:35:19.849: INFO/HTTPDataSource(67): Retry ... 2 times left 
08-08 09:35:19.849: WARN/HTTPStream(67): Calling connect()... 
08-08 09:35:19.849: WARN/HTTPStream(67): Returned from connect()... 
08-08 09:35:20.739: ERROR/(1576): Broken pipe 
08-08 09:35:20.739: ERROR/(1576): java.net.SocketException: Broken pipe 
08-08 09:35:20.739: ERROR/(1576):  at org.apache.harmony.luni.platform.OSNetworkSystem.writeSocketImpl(Native Method) 
08-08 09:35:20.739: ERROR/(1576):  at org.apache.harmony.luni.platform.OSNetworkSystem.write(OSNetworkSystem.java:723) 
08-08 09:35:20.739: ERROR/(1576):  at org.apache.harmony.luni.net.PlainSocketImpl.write(PlainSocketImpl.java:578) 
08-08 09:35:20.739: ERROR/(1576):  at org.apache.harmony.luni.net.SocketOutputStream.write(SocketOutputStream.java:59) 
08-08 09:35:20.739: ERROR/(1576):  at org.jmvo.radio.StreamProxy.processRequest(StreamProxy.java:263) 
08-08 09:35:20.739: ERROR/(1576):  at org.jmvo.radio.StreamProxy.run(StreamProxy.java:138) 
08-08 09:35:20.739: ERROR/(1576):  at java.lang.Thread.run(Thread.java:1102) 

을 다음과 같이 프록시

08-08 09:41:30.799: ERROR/AwesomePlayer(67): Not sending buffering status because duration is unknown. 
08-08 09:41:32.849: ERROR/HTTPStream(67): recv failed, errno = 11 (Try again) 
08-08 09:41:32.849: INFO/HTTPDataSource(67): Retry ... 2 times left 
08-08 09:41:32.849: WARN/HTTPStream(67): Calling connect()... 
08-08 09:41:32.870: WARN/HTTPStream(67): Returned from connect()... 
08-08 09:41:33.160: INFO/HTTPDataSource(67): retrying connection succeeded. 
08-08 09:41:34.839: VERBOSE/CacheingDataSource(67): partial readAt CachingDataSource::readAt(260221, 418):mSource->readAt(page<0xd0ff0>->mOffset 260416, mPageSize 1728) 
08-08 09:41:36.839: ERROR/HTTPStream(67): recv failed, errno = 11 (Try again) 
08-08 09:41:36.839: INFO/HTTPDataSource(67): Retry ... 1 times left 
08-08 09:41:36.839: WARN/HTTPStream(67): Calling connect()... 
08-08 09:41:36.859: WARN/HTTPStream(67): Returned from connect()... 
08-08 09:41:37.361: INFO/HTTPDataSource(67): retrying connection succeeded. 

한 가지 더를 사용하지 않고 직접 MediaPlayer를 사용시

프록시를 사용할 때 내가지고있어 오류가 보인다. 30초 - NPR 뉴스가 정말 잘 작동하도록에서하여 StreamProxy 위해서는 내가 연결마다 10 느슨한 스트림 초래 이런 방식을 사용하여 다음 줄

byte[] buff = new byte[1024 * 50]; 
while (isRunning && (readBytes = data.read(buff, 0, buff.length)) != -1) { 
    client.getOutputStream().write(buff, 0, readBytes); 
} 

을 수정했다. 그러나 버퍼 크기를 4 바이트 또는 심지어 1 바이트로 낮추면 3G 딸꾹질을 자주 사용하면 문제가 다시 발생하지만 아주 잘 재생됩니다.

제 질문은, HTC Desires의 근본적인 소프트웨어와의 거래에 대한 아이디어가있는 사람이 있습니까? 내 말은, 동일한 버전의 OS를 실행하는 HTC Wildfire에서 완벽하게 작동한다는 것입니다. 두 장치의 소프트웨어간에 큰 차이가 있어서는 안됩니까? 또한 여러 HTC Desires에서이 응용 프로그램을 테스트하여 테스트 장치에 문제가 있는지 확인했습니다. 하지만 다른 장치에서와 마찬가지로 동일한 문제가 내 테스트 장치에서 발생했습니다.

아이디어가 있으십니까?

+0

비슷한 프로젝트가 있지만 현재 MediaPlayer에서 v2.2의 기본 버퍼링 만 사용하고 있습니다. 귀하의 의도는 아니지만 귀하의 게시물을 통해 StreamProxy를 사용하는 것이 가치가 있음을 입증하는 데 도움이되었습니다. 또한 버퍼 크기를 변경하는 것에 대한 메모는 여기에서 무슨 일이 일어나고 있는지 생각하게했습니다. MediaPlayer-default와 StreamProxy-default 둘 다 너무 크고 청크에 문제를 일으키는 버퍼를 사용하는 것 같습니다. – Civilian

+0

http://stackoverflow.com/questions/8671479/android-mediaplayer-works-fine-in-our-custom-audio-streaming-application-up-to-a –

답변

1

콘텐츠 유형 "audio/aacp"스트리밍은 직접 지원되지 않습니다.

Freeware Advanced Audio (AAC) Decoder for Android

How to use this library?

Consider legal issues while using it : 일부 디코딩 라이브러리 "AACP"를 재생하는 소송을 제기 할 수 있습니다, 아래의 솔루션을 참조하시기 바랍니다.당신이 상업 애플 리케이션 그 위에 * 만들 수 있도록

자세한 내용은 this을 참조하십시오.

0

안드로이드 2.2에서 스트리밍을 잊어 버리십시오. 플래시 스트리밍을 제외하고는 제대로 작동하지 않습니다.

관련 문제