欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android多媒体之VideoView视频播放器

程序员文章站 2023-12-20 18:42:22
本文实例为大家分享了视频播放器的两种方式,供大家参考,具体内容如下 1)、surfaceview 在布局文件中

本文实例为大家分享了视频播放器的两种方式,供大家参考,具体内容如下

1)、surfaceview
在布局文件中

<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:id="@+id/activity_media_play"
 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"
 android:orientation="vertical"
 tools:context="com.zking.android_contentresolve.mediaplayactivity">


 <surfaceview
  android:layout_width="match_parent"
  android:layout_height="300dp"
  android:id="@+id/sv_media_surface"
  />



 <linearlayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:orientation="horizontal"
  >
  <seekbar
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:id="@+id/seekbar"
   android:layout_weight="1" />

  <imagebutton
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:src="@android:drawable/ic_media_play"
   android:onclick="isplayorpause"
   />
 </linearlayout>
</linearlayout>

在activity里面和播放内存卡上音乐的代码差不多,只是视频多了个显示内容,关键代码就是这三条

//播放内存上的视频
mediaplayer.setdatasource(this, uri.parse("file://mnt/sdcard/movies/sister.mp4"));

//准备(内存卡)
mediaplayer.prepare();

//将媒体播放器捕捉的画面展示在surfaceview 上
mediaplayer.setdisplay(sv_media_surface.getholder());


但是没看前面博客的筒子可能会觉得看不懂,所以还是把完整的代码粘贴出来

public class mediaplayactivity extends appcompatactivity {
 private seekbar seekbar;
 private mediaplayer mediaplayer;
 private surfaceview sv_media_surface;

 @override
 protected void oncreate(bundle savedinstancestate) {
  super.oncreate(savedinstancestate);
  setcontentview(r.layout.activity_media_play);
  seekbar = (seekbar) findviewbyid(r.id.seekbar);
  sv_media_surface = (surfaceview) findviewbyid(r.id.sv_media_surface);

  seekbar.setonseekbarchangelistener(new seekbar.onseekbarchangelistener() {
   @override
   public void onprogresschanged(seekbar seekbar, int progress, boolean fromuser) {

   }

   @override
   public void onstarttrackingtouch(seekbar seekbar) {

   }

   @override
   public void onstoptrackingtouch(seekbar seekbar) {
    //获取拖动结束后的位置
    int progress=seekbar.getprogress();
    //跳转到某个位置播放
    mediaplayer.seekto(progress);
   }
  });
 }

 public void isplayorpause(view view){
  final imagebutton imagebutton= (imagebutton) view;

  if(mediaplayer==null){//代表第一次播放音乐

   //播放内存卡内的音频
   mediaplayer=new mediaplayer();
   //设置类型
   mediaplayer.setaudiostreamtype(audiomanager.stream_music);
   //设置音源
   try {
    //播放内存上的视频
    mediaplayer.setdatasource(this, uri.parse("file://mnt/sdcard/movies/sister.mp4"));
    //准备(内存卡)
    mediaplayer.prepare();

    //将媒体播放器捕捉的画面展示在surfaceview 上
    mediaplayer.setdisplay(sv_media_surface.getholder());

    //必须在播放前加载音频文件(异步准备)
//    mediaplayer.prepareasync();

   } catch (ioexception e) {
    e.printstacktrace();
   }

   mediaplayer.start();
   //把图标改成暂停的图标(这里的暂停图标就是播放时的状态)
   imagebutton.setimageresource(android.r.drawable.ic_media_pause);

   //获取音乐的总时长
   int duration=mediaplayer.getduration();
   //设置进度条的最大值为音乐的总时长
   seekbar.setmax(duration);

   new mythread();
  }else if(mediaplayer.isplaying()){//正在播放音乐
   mediaplayer.pause();
   //把图标改成播放的图标(暂停状态)
   imagebutton.setimageresource(android.r.drawable.ic_media_play);
  }else{
   mediaplayer.start();
   imagebutton.setimageresource(android.r.drawable.ic_media_pause);
  }

 }

 class mythread extends thread{
  @override
  public void run() {
   super.run();
   while(seekbar.getprogress()<seekbar.getmax()){
    //获取当前音乐播放的位置
    int currentposition=mediaplayer.getcurrentposition();
    //让进度条跟着时间走
    seekbar.setprogress(currentposition);

   }
  }
 }


}

Android多媒体之VideoView视频播放器

2)、videoview,如果在项目中,仅仅只是播放视频的话,这种方式会比较简单,但是如果是要做视频播放器的话,还是使用第一种方法

布局文件

 <videoview
  android:layout_width="match_parent"
  android:layout_height="300dp"
  android:id="@+id/vv_main_vedio"
  />

activity

public class vedioactivity extends appcompatactivity {

 private videoview vv_main_vedio;

 @override
 protected void oncreate(bundle savedinstancestate) {
  super.oncreate(savedinstancestate);
  setcontentview(r.layout.activity_vedio);
  vv_main_vedio = (videoview) findviewbyid(r.id.vv_main_vedio);

  //给videoview设置播放来源
  vv_main_vedio.setvideopath("file://mnt/sdcard/movies/sister.mp4");

  //实例化媒体控制器
  mediacontroller mediacontroller=new mediacontroller(this);

  //给activity_vedio设置控制器
  vv_main_vedio.setmediacontroller(mediacontroller);

  mediacontroller.setmediaplayer(vv_main_vedio);

 }
}


Android多媒体之VideoView视频播放器

videoview通过与mediacontroller类结合使用,开发者可以不用自己控制播放与暂停。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

上一篇:

下一篇: