- 浏览: 263112 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (303)
- c (31)
- c++ (16)
- java (18)
- c# (1)
- python (3)
- java web (6)
- oracle (7)
- sqlserver (2)
- mysql (2)
- android (24)
- android系统 (15)
- android多媒体部分 (15)
- android游戏 (12)
- linux (26)
- javaScript (1)
- ajax (1)
- node JS (2)
- html (5)
- apache (3)
- jboss (1)
- weblogic (0)
- 通信协议 (10)
- 云计算 (1)
- 分布式 (5)
- ejb (1)
- webservice (5)
- 设计模式 (16)
- JNI (6)
- swing (13)
- 版本控制 (1)
- UML (1)
- xml (4)
- spring (5)
- hibernate (5)
- struts1 (3)
- struts2 (4)
- ibatis (0)
- tomcat (2)
- 心得体会 (1)
- css (1)
- 嵌入式 (41)
- arm体系结构 (10)
/**
*
* 自定义播放器
*
* @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;
}
}
发表评论
-
android多媒体学习笔记一
2012-09-04 10:47 7301 使用内置的camera应用程序捕获图像 /*** ... -
android多媒体学习笔记二
2012-09-04 10:53 821实现SurfaceHolder.Callback ,P ... -
android多媒体学习笔记三___图像合成
2012-09-05 11:36 631/** * 图像合成 * * @time 下午06:21 ... -
android多媒体部分学习笔记四___ Matrix
2012-09-05 11:40 736/*** 图像的缩放和旋转 Matrix** 1 0 0 x= ... -
android多媒体部分学习笔记五----audio
2012-09-08 16:08 726/*** 打开内置音乐播放器*/private void ge ... -
android多媒体部分学习笔记六----音频录制 mediaRecorder
2012-09-08 16:12 691/** * * 使用意图捕获音频 * * @time ... -
android多媒体部分学习笔记七------音频录制 mediaRecorder
2012-09-08 16:13 770/** * 自定义捕获音频 * * @time 下午12 ... -
android多媒体部分学习笔记八------音频录制 mediaRecorder
2012-09-08 16:14 788/** * 原始音频的播放和录制 * * audio ... -
android 多媒体部分学习笔记九----数字音频合成
2012-09-09 12:43 885/** * 数字音频合成 * * @time 下午12: ... -
android 多媒体部分学习笔记十 可视化频率(频谱)
2012-09-09 23:43 3245/** * 可视化频率 * * @time 下午12 ... -
android 多媒体部分学习笔记十--简单视频播放
2012-09-10 17:53 780/** * 简单播放 * * @time 下午05:15 ... -
android 多媒体部分学习笔记十三----mediaStore 检索视频
2012-09-12 00:12 1039/** * mediaStore检索视频 * * @ti ... -
android 多媒体部分学习十四---网络视频播放(http/rtsp)
2012-09-12 14:36 1849/** * 网络视频播放 * * openCore * ... -
android 多媒体部分学习笔记十五-----视频录制
2012-09-12 15:02 789/** * 调用系统视频录制 * * @time 下午0 ...
相关推荐
### 基于Android的多媒体播放器课程设计报告 #### 一、开发环境搭建 ##### 1.1 JDK安装 1. **安装JDK**: - 将所需安装文件放置于`Android_software`文件夹中。 - 安装`jdk-6u10-rc2-bin-b32-windows-i586-p-12...
《C# MediaPlay播放器源码解析与应用》 C# MediaPlay播放器是一款基于C#编程语言开发的多媒体播放...通过阅读和学习这个源码,开发者不仅可以了解多媒体播放器的工作原理,还能提升自己在C#和多媒体处理领域的技能。
【Android多媒体播放器课程设计详解】 在Android平台上开发多媒体播放器是一项常见的课程设计任务,它涉及到Android系统的多个核心组件和技术。以下将详细讲解基于Android的多媒体播放器的开发环境搭建、功能实现...
MediaPlay是一款由C#语言编写的播放器,对于初学者而言,它提供了一个很好的学习平台,帮助理解C#与多媒体处理的结合。本文将深入探讨MediaPlay的实现原理、关键功能及其对C#编程技术的运用。 1. C#基础与多媒体...
在本篇毕业论文《基于Android平台多媒体播放器的设计与实现》中,作者张浩深入探讨了如何在Android操作系统上构建一个功能丰富的多媒体播放器。本文将重点解析Android体系结构、多媒体播放器的功能设计以及实现过程...
标题中的“自定义mediaplay”指的是在Android开发中,开发者根据特定需求,自定义实现一个媒体播放器(MediaPlayer)的过程。通常,Android系统提供了一个内置的MediaPlayer类,用于播放音频和视频文件,但它的功能...
### 基于Android的多媒体播放器课程设计报告知识点概览 #### 1. 开发环境搭建 **1.1 JDK 安装** - **安装准备**:将所需的所有安装文件放置在一个统一的文件夹中,例如命名为`Android_software`。 - **JDK安装...
MediaPlay是一款基于C#开发的简单播放器,它利用了COM组件来实现多媒体文件的播放功能。在本文中,我们将深入探讨MediaPlay的核心知识点,包括C#编程语言、COM组件的使用以及媒体播放技术。 首先,C#是Microsoft...
在Android开发中,MediaPlayer是处理音频和视频播放的核心类之一,它提供了丰富的API来控制多媒体文件的播放。本文将深入探讨如何使用MediaPlayer自定义循环播放的次数,这在需要重复播放特定音频片段的应用场景中...
在Android开发中,创建一个自定义的MP4播放器是一个常见的需求,这涉及到多媒体处理、UI设计以及系统级服务的交互。"mediaplay"标签表明我们关注的是媒体播放相关的功能实现。以下将详细讲解如何在Android中实现一个...
在C#编程领域,构建媒体播放器是一项常见的任务,这涉及到多媒体处理和用户界面设计。本篇文章将深入探讨如何利用C#创建一个功能完善的媒体播放器,主要涉及的知识点包括:C#基础、Windows Forms、MediaPlayer类以及...
根据提供的文件信息,我们可以归纳出一系列与 `mediaplay js` 相关的知识点,主要集中在使用 JavaScript 来控制多媒体播放器的操作上。下面将详细解释这些知识点。 ### 1. 使用JavaScript操作多媒体播放器 #### ...
一、MediaPlay状态机详解(MediaPlay的生命周期) MediaPlayer状态机如下图所示 3、在AndroidManifest.xml中添加权限 android:requestLegacyExternalStorage=true public class PermissionsManagement { ...
在Android平台上,开发一款音乐播放器是常见的应用场景。"Android--...通过学习和实践这个Demo,开发者可以深入理解Android多媒体播放的核心概念,并为进一步开发复杂功能如播放列表、歌曲搜索等打下基础。
MediPlay是一款基于Bass.dll和MediaInfo.dll库的自定义音乐播放器,旨在提供高效、功能丰富的音频播放体验。在这款应用中,Bass.dll和MediaInfo.dll是两个至关重要的组件,它们各自承担着不同的核心功能。 Bass.dll...
MediaPlay是其内置的多媒体播放器,支持多种媒体格式,包括音频和视频,使得在WinCE设备上播放多媒体内容成为可能。 2. **MP3格式**: MP3是一种广泛使用的数字音频编码格式,以其高质量和相对较小的文件大小而...
MP3播放器, Delphi代码 (1)API,左右声道的控制都使WindowsAPI的调用。 (2)Delphi的Mediaplay控件的调用 (3)MMSystem接口的引用. (4)OpenDialog打开文件. (5)利用配置文件进行文件信息的列表保存. (6)TrackBar使用,...
Android 音频处理 mediaplay 介绍 Android 音频处理中,mediaplay 是一个非常重要的组件,负责音频的播放和处理。在 Android 系统中,由于只有一个音频输出,而可能有多个媒体想要使用它,这对使用音频的应用带来了...
首先,IjkPlayer是一款开源的跨平台多媒体框架,它基于FFmpeg库,为Android提供了强大的视频解码能力。IjkPlayer不仅支持多种视频格式,如MP4、FLV、RTSP、RTMP等,还具有低延迟、高稳定性的优点。在Android项目中...
在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC) 框架来构建一个基于MediaPlay ActiveX控件的播放器,并对其进行界面美化。这个项目已经实现了基本的播放功能,包括透明效果和置顶操作,对于初学...