`
mmdev
  • 浏览: 12915906 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

一,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中已经传入播放文件
分享到:
评论

相关推荐

    Android实例源码-音乐播放器类安卓源代码(9例).zip

    Android实例源码-音乐播放器类安卓源代码(9例) Android多线程断点续传下载+在线播放音乐 GL音乐播放器 基于SDL、FFmpeg的android播放器源码 简单实用的音乐播放器 简单音乐播放器,实现了播放器基本功能,使用...

    简易的android视屏播放器

    简易的android视屏播放器

    Android 简易视频服务器

    两个Android项目源码: 一:使用nanohttpd-2.3.1.jar搭建简易Android服务器,并对外提供手机内部的视频地址。 二:从简易服务器中通过接口获取视频地址信息。通过VideoView进行视频内容播放。

    《Android应用开发揭秘》源码

     7.3 播放视频  7.4 录制歌曲  7.5 相机设置  7.6 闹钟设置  7.7 铃声设置  7.8 小结  第8章 网络与通信  8.1 网络通信基础  8.1.1 无线网络技术  8.1.2 Android网络基础  8.2 HTTP通信  8.2.1 ...

    方维直播系统网站源码商业版+带全套App源码(含iOS)+超详细安装文档.txt

    互动直播系统能够快速搭建的支持视频播放、图片分享、语音文字转化、刷屏送礼等互动方式,高质量、低时延、稳定快速、多协议、操作简易、支持高并发、大数据、全终端的泛娱乐化手机视频直播平台。  本帖提供的源码...

    互动娱乐视频直播平台系统商业版APP源码 安卓苹果双端+全套配置安装教程

    安卓Android原生App源码、苹果ios原生App源码,附带超级详细的全套配置安装教程 (包括直播系统服务器配置、安装部署、ios打包上架、短信使用、 支付平台申请文档、后台配置说明、直播二次开发文档等)!

    android开发揭秘PDF

    7.3 播放视频 7.4 录制歌曲 7.5 相机设置 7.6 闹钟设置 7.7 铃声设置 7.8 小结 第8章 网络与通信 8.1 网络通信基础 8.1.1 无线网络技术 8.1.2 Android网络基础 8.2 HTTP通信 8.2.1 HttpURLConnection接口 8.2.2 ...

    方维互动直播系统app源码,商业版+手机视频直播平台+全终端+全套配置安装教程

    方维互动直播系统能够快速搭建的支持视频播放、图片分享、语音文字转化、刷屏送礼等互动方式,高质量、低时延、稳定快速、多协议、操作简易、支持高并发、大数据、全终端的泛娱乐化手机视频直播平台。 本帖提供的...

    JAVA上百实例源码以及开源项目源代码

    Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来...

    利用Broadcast及相关组件实现简易音乐播放器功能

    在Andriod Studio中使用Broadcast实现了简易音乐播放器的功能。可以进行播放、暂停、歌曲切换的功能。效果如下图: 由于无法上传视频,故展示GIF,没有音乐播放 项目源码 已发布至gitee 准备工作 新建assets文件夹,...

    JAVA上百实例源码以及开源项目

    此时此景,笔者只专注Android、Iphone等移动平台开发,看着这些源码心中有万分感慨,写此文章纪念那时那景! Java 源码包 Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这...

    Android Studio实现一个新闻APP,功能巨多,大作业必备项目

    有文字有图片还有视频可以播放,全方位给用户带来视听娱乐享受,随时随地获取时事新闻。用作毕业设计都完全可以,用作大作业那绝对也是极佳。具体的演示可以参考我的对应博客,下载下来即可运行。 博客介绍:...

    DLVideo_Nano

    一:使用nanohttpd-2.3.1.jar搭建简易Android服务器,并对外提供手机内部的视频地址。 二:从简易服务器中通过接口获取视频地址信息。通过VideoView进行视频内容播放。 三:增加Android内置编译使用的Android.mk。并...

Global site tag (gtag.js) - Google Analytics