zoukankan      html  css  js  c++  java
  • 019_01播放视频之SurfaceView

      MediaPlayer主要用于播放音频,因此它没有提供图像输出界面,所以要借助于SurfaceView来显示MediaPalyer播放的图像输出。

      SurfaceHolder是一个接口,其作用就像一个关于Surface的监听器。提供访问和控制SurfaceView背后的Surface 相关的方法 (providingaccess and control over this SurfaceView's underlying surface),它通过三个回调方法,让我们可以感知到Surface的创建、销毁或者改变。在SurfaceView中有一个方法getHolder,可以很方便地获得SurfaceView所对应的Surface所对应的SurfaceHolder

      1 package com.example.day19_01videoplayer;
      2 
      3 import java.io.IOException;
      4 import android.app.Activity;
      5 import android.media.AudioManager;
      6 import android.media.MediaPlayer;
      7 import android.os.Bundle;
      8 import android.os.Environment;
      9 import android.view.SurfaceHolder;
     10 import android.view.SurfaceView;
     11 import android.view.View;
     12 
     13 public class MainActivity extends Activity {
     14 
     15     private SurfaceHolder holder;
     16     private MediaPlayer mediaPlayer;
     17     private final int STATE_IDLE = 0;
     18     private final int STATE_PLAYING = 1;
     19     private final int STATE_PAUSED = 2;
     20     private final int STATE_STOP =3;
     21 
     22     private int current_state = STATE_IDLE;
     23     private String path;
     24     
     25     @Override
     26     protected void onCreate(Bundle savedInstanceState) {
     27         super.onCreate(savedInstanceState);
     28         setContentView(R.layout.activity_main);
     29         
     30         SurfaceView surfaceView = (SurfaceView) findViewById(R.id.sf_video);
     31         holder = surfaceView.getHolder();
     32         path = Environment.getExternalStorageDirectory().getAbsolutePath()+"/sirendingzhi.mp4";
     33 
     34     }
     35 
     36      public void play(View v){
     37          
     38          if (mediaPlayer==null) {
     39              mediaPlayer = new MediaPlayer();             
     40          }
     41          
     42         if (current_state==STATE_PAUSED) {
     43             mediaPlayer.start();    
     44         } 
     45          
     46         if (current_state==STATE_IDLE||current_state==STATE_STOP) {
     47             mediaPlayer.reset();
     48              try {
     49                 mediaplay();    
     50             } catch (Exception e) {
     51                 // TODO Auto-generated catch block
     52                 e.printStackTrace();
     53             }
     54         } 
     55         
     56         current_state=STATE_PLAYING;
     57 
     58          
     59      }
     60 
     61     private void mediaplay() throws IOException {
     62         mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
     63         mediaPlayer.setDisplay(holder); 
     64         mediaPlayer.setDataSource(path);        
     65         mediaPlayer.prepare();
     66         mediaPlayer.start();
     67 
     68     }
     69      
     70      public void pause(View v){ 
     71          if (current_state==STATE_PLAYING) {
     72                 mediaPlayer.pause();
     73                 current_state=STATE_PAUSED;
     74             }
     75      }
     76      
     77      public void stop(View v){
     78          if (mediaPlayer!=null) {
     79                if (current_state==STATE_PLAYING||current_state==STATE_PAUSED) {
     80                     mediaPlayer.stop();
     81                      mediaPlayer.reset();
     82                      current_state=STATE_STOP;
     83                }    
     84         }
     85          
     86      }
     87      
     88      public void replay(View v){
     89          
     90           if (current_state!=STATE_IDLE) {
     91               if (current_state==STATE_STOP) {
     92                     
     93                }
     94              
     95                if (current_state==STATE_PLAYING||current_state==STATE_PAUSED) {
     96                     mediaPlayer.stop();
     97                     mediaPlayer.reset();    
     98                }    
     99                  try {
    100                     mediaplay();    
    101                } catch ( Exception e) {
    102                     // TODO Auto-generated catch block
    103                     e.printStackTrace();
    104                 }        
    105                   current_state=STATE_PLAYING;
    106         }          
    107      }
    108      
    109      @Override
    110     protected void onDestroy() {
    111         // TODO Auto-generated method stub
    112         super.onDestroy();
    113         
    114         if (mediaPlayer!=null) {
    115             mediaPlayer.stop();
    116             mediaPlayer.reset();
    117             mediaPlayer.release();
    118         }    
    119     }     
    120 }
     1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:paddingBottom="@dimen/activity_vertical_margin"
     6     android:paddingLeft="@dimen/activity_horizontal_margin"
     7     android:paddingRight="@dimen/activity_horizontal_margin"
     8     android:paddingTop="@dimen/activity_vertical_margin"
     9     tools:context="com.example.day19_01videoplayer.MainActivity" 
    10     android:orientation="vertical">
    11 
    12     <LinearLayout 
    13         android:layout_width="fill_parent"
    14         android:layout_height="wrap_content"
    15         android:orientation="horizontal" >
    16         <Button
    17             android:layout_width="wrap_content"
    18             android:layout_height="wrap_content"
    19             android:text="播放"
    20             android:onClick="play" />
    21         <Button
    22             android:layout_width="wrap_content"
    23             android:layout_height="wrap_content"
    24             android:text="暂停"
    25             android:onClick="pause" />
    26         <Button
    27             android:layout_width="wrap_content"
    28             android:layout_height="wrap_content"
    29             android:text="停止"
    30             android:onClick="stop" />
    31         <Button
    32             android:layout_width="wrap_content"
    33             android:layout_height="wrap_content"
    34             android:text="重播"
    35             android:onClick="replay" />
    36     </LinearLayout>
    37     
    38     <SurfaceView 
    39         android:id="@+id/sf_video"
    40         android:layout_width="fill_parent"
    41         android:layout_height="fill_parent"
    42         />
    43  
    44 </LinearLayout >

    物随心转,境由心造,一切烦恼皆由心生。
  • 相关阅读:
    [编]使用AutoCompleteExtender实现文本框自动匹配
    C#中的泛型
    Adapter模式
    .Net 项目代码风格要求
    Asp.Net Ajax的两种基本开发模式
    .NET框架
    SQL Server文章目录
    【转】prometheus数据上报方式pushgateway
    Operation is not valid due to the current state of the object
    lisp 笔记 闭包
  • 原文地址:https://www.cnblogs.com/woodrow2015/p/4543707.html
Copyright © 2011-2022 走看看