- 浏览: 249295 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (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 6951 使用内置的camera应用程序捕获图像 /*** ... -
android多媒体学习笔记二
2012-09-04 10:53 777实现SurfaceHolder.Callback ,P ... -
android多媒体学习笔记三___图像合成
2012-09-05 11:36 593/** * 图像合成 * * @time 下午06:21 ... -
android多媒体部分学习笔记四___ Matrix
2012-09-05 11:40 687/*** 图像的缩放和旋转 Matrix** 1 0 0 x= ... -
android多媒体部分学习笔记五----audio
2012-09-08 16:08 681/*** 打开内置音乐播放器*/private void ge ... -
android多媒体部分学习笔记六----音频录制 mediaRecorder
2012-09-08 16:12 635/** * * 使用意图捕获音频 * * @time ... -
android多媒体部分学习笔记七------音频录制 mediaRecorder
2012-09-08 16:13 717/** * 自定义捕获音频 * * @time 下午12 ... -
android多媒体部分学习笔记八------音频录制 mediaRecorder
2012-09-08 16:14 732/** * 原始音频的播放和录制 * * audio ... -
android 多媒体部分学习笔记九----数字音频合成
2012-09-09 12:43 802/** * 数字音频合成 * * @time 下午12: ... -
android 多媒体部分学习笔记十 可视化频率(频谱)
2012-09-09 23:43 3180/** * 可视化频率 * * @time 下午12 ... -
android 多媒体部分学习笔记十--简单视频播放
2012-09-10 17:53 724/** * 简单播放 * * @time 下午05:15 ... -
android 多媒体部分学习笔记十三----mediaStore 检索视频
2012-09-12 00:12 981/** * mediaStore检索视频 * * @ti ... -
android 多媒体部分学习十四---网络视频播放(http/rtsp)
2012-09-12 14:36 1813/** * 网络视频播放 * * openCore * ... -
android 多媒体部分学习笔记十五-----视频录制
2012-09-12 15:02 714/** * 调用系统视频录制 * * @time 下午0 ...
相关推荐
Android自定义播放器mediaplay
c# MediaPlay 播放器 仿MediaPlay 支持mp3,wma,avi等多种格式
自定义mediaplay
c#mediaplay播放器.rar
Android MediaPlayer 自定义循环次数
C#编写的播放器MediaPlay,初学者可以看看
android视频播放器实例源码,用sufferview和mediaplay实现,不是用android自带的videoview
一、MediaPlay状态机详解(MediaPlay的生命周期) MediaPlayer状态机如下图所示 3、在AndroidManifest.xml中添加权限 android:requestLegacyExternalStorage=true public class PermissionsManagement { ...
用C#做的一个MediaPlay,应用了com组件,里面就几行代码,分享一下~
这个是使用原生Mediaplay的代码,代码很简单,就是为了验证MeidaPlay是否正常工作。
MP3播放器, Delphi代码 (1)API,左右声道的控制都使WindowsAPI的调用。 (2)Delphi的Mediaplay控件的调用 (3)MMSystem接口的引用. (4)OpenDialog打开文件. (5)利用配置文件进行文件信息的列表保存. (6)TrackBar使用,...
Vitamio_IJKPlay_MediaPlay 可播放在线视频,本地视频,直播,切换画面比例,软硬解码切换,支持安卓手机,盒子播放,播放器截图. Demo目前还不完善,但功能都有,后续会补上 新增列表小窗口播放可拖拽移动(2016,11...
简单的Android音乐播放器 没有Service,只是单纯的 播放存在的音乐文件 有播放,暂停,重播,停止功能 播放时单击暂停按钮, 文字会变成继续 一个简单的Demo,供大家相互探讨学习
mediaplay-discord.github.io 这是MediaPlay Discord的网站源代码,可以通过在此存储库中发出请求请求随时进行任何改进(例如语法错误,错别字,错误问题等)! 该网站仍在开发中,期望所有功能都将丢失! 单击以...
Android中 MediaPlayer的使用案例,一个简答的音乐播放器,重点在于MediaPlayer的玩法
Android代码-基于IjkPlayer的视频播放器,支持一行代码切换MediaPlayer和ExoPlayer
一个基于bass.dll和mediainfo.dll而自制的音乐播放器。
尽管某个时刻只有一个activity可以运行,Android却是一个多任务环境.这对使用音频的应用带来了特殊的挑战,因为只有一个音频输出而可能多个媒体都想用它.
mediaplay js classid="CLSID:22d6f312-b0f6-11d0-94ab-0080c74c7e95
wince下的多媒体播放器界面,实现了大部分按钮界面,包括最小化到托盘、音量调整等等。(注意只是实现了界面,不能真正的媒体文件播放)。可在模拟器下运行。有点闪屏没解决。