2013-03-14 14 views
11

Tôi đang cố sử dụng lớp học MediaPlayer để phát tệp video. Vấn đề là video không được hiển thị ở tất cả mặc dù tôi có thể nghe thấy âm thanh trong quá trình phát video.Phát video bằng lớp MediaPlayer

Tiếp theo là mã của hoạt động

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

Tiếp theo là mã của layout 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> 

xin vui lòng cho tôi biết những gì cần phải được thực hiện? Cảm ơn trước.

+0

Bạn có thể tạo chế độ xem bề mặt của riêng mình và gọi chế độ xem bề mặt này trong hoạt động của bạn để phát video. Hy vọng điều này có thể giải quyết vấn đề của bạn – AndroidOptimist

Trả lời

0

đặt bề mặt Xem chiều cao và chiều rộng để điền vào tệp cha trong tệp 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 đã cố gắng này cũng – Chaitanya

0

Thiết bố trí SurfaceView của bạn để wrap_contentsẽ không kích thước video để phát tại tỉ lệ thích hợp.

Bạn có thể tham khảo link này câu trả lời

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

Và cũng blog này Play media on surfaceview using android.media.MediaPlayer

+0

Vâng liên kết bạn cung cấp là yên tĩnh hữu ích và các ứng dụng trong đó đã có thể chơi cùng một tập tin video từ thẻ SD. Nhưng tôi không muốn sử dụng 'ContentProvider' tức là' MediaStore'. vì vậy bạn có thể gợi ý cho tôi một liên kết từ nơi tôi có thể kiểm tra cách sử dụng tài nguyên thô để phát video bằng cách sử dụng lớp 'MediaPlayer'. – Chaitanya

0

Vâng, tôi không biết nếu bạn cần một tình huống cụ thể, nhưng có bạn đã đã thử FullscreenVideoView?

Nó cố gắng tóm tắt tất cả những vấn đề SurfaceView và bạn chỉ có thể tập trung trong các nút giao diện người dùng. Vì nó mở, bạn có thể phân lớp FullscreenVideoView và tùy chỉnh theo ý bạn.