2013-03-14 76 views
11

我想利用MediaPlayer类播放视频文件。问题是视频没有得到显示,尽管我可以听到视频播放中的声音。使用MediaPlayer类播放视频

以下是活动

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

下面的代码是布局的XML代码

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

请告诉我需要做什么? 在此先感谢。

+0

您可以创建自己的曲面视图并在您的活动中调用此曲面视图来播放视频。希望这可以解决您的问题 – AndroidOptimist 2013-12-07 06:42:11

回答

0

set surface在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

是啊试过这一个也 – Chaitanya 2013-03-14 12:12:16

0

设置你的SurfaceView布局WRAP_CONTENT不会大小的视频,以在适当的宽高比播放。

您可以参考这个答案的链接

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

而且也是这个博客Play media on surfaceview using android.media.MediaPlayer

+0

是的,你提供的链接是安静的帮助,并在那里的应用程序能够播放SD卡相同的视频文件。但我不想使用'ContentProvider',即'MediaStore'。所以你可以建议我一个链接,我可以检查如何利用原始资源使用'MediaPlayer'类播放视频。 – Chaitanya 2013-03-14 12:14:59

0

好吧,如果你需要一个具体的情况我不知道,但你已经试过FullscreenVideoView

它试图抽象所有这些SurfaceView的问题,你只能关注UI按钮。当它打开时,您可以根据需要划分FullscreenVideoView的子类并进行自定义。