2011-11-29 7 views
6

나는 UDP 또는 RTP 유니 캐스트 비디오 스트림을 수신하고 재생할 클라이언트 응용 프로그램을 빌드해야하는 Android 프로젝트가 있습니다. 불행히도, 나는이 작업을 할 수 없어 솔루션을 광범위하게 검색했습니다!Android에서 UDP 비디오 스트리밍

Xoom (Android 3.2) 및 Nexus S (Android 2.3.6)에서 테스트 중이며 MX Player (타사 미디어 플레이어 앱)을 클라이언트로 사용할 때 콘텐츠를 재생할 수 있음을 알고 있지만 네이티브 미디어 플레이어에서 콘텐츠를 재생할 수 없습니다. 나는 간단한 VideoView와 MediaPlayer를 모두 사용해 보았지만 같은 오류 코드로 실패하고 실제로 유용한 정보를 찾지 못했습니다.

비디오는 aac 오디오로 인코딩 된 H.264입니다.

또한 서버는 (udp 또는 rtp를 지정하는 것 이외의) 액세스 권한이없는 제 3 자의 솔루션이지만 MX 플레이어를 사용할 때 스트림을 재생할 수 있습니다.

public class Main extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    try { 
     MediaPlayer player = new MediaPlayer(); 
     SurfaceView surface = (SurfaceView) findViewById(R.id.video); 

     player.setDisplay(surface.getHolder()); 

     player.setDataSource(this, Uri.parse("udp://192.168.0.78:1234")); 

     player.prepare(); 

     player.setOnPreparedListener(new OnPreparedListener() { 

      @Override 
      public void onPrepared(MediaPlayer mp) { 
       Log.d("SimpleVideoPlayer", "Starting player"); 
       mp.start(); 
      } 
     }); 

     player.setOnErrorListener(new OnErrorListener() { 

      @Override 
      public boolean onError(MediaPlayer mp, int what, int extra) { 
       Log.d("SimpleVideoPlayer", "error with code: " + what); 
       return false; 
      } 
     }); 

    }catch(Exception e) { 
     e.printStackTrace(); 
    } 
} 

I 받고있어 오류는 다음과 같습니다 :

11-29 15:44:14.660: D/MediaPlayer(15451): Couldn't open file on client side, trying server side 
11-29 15:44:14.670: E/MediaPlayer(15451): error (1, -2147483648) 
11-29 15:44:14.670: W/System.err(15451): java.io.IOException: Prepare failed.: status=0x1 
11-29 15:44:14.670: W/System.err(15451): at android.media.MediaPlayer.prepare(Native Method) 
11-29 15:44:14.670: W/System.err(15451): at com.android.vidplayer.Main.onCreate(Main.java:26) 
11-29 15:44:14.670: W/System.err(15451): at android.app.Activity.performCreate(Activity.java:4397) 
11-29 15:44:14.670: W/System.err(15451): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048) 
11-29 15:44:14.670: W/System.err(15451): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1804) 
11-29 15:44:14.670: W/System.err(15451): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1856) 
11-29 15:44:14.670: W/System.err(15451): at android.app.ActivityThread.access$500(ActivityThread.java:125) 
11-29 15:44:14.670: W/System.err(15451): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1049) 
11-29 15:44:14.670: W/System.err(15451): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-29 15:44:14.670: W/System.err(15451): at android.os.Looper.loop(Looper.java:132) 
11-29 15:44:14.670: W/System.err(15451): at android.app.ActivityThread.main(ActivityThread.java:4157) 
11-29 15:44:14.670: W/System.err(15451): at java.lang.reflect.Method.invokeNative(Native Method) 
11-29 15:44:14.670: W/System.err(15451): at java.lang.reflect.Method.invoke(Method.java:491) 
11-29 15:44:14.670: W/System.err(15451): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
11-29 15:44:14.670: W/System.err(15451): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
11-29 15:44:14.670: W/System.err(15451): at dalvik.system.NativeStart.main(Native Method) 

또한 인터넷 사용 권한을 설정 한 다음

내 코드의 미디어 플레이어 부분이다.

아무에게도 제안 사항이 있습니까? 어디서나 유용한 정보를 찾을 수 없습니다.

감사합니다.

+0

'player.prepare()'대신'player.prepareAysnc()'를 사용해 보셨습니까? 스트림을 재생할 때는'prepareAsync()'를 사용해야합니다. – Squonk

답변

3

나는 그것이

http://developer.android.com/guide/appendix/media-formats.html

많은 제 3 자 Mediaplayers에이 FFMPEG 라이브러리를 기반으로 네트워크 프로토콜에 목록에없는 안드로이드가 기본적으로 UDP를 지원 모르겠어요. 그것이 자신의 작업 임에도 불구하고 프로젝트에서 FFMPEG를 사용하고자 할 수 있습니다.

+0

네, 그럴 것 같습니다! 나는 그 페이지를 보았지만 누군가가 자신의 해결책을 찾길 바랬습니다! – theChumpus

+0

@ theChumpus, Alex, 마녀 ffmpeg lib를 사용 했습니까? 미리 컴파일 된 라이브러리를 사용 했습니까? 스트림 h264 비디오를 시도 했습니까? – Derzu

+0

@Derzu http://code.google.com/p/dolphin-player/에서와 같이 Unix에서 ffmpeg를 컴파일했습니다. 그것은 h264 예를 재생합니다. –

1

Vitamio 라이브러리를 사용하여 udp : //를 통해 스트리밍 할 수도 있습니다 (장면 뒤에서 ffmpeg 사용). http://www.vitamio.org/en/

+0

태블릿 (nexus-7)에서 vitamio를 테스트 한 결과 이전 게시물이 삭제되었습니다. – user1767754

+0

친절하게 https://stackoverflow.com/questions/45521175/vitamio-unable-to-play-udp-streaming-in-android를 확인할 수 있습니까? –

+0

4 년 전에했던 특정 프로젝트에 대한 POC 코드를 찾아야합니다. 나는 그것을 소유하지 않았기 때문에 나는 물론이 일을 실제로 수행하지 못했다. 어떤 약속도하고 있지 않지만 보겠습니다. –