2013-03-14 12 views
11

Próbuję użyć klasy MediaPlayer do odtworzenia pliku wideo. Problem polega na tym, że wideo wcale się nie wyświetla, chociaż słyszę dźwięk z odtwarzanego wideo.Odtwarzanie wideo przy użyciu klasy MediaPlayer

Poniżej znajduje się kod aktywności

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; 
    } 
    } 
    } 

Poniżej znajduje się kod XML szablonu

<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> 

proszę mi powiedzieć, co należy zrobić? Z góry dzięki.

+0

Możesz utworzyć własny widok powierzchni i wywołać ten widok powierzchni w swojej aktywności, aby odtworzyć wideo. Mam nadzieję, że to rozwiąże Twój problem. – AndroidOptimist

Odpowiedz

0

Ustaw powierzchnię Zobacz wysokość i szerokość, aby wypełnić obiekt nadrzędny w pliku 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

Tak, spróbowałem tego również – Chaitanya

0

Ustawianie układu SurfaceView do wrap_contentnie rozmiar video grać w odpowiedniej proporcji.

Można odwołać się do tego linku odpowiedzi

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

a także tym blogu Play media on surfaceview using android.media.MediaPlayer

+0

Tak, podany link był cicho pomocny, a aplikacja była w stanie odtworzyć ten sam plik wideo z karty SD. Ale nie chcę używać 'ContentProvider', tj.' MediaStore'. więc możesz zasugerować mi łącze, skąd mogę sprawdzić, jak korzystać z surowego zasobu do odtwarzania wideo za pomocą klasy "MediaPlayer". – Chaitanya

0

No, ja nie wiem, czy potrzebujemy konkretnej sytuacji, ale masz już wypróbowany FullscreenVideoView?

Próbuje streścić wszystkie problemy z SurfaceView i można ustawić ostrość tylko w przyciskach interfejsu użytkownika. Ponieważ jest otwarty, możesz podklasę FullscreenVideoView i dostosowywać według potrzeb.

Powiązane problemy