2012-03-27 21 views
0

Ich habe ein Problem mit der Wiedergabe von Video in Mediaplayer. Ich habe einen Ton, aber kein Video. Ich habe alles versucht und finde keine Lösung. Oder wissen Sie vielleicht, wie man eine SDP-Datei in Videobild spielt? Hier ist der Code:kein Video-Media-Player

public class TestStream1 extends Activity implements Callback{ 
MediaPlayer mMediaPlayer; 
String SrcPath = "rtsp://184.72.239.149/vod/mp4:BigBuckBunny_175k.mov"; 
private SurfaceView mPreview; 
private SurfaceHolder holder; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    mPreview = (SurfaceView) findViewById(R.id.surface); 
     holder = mPreview.getHolder(); 
     holder.addCallback(TestStream1.this); 
     holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

     holder.setFixedSize(400,300); 
     mMediaPlayer = new MediaPlayer(); 
     try{ 
      mMediaPlayer.setDataSource(SrcPath); 
      mMediaPlayer.setDisplay(holder); 
      mMediaPlayer.prepare(); 
      mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
      mMediaPlayer.start(); 

     }catch(Exception e){ 
      Toast .makeText(TestStream1.this, "Fail", Toast.LENGTH_LONG).show(); 
     } 

} 
@Override 
public void surfaceChanged(SurfaceHolder holder, int format, int width, 
     int height) { 
    // TODO Auto-generated method stub 

} 
@Override 
public void surfaceCreated(SurfaceHolder holder) { 
    // TODO Auto-generated method stub 

} 
@Override 
public void surfaceDestroyed(SurfaceHolder holder) { 
    // TODO Auto-generated method stub 

} 
} 

EDIT: Layout-Datei

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello" /> 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 
     <SurfaceView 
      android:id="@+id/surface" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" /> 
    </LinearLayout> 
</LinearLayout> 

Antwort

2

einige Videos nicht in Mediaplayer abgespielt werden, wenn Es hat nicht den Codec Codec im Glossar erklärt für seine a/v oder es ist zu komplex oder schlecht verschachtelt (Schaue Logcat für Zeichen über einige). Könnte einen oder mehrere Gründe haben. Um sicherzustellen, dass der Mediaplayer den gewünschten Videotyp wiedergeben kann, speichern Sie eine Videodatei mit dem gleichen A/V-Codec und der Erweiterung auf Ihrer SD-Karte und versuchen Sie dann, sie mit dem Standard-Mediaplayer abzuspielen. Meanwile, versuchen Sie es mit einem videoView zu überprüfen, ob das Video abgespielt werden kann. Ihr Code scheint in Ordnung zu sein.

Versuchen Sie diesen Code:

Paket a.b;

public class TestStream1 extends Activity implements Callback{ 
    MediaPlayer mMediaPlayer; 
    String SrcPath = "rtsp://184.72.239.149/vod/mp4:BigBuckBunny_175k.mov"; 
    private SurfaceView mPreview; 
    private SurfaceHolder holder; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     mPreview = (SurfaceView) findViewById(R.id.surface); 
     holder = mPreview.getHolder(); 
     holder.addCallback(TestStream1.this); 
     holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

     holder.setFixedSize(400,300); 
     mMediaPlayer = new MediaPlayer(); 

    } 
    @Override 
    public void surfaceChanged(SurfaceHolder holder, int format, int width, 
      int height) { 
     // TODO Auto-generated method stub 

    } 
    @Override 
    public void surfaceCreated(SurfaceHolder holder) { 
     // TODO Auto-generated method stub 
     try{ 
      mMediaPlayer.setDisplay(holder); 
      mMediaPlayer.setDataSource(SrcPath); 
      mMediaPlayer.prepare(); 
      mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
      mMediaPlayer.start(); 

     }catch(Exception e){ 
      Toast .makeText(TestStream1.this, "Fail", Toast.LENGTH_LONG).show(); 
     } 

    } 
    @Override 
    public void surfaceDestroyed(SurfaceHolder holder) { 
     // TODO Auto-generated method stub 
mMediaPlayer.release(); 
    } 
} 

SurfaceHolders sind ansynchronously erstellt, so müssen wir warten bis der Oberfläche und weisen Sie dann die zurückgegebene Fläche Halterobjekt erstellt wurde. Und ich bin mit dem folgenden Aufbau:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="@string/hello" /> 
    <LinearLayout 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
     <SurfaceView 
      android:id="@+id/surface" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    </LinearLayout> 
</LinearLayout> 

Die obige Lösung funktionieren soll.

+0

Ich habe versucht, das gleiche in VideoView zu tun und es funktioniert gut gab es Ton und Video. Das einzige Problem ist mit Media Player. Verwenden Mediaplayer und Videobetrachtung dieselben Codecs? –

+0

yup, sie benutzen den gleichen Mediaplayer. VideoView ist nur ein Wrapper des SurfaceHolder und ist sehr praktisch. Es bedeutet, dass der Code überprüft werden muss. Sie können für VideoView gehen, wenn Sie können. Veröffentlichen Sie Ihr Layout-XML, wenn Sie nicht möchten, und wir werden versuchen, den Code zu korrigieren. :) – Akhil

+0

Ich meine, wenn Sie nicht ein Videobild verwenden und mit einer Oberflächenansicht fortfahren möchten – Akhil

1

Hinweis sicher, aber versuchen, die Datenquelle einstellen wie:

mMediaPlayer.setDataSource(this, SrcPath); 
+0

Ja, ich habe das versucht, aber nichts ändert –

Verwandte Themen