`

android 多媒体部分学习笔记十二----mediaplay自定义播放器

阅读更多

/**
*
* 自定义播放器
*
* @time 下午05:15:41
* @author retacn yue
* @Email zhenhuayue@sina.com
*/
public class CustomVidoePlayActivity extends Activity implements Callback,//
OnCompletionListener,//
OnErrorListener, //
OnInfoListener, //
OnPreparedListener, //
OnSeekCompleteListener,//
OnVideoSizeChangedListener,//
MediaPlayerControl {//
private SurfaceView myVideo;


private Display currentDisplay;
int videoW = 0;
int videoH = 0;
MediaPlayer mediaPlayer;
SurfaceHolder surfaceHolder;
MediaController mediaController;


@Override
public void onCreate(Bundle savedInstanceState) {
Log.i("tag", "onCreate()");
super.onCreate(savedInstanceState);
setContentView(R.layout.custom_videoplay);
findView();
init();
}


/**
* 初始化方法
*/
private void init() {
Log.i("tag", "init()");


String filePath = Environment.getExternalStorageDirectory().getPath() + "/kiss.mp4";
surfaceHolder = myVideo.getHolder();
surfaceHolder.addCallback(this);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
mediaPlayer = new MediaPlayer();


// 设置监听
mediaPlayer.setOnCompletionListener(this);
mediaPlayer.setOnErrorListener(this);
mediaPlayer.setOnInfoListener(this);
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.setOnSeekCompleteListener(this);
mediaPlayer.setOnVideoSizeChangedListener(this);


try {
mediaPlayer.setDataSource(filePath);
} catch (IllegalArgumentException e) {
Log.i("tag", "cach message: " + e.getMessage());
finish();
} catch (IllegalStateException e) {
Log.i("tag", "cach message: " + e.getMessage());
finish();
} catch (IOException e) {
Log.i("tag", "cach message: " + e.getMessage());
finish();
}
// 取得当前屏幕大小
currentDisplay = getWindowManager().getDefaultDisplay();


mediaController = new MediaController(this);
mediaController.setMediaPlayer(this);
mediaController.setAnchorView(this.findViewById(R.id.lay_main));
mediaController.setEnabled(true);



}


/**
* 实例化控件
*/
private void findView() {
Log.i("tag", "findView()");
myVideo = (SurfaceView) this.findViewById(R.id.sfv_show);
}


@Override
public boolean onTouchEvent(MotionEvent event) {
if (mediaController.isShowing()) {
mediaController.hide();
} else {
mediaController.show();
}


return false;
}


/****************************************************/
@Override
public void surfaceCreated(SurfaceHolder holder) {
Log.i("tag", "===surfaceCreated()===");
mediaPlayer.setDisplay(surfaceHolder);
try {
mediaPlayer.prepare();
} catch (IllegalStateException e) {
Log.i("tag", "mediaplay prepare: " + e.getMessage());
e.printStackTrace();
finish();
} catch (IOException e) {
Log.i("tag", "mediaplay parpare: " + e.getMessage());
e.printStackTrace();
finish();
}
}


@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
Log.i("tag", "===surfaceChanged()===");
}


@Override
public void surfaceDestroyed(SurfaceHolder holder) {
Log.i("tag", "===surfaceDestroyed()===");
}


/*******************************************************/
@Override
public void onCompletion(MediaPlayer mp) {
Log.i("tag", "===onCompletion()===");
finish();
}


@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
Log.i("tag", "===onError()===");
if (what == MediaPlayer.MEDIA_ERROR_SERVER_DIED) {
Log.i("tag", "Media Error,Server Died! " + extra);
} else if (what == MediaPlayer.MEDIA_ERROR_UNKNOWN) {
Log.i("tag", "Media Error, Unknow Error! " + extra);
}
return false;
}


@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
if (what == MediaPlayer.MEDIA_INFO_BAD_INTERLEAVING) {
Log.i("tag", "Media info,Media info bad interleaveing " + extra);
} else if (what == MediaPlayer.MEDIA_INFO_METADATA_UPDATE) {
Log.i("tag", "Media info,Media info metadata update " + extra);
} else if (what == MediaPlayer.MEDIA_INFO_NOT_SEEKABLE) {
Log.i("tag", "Media info,Media info not_seekable " + extra);
} else if (what == MediaPlayer.MEDIA_INFO_UNKNOWN) {
Log.i("tag", "Media info,Media info unknown " + extra);
} else if (what == MediaPlayer.MEDIA_INFO_VIDEO_TRACK_LAGGING) {
Log.i("tag", "Media info,Media info video track lagging " + extra);
}
return false;


}


@Override
public void onPrepared(MediaPlayer mp) {
// 取得播放器大小
videoH = mp.getVideoHeight();
videoW = mp.getVideoWidth();


if (videoH > currentDisplay.getHeight() || videoW > currentDisplay.getWidth()) {
// 缩放
float ratioH = (float) videoH / (float) currentDisplay.getHeight();
float ratioW = (float) videoW / (float) currentDisplay.getWidth();


if (ratioH > 1 || ratioW > 1) {
if (ratioH > ratioW) {
videoH = (int) Math.ceil((float) videoH / (float) ratioH);
videoW = (int) Math.ceil((float) videoW / (float) ratioW);


} else {


}
}
}
myVideo.setLayoutParams(new LinearLayout.LayoutParams(videoW, videoH));
mp.start();
//TODO
mediaController.show();
}


@Override
public void onSeekComplete(MediaPlayer mp) {
Log.i("tag", "===onSeekComplete()===");
}


@Override
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
Log.i("tag", "===onVideoSizeChanged()===");


}


/***********************************************/
@Override
public void start() {
mediaPlayer.start();
}


@Override
public void pause() {
if (mediaPlayer.isPlaying()) {
mediaPlayer.pause();
}
}


@Override
public int getDuration() {
return mediaPlayer.getDuration();
}


@Override
public int getCurrentPosition() {
return mediaPlayer.getCurrentPosition();
}


@Override
public void seekTo(int pos) {
mediaPlayer.seekTo(pos);
}


@Override
public boolean isPlaying() {
return mediaPlayer.isPlaying();
}


@Override
public int getBufferPercentage() {
return 0;
}


@Override
public boolean canPause() {
return true;
}


@Override
public boolean canSeekBackward() {
return true;
}


@Override
public boolean canSeekForward() {
return true;
}
}

分享到:
评论

相关推荐

    2021-2022收藏资料基于Android的多媒体播放器课程设计报告.doc

    ### 基于Android的多媒体播放器课程设计报告 #### 一、开发环境搭建 ##### 1.1 JDK安装 1. **安装JDK**: - 将所需安装文件放置于`Android_software`文件夹中。 - 安装`jdk-6u10-rc2-bin-b32-windows-i586-p-12...

    c# MediaPlay播放器源码

    《C# MediaPlay播放器源码解析与应用》 C# MediaPlay播放器是一款基于C#编程语言开发的多媒体播放...通过阅读和学习这个源码,开发者不仅可以了解多媒体播放器的工作原理,还能提升自己在C#和多媒体处理领域的技能。

    基于Android的多媒体播放器课程设计报告.pdf

    【Android多媒体播放器课程设计详解】 在Android平台上开发多媒体播放器是一项常见的课程设计任务,它涉及到Android系统的多个核心组件和技术。以下将详细讲解基于Android的多媒体播放器的开发环境搭建、功能实现...

    C#编写的播放器MediaPlay

    MediaPlay是一款由C#语言编写的播放器,对于初学者而言,它提供了一个很好的学习平台,帮助理解C#与多媒体处理的结合。本文将深入探讨MediaPlay的实现原理、关键功能及其对C#编程技术的运用。 1. C#基础与多媒体...

    毕业:基于android平台多媒体播放器的设计与实现(终稿汇编(完整版)资料.doc

    在本篇毕业论文《基于Android平台多媒体播放器的设计与实现》中,作者张浩深入探讨了如何在Android操作系统上构建一个功能丰富的多媒体播放器。本文将重点解析Android体系结构、多媒体播放器的功能设计以及实现过程...

    自定义mediaplay

    标题中的“自定义mediaplay”指的是在Android开发中,开发者根据特定需求,自定义实现一个媒体播放器(MediaPlayer)的过程。通常,Android系统提供了一个内置的MediaPlayer类,用于播放音频和视频文件,但它的功能...

    基于android的多媒体播放器课程设计报告.pdf

    ### 基于Android的多媒体播放器课程设计报告知识点概览 #### 1. 开发环境搭建 **1.1 JDK 安装** - **安装准备**:将所需的所有安装文件放置在一个统一的文件夹中,例如命名为`Android_software`。 - **JDK安装...

    MediaPlay(播放器)

    MediaPlay是一款基于C#开发的简单播放器,它利用了COM组件来实现多媒体文件的播放功能。在本文中,我们将深入探讨MediaPlay的核心知识点,包括C#编程语言、COM组件的使用以及媒体播放技术。 首先,C#是Microsoft...

    Android MediaPlayer 自定义循环次数

    在Android开发中,MediaPlayer是处理音频和视频播放的核心类之一,它提供了丰富的API来控制多媒体文件的播放。本文将深入探讨如何使用MediaPlayer自定义循环播放的次数,这在需要重复播放特定音频片段的应用场景中...

    自定义mp4播放器

    在Android开发中,创建一个自定义的MP4播放器是一个常见的需求,这涉及到多媒体处理、UI设计以及系统级服务的交互。"mediaplay"标签表明我们关注的是媒体播放相关的功能实现。以下将详细讲解如何在Android中实现一个...

    c#mediaplay播放器.rar

    在C#编程领域,构建媒体播放器是一项常见的任务,这涉及到多媒体处理和用户界面设计。本篇文章将深入探讨如何利用C#创建一个功能完善的媒体播放器,主要涉及的知识点包括:C#基础、Windows Forms、MediaPlayer类以及...

    mediaplay js

    根据提供的文件信息,我们可以归纳出一系列与 `mediaplay js` 相关的知识点,主要集中在使用 JavaScript 来控制多媒体播放器的操作上。下面将详细解释这些知识点。 ### 1. 使用JavaScript操作多媒体播放器 #### ...

    Android MediaPlay的使用以及实现音频播放器

    一、MediaPlay状态机详解(MediaPlay的生命周期) MediaPlayer状态机如下图所示 3、在AndroidManifest.xml中添加权限 android:requestLegacyExternalStorage=true public class PermissionsManagement { ...

    Android--MediaPlayDemo

    在Android平台上,开发一款音乐播放器是常见的应用场景。"Android--...通过学习和实践这个Demo,开发者可以深入理解Android多媒体播放的核心概念,并为进一步开发复杂功能如播放列表、歌曲搜索等打下基础。

    音乐播放器mediaplay

    MediPlay是一款基于Bass.dll和MediaInfo.dll库的自定义音乐播放器,旨在提供高效、功能丰富的音频播放体验。在这款应用中,Bass.dll和MediaInfo.dll是两个至关重要的组件,它们各自承担着不同的核心功能。 Bass.dll...

    WinCE下MediaPlay播放实验

    MediaPlay是其内置的多媒体播放器,支持多种媒体格式,包括音频和视频,使得在WinCE设备上播放多媒体内容成为可能。 2. **MP3格式**: MP3是一种广泛使用的数字音频编码格式,以其高质量和相对较小的文件大小而...

    MP3播放器-Delphi代码

    MP3播放器, Delphi代码 (1)API,左右声道的控制都使WindowsAPI的调用。 (2)Delphi的Mediaplay控件的调用 (3)MMSystem接口的引用. (4)OpenDialog打开文件. (5)利用配置文件进行文件信息的列表保存. (6)TrackBar使用,...

    android 音频处理mediaplay介绍

    Android 音频处理 mediaplay 介绍 Android 音频处理中,mediaplay 是一个非常重要的组件,负责音频的播放和处理。在 Android 系统中,由于只有一个音频输出,而可能有多个媒体想要使用它,这对使用音频的应用带来了...

    Android代码-基于IjkPlayer的视频播放器,支持一行代码切换MediaPlayer和ExoPlayer

    首先,IjkPlayer是一款开源的跨平台多媒体框架,它基于FFmpeg库,为Android提供了强大的视频解码能力。IjkPlayer不仅支持多种视频格式,如MP4、FLV、RTSP、RTMP等,还具有低延迟、高稳定性的优点。在Android项目中...

    MFC编写基于MediaPlay ActiveX控件的播放器(界面已美化)

    在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC) 框架来构建一个基于MediaPlay ActiveX控件的播放器,并对其进行界面美化。这个项目已经实现了基本的播放功能,包括透明效果和置顶操作,对于初学...

Global site tag (gtag.js) - Google Analytics