【Android】播放视频的简易播放器源码

标签: android 播放 视频 | 发表时间:2012-04-05 13:35 | 作者:tianshuai11
出处:http://blog.csdn.net

一,MainActivity.java源码

import android.app.Activity;
import android.graphics.PixelFormat;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;


public class EX07_14 extends Activity
implements SurfaceHolder.Callback
{
  private TextView mTextView01;
  private static final String TAG = "HIPPO_MediaPlayer"; //打印日志的标志
  

  private MediaPlayer mMediaPlayer01;
  
  private SurfaceView mSurfaceView01;
  
  private SurfaceHolder mSurfaceHolder01;
  

  private ImageButton mPlay;
  private ImageButton mPause;
  private ImageButton mReset;
  private ImageButton mStop;
  

  private boolean bIsPaused = false;
  private boolean bIsReleased = false;
  private String strVideoPath = "";
  

  @Override
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    
    if(!checkSDCard()) //如果没有SD卡
    {

      mMakeTextToast
      (
        getResources().getText(R.string.str_err_nosd).toString(),
        true
      );
    }
    
    mTextView01 = (TextView)findViewById(R.id.myTextView1);
    

    getWindow().setFormat(PixelFormat.UNKNOWN);
    

    mSurfaceView01 = (SurfaceView) findViewById(R.id.mSurfaceView1); //显示动画用的容器
    

    mSurfaceHolder01 = mSurfaceView01.getHolder();
    mSurfaceHolder01.addCallback(this);
    mSurfaceHolder01.setFixedSize(176,144);
    mSurfaceHolder01.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    

    mPlay = (ImageButton) findViewById(R.id.play); 
    mPause = (ImageButton) findViewById(R.id.pause); 
    mReset = (ImageButton) findViewById(R.id.reset); 
    mStop = (ImageButton) findViewById(R.id.stop);
    

    strVideoPath = "/sdcard/a.3gp";
    

    mPlay.setOnClickListener(new ImageButton.OnClickListener()
    { 
      public void onClick(View view)
      {

        if(checkSDCard())
        {
          playVideo(strVideoPath);
        }
      }
    });
    

    mPause.setOnClickListener(new ImageButton.OnClickListener()
    {
      public void onClick(View view)
      {
        if(checkSDCard())
        {
          if (mMediaPlayer01 != null)
          {
            if(bIsReleased == false)
            {
              if(bIsPaused==false)
              {
                mMediaPlayer01.pause();
                bIsPaused = true;
                mTextView01.setText(R.string.str_pause);
              }
              else if(bIsPaused==true)
              {
                mMediaPlayer01.start();
                bIsPaused = false;
                mTextView01.setText(R.string.str_play);
              }
            }
          }
        }
      }
    });
    
    mReset.setOnClickListener(new ImageButton.OnClickListener()
    { 
      public void onClick(View view)
      {
        if(checkSDCard())
        {
          if(bIsReleased == false)
          {
            if (mMediaPlayer01 != null)
            { 
              mMediaPlayer01.seekTo(0);
            }
          }
        }
      } 
    });
    

    mStop.setOnClickListener(new ImageButton.OnClickListener()
    { 
      public void onClick(View view)
      {
        if(checkSDCard())
        {
          if (mMediaPlayer01 != null)
          {
            if(bIsReleased==false)
            {
              mMediaPlayer01.stop();
              mMediaPlayer01.release();
              bIsReleased = true;
              mTextView01.setText(R.string.str_stop);
            }          
          }
        }
      }
    });
  }
  

  private void playVideo(String strPath)
  { 
    mMediaPlayer01 = new MediaPlayer();
    mMediaPlayer01.setAudioStreamType(AudioManager.STREAM_MUSIC);
    

    mMediaPlayer01.setDisplay(mSurfaceHolder01);
    
    try
    { 
      mMediaPlayer01.setDataSource(strPath);
    }
    catch (Exception e)
    { 
      // TODO Auto-generated catch block
      mTextView01.setText("setDataSource Exceeption:"+e.toString());
    }
    
    try
    { 
      mMediaPlayer01.prepare();
    }
    catch (Exception e)
    { 
      // TODO Auto-generated catch block
      mTextView01.setText("prepare Exceeption:"+e.toString());
    }
    mMediaPlayer01.start();
    bIsReleased = false;
    mTextView01.setText(R.string.str_play);
    
    mMediaPlayer01.setOnCompletionListener
    (new MediaPlayer.OnCompletionListener()
    {
      @Override
      public void onCompletion(MediaPlayer arg0)
      {
        // TODO Auto-generated method stub
        mTextView01.setText(R.string.str_stop);
      }
    });
  }
  
  private boolean checkSDCard()
  {
    if(android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED))
    {
      return true;
    }
    else
    {
      return false;
    }
  }
  
  public void mMakeTextToast(String str, boolean isLong)
  {
    if(isLong==true)
    {
      Toast.makeText(EX07_14.this, str, Toast.LENGTH_LONG).show();
    }
    else
    {
      Toast.makeText(EX07_14.this, str, Toast.LENGTH_SHORT).show();
    }
  }
  
  @Override
  public void surfaceChanged
  (SurfaceHolder surfaceholder, int format, int w, int h)
  {
    // TODO Auto-generated method stub
    Log.i(TAG, "Surface Changed");
  }
  
  @Override
  public void surfaceCreated(SurfaceHolder surfaceholder)
  {
    // TODO Auto-generated method stub
    Log.i(TAG, "Surface Changed");
  }
  
  @Override
  public void surfaceDestroyed(SurfaceHolder surfaceholder)
  {
    // TODO Auto-generated method stub
    Log.i(TAG, "Surface Destroyed");
  }
}

二,main.xml 源码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:background="@drawable/white"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
>
  <TextView
    android:id="@+id/myTextView1"
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"
    android:textColor="@drawable/blue" 
    android:text="@string/hello"
  />
  <SurfaceView
    android:id="@+id/mSurfaceView1" 
    android:layout_width="100px" 
    android:layout_height="100px"> 
  </SurfaceView>
  
  <SeekBar android:id="@+id/seekBar" android:layout_height="wrap_content" android:layout_width="fill_parent" /> 
  
  
  <LinearLayout 
    android:orientation="horizontal" 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent" 
    android:padding="10dip" 
  >
  <ImageButton android:id="@+id/play" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content"
    android:src="@drawable/play"
  /> 
  <ImageButton android:id="@+id/pause"
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:src="@drawable/pause"
  /> 
  <ImageButton android:id="@+id/reset" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:src="@drawable/reset"
  /> 
  <ImageButton android:id="@+id/stop" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:src="@drawable/stop"
  /> 
  </LinearLayout> 
</LinearLayout>

三,源码中所需其余图片等 ,自备就可以。经测试通过可以播放,前提需要sdcard中已经传入播放文件

作者:tianshuai11 发表于2012-4-5 13:35:33 原文链接
阅读:9 评论:0 查看评论

相关 [android 播放 视频] 推荐:

Android三种播放视频的方式

- - CSDN博客推荐文章
在Android中,我们有三种方式来实现视频的播放:. 指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型. 2、使用VideoView来播放. 在布局文件中使用VideoView结合MediaController来实现对其控制. 3、使用MediaPlayer类和SurfaceView来实现,这种方式很灵活.

Android 4.4中播放HTML视频的Bug

- - 爱谷地
近期Nexus 4手机自动升级到Android4.4,本来挺好的一件事儿,结果发现自己的应用中出现一个Bug,应用中使用了Webview播放HTML5视频,代码如下:. 在4.3版本之前播放正常,新版本中播放时只能听到声音,而画面停留在最初的画面,也就是poster属性中的图片,但不会显示视频动画,只有点击暂停按钮,然后再次点击播放按钮时,视频动画才会显示正常.

开源的Android视频播放器

- - CSDN博客推荐文章
之前尝试自己解码视频,然后播放显示,虽然音视频都可以播放,但是实现不了音视频的同步,所以使用第三方的视频库Vitamio来实现视频播放器功能,这样自己只需要实现播放解码的制作不不要关心底层解码和显示问题. 是使用Vitamio 4.0,制作的视频播放器,后续会继续添加直播,网络播放功能. 2.使用ListView显示本地视频的缩略图,文件名称,播放时间.

【Android】播放视频的简易播放器源码

- - CSDN博客推荐文章
一,MainActivity.java源码. if(!checkSDCard()) //如果没有SD卡. mSurfaceView01 = (SurfaceView) findViewById(R.id.mSurfaceView1); //显示动画用的容器. 三,源码中所需其余图片等 ,自备就可以.

优秀的Android商业视频播放器

- ArmadilloCommander - Solidot
Helen Swann 写道 "Android操作系统内置了基本的视频播放器,它从Android 1.5 Cupcake起支持播放MPEG-4和3GP格式视频,但即使是使用Gingerbread和Honeycomb,用户仍然发现内置播放器远远不够,它只支持有限的视频格式,无法发挥智能手机和平板设备双核处理器的功能.

VPlayer – Android 下的万能视频播放器

- - 小众软件 - Appinn
VPlayer 是 Android 平台的视频播放器工具,可播放本地视频及流媒体,可流畅播放高清 MKV,FLV,MP4,MOV,TS,RMVB 等常见格式的视频. VPlayer 支持硬件解码,可得到更流畅的视频. 播放时可进行手势操作,控制屏幕亮度、音量、缩放等操作. 当点击视频链接时,在弹窗中会出现用 VPlayer 播放.

Android直播,音视频播放那些事儿

- - CSDN博客推荐文章
随着音视频领域的火热,在很多领域(教育,游戏,娱乐,体育,跑步,餐饮,音乐等)尝试做音视频直播/点播功能,那么作为开发一个小白,如何快速学习音视频基础知识,了解音视频编解码的传输协议,编解码方式,以及如何技术选型,如何解决遇到的坑,本文抛砖引玉,欢迎大咖交流. 静止的画面叫图像(picture). 连续的图像变化每秒超过24帧(frame)画面以上时,根椐视觉暂留原理, 人眼无法辨别每付单独的静态画面,看上去是平滑连续的视觉效果.

飞利浦 GoGear 3 之 Android 系统 PMP 播放器动手玩(视频)

- CarlNERV - Engadget 中国版
飞利浦也在影音领域耕耘多年,这款 GoGear 3 是对 iPod Touch 的又一次回应,上次可以追溯到 4 月份. 这款多媒体播放器采用的是 Android 2.3 系统,一个 3.2 寸的触控屏. 把玩之后,感觉机子整体很轻,不过塑料感比较强,机子小巧容易携带,系统操作的流畅度还不错. 不过很奇怪机子下方留出了很大的空间来摆放三个按键及 LOGO ,同时侧边还有黄铜色的三个物理按键.

利用ffmpeg和SDL实现一个跨android版本的音视频播放器

- - ITeye博客
绝对原创:转载请注明出处. 1:从 http://www.libsdl.org/tmp/下载SDL for android 版本(我下载的是 SDL-1.3.tar.gz ). 2:从 https://github.com/havlenapetr/FFMpeg下载 havlenapetr 的ffmpeg for android版本.

WebView中的视频播放

- - 移动开发 - ITeye博客
activity_main.xml如下:. private String videoUrl = "视频地址.mp4";. private String imgUrl = "视频封面图片地址.png";. private String html = "视频如下:
应用开发托管服务';