2013-03-14 16 views
11

Sto cercando di utilizzare la classe MediaPlayer per la riproduzione di un file video. Il problema è che il video non viene visualizzato affatto anche se riesco a sentire l'audio nel video.Riproduzione di video utilizzando la classe MediaPlayer

seguito è il codice di attività

public class MainActivity extends Activity implements OnClickListener { 

private SurfaceView surfaceView; 
private Button btnPlay; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    init(); 
    addListener(); 

} 

private void init() { 
    // TODO Auto-generated method stub 
    surfaceView = (SurfaceView) findViewById(R.id.surfaceView1); 
    btnPlay = (Button) findViewById(R.id.btnPlay); 
} 

private void addListener() { 
    // TODO Auto-generated method stub 

    btnPlay.setOnClickListener(this); 
} 

MediaPlayer mediaPlayer = null; 

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    switch (v.getId()) { 
    case R.id.btnPlay: 
     try{ 
     if (mediaPlayer != null) { 
      mediaPlayer.reset(); 
      mediaPlayer.release(); 
     }else{ 
     getWindow().setFormat(PixelFormat.UNKNOWN); 
     MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.wildlife); 
     SurfaceHolder surfaceHolder = surfaceView.getHolder(); 

     surfaceHolder.setFixedSize(176, 144); 
     surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
     mediaPlayer.setDisplay(surfaceHolder); 
     mediaPlayer.start();} 
     }catch (Exception e) { 
      Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show(); 
     } 
     break; 

    default: 
     break; 
    } 
    } 
    } 

seguito è il codice del file XML di layout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".MainActivity" > 

<SurfaceView 
    android:id="@+id/surfaceView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentTop="true" /> 

<Button 
    android:id="@+id/btnPlay" 
    style="?android:attr/buttonStyleSmall" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignRight="@+id/surfaceView1" 
    android:layout_alignTop="@+id/surfaceView1" 
    android:text="@string/play" /> 

</RelativeLayout> 

prego di dirmi che cosa deve essere fatto? Grazie in anticipo.

+0

È possibile creare la propria vista di superficie e chiamare questa vista di superficie nella propria attività per riprodurre il video. Spero che questo possa risolvere il tuo problema – AndroidOptimist

risposta

0

set surface Visualizza altezza e larghezza per riempire il genitore nel file xml.

<SurfaceView 
android:id="@+id/surfaceView1" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:layout_alignParentBottom="true" 
android:layout_alignParentLeft="true" 
android:layout_alignParentRight="true" 
android:layout_alignParentTop="true" /> 
+0

yeah ha provato anche questo – Chaitanya

0

Impostare il layout SurfaceView a wrap_contentvolontà non dimensioni di un video per giocare al corretto rapporto di aspetto.

È possibile fare riferimento a questa risposta collegamento

https://stackoverflow.com/a/6283676/1441666

E anche questo blog Play media on surfaceview using android.media.MediaPlayer

+0

Sì, il collegamento che hai fornito è stato molto utile e l'app in là era in grado di riprodurre lo stesso file video dalla scheda SD. Ma non voglio usare 'ContentProvider', ad esempio' MediaStore'. così puoi suggerirmi un link da dove posso verificare come utilizzare la risorsa grezza per riprodurre video usando la classe 'MediaPlayer'. – Chaitanya

0

Beh, non so se avete bisogno di una situazione specifica, ma hanno già provato FullscreenVideoView?

Si tenta di asportare tutti i problemi di SurfaceView e si può mettere a fuoco solo i pulsanti dell'interfaccia utente. Come è aperto, puoi sottoclasse FullscreenVideoView e personalizzare come ti serve.

Problemi correlati