MediaPlayer视频播放器
android视频播放 根据apidemo重写。代码如下:
package com.jamdeo.tv.livetv.player; import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnBufferingUpdateListener;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.media.MediaPlayer.OnVideoSizeChangedListener;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView; public class MyPlayer extends MediaPlayer implements
OnBufferingUpdateListener, OnCompletionListener,
OnPreparedListener, OnVideoSizeChangedListener {
public static final MyPlayer mPlayer = new MyPlayer();
private SurfaceHolder mHolder;
private SurfaceView mSurfaceView;
private boolean mIsVideoSizeKnown = false;
private boolean mIsVideoReadyToBePlayed = false;
private static final String TAG = "MyPlayer";
private int mVideoWidth;
private int mVideoHeight;
private String mCurrentPath;
private String mPreviousPath;
private MyPlayer(){ } public static MyPlayer getInstance(){
return mPlayer;
} private void init(){
mPlayer.setOnBufferingUpdateListener(this);
mPlayer.setOnCompletionListener(this);
mPlayer.setOnPreparedListener(this);
mPlayer.setOnVideoSizeChangedListener(this);
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
} public void setSurfaceView(SurfaceView _surfaceView){
init();
this.mSurfaceView = _surfaceView;
this.mHolder = this.mSurfaceView.getHolder();
//此方法请在setDataSource(..)之前调用,我起初就在setDataSource(...)方法后调用导致显示界面偏移
mPlayer.setDisplay(this.mHolder);
} public void setPath(String _path){
this.mPreviousPath = this.mCurrentPath;
this.mCurrentPath = _path;
if(this.mCurrentPath.equals(this.mPreviousPath)){
return;
}else{
PlayVideo();
}
Log.d(TAG, "previous: " + this.mPreviousPath + "current: "+mCurrentPath);
}
public void PlayVideo(){
try {
Log.d(TAG, "previous: " + this.mPreviousPath + "current: "+mCurrentPath);
doCleanUp();
mPlayer.reset();
mPlayer.setDataSource(mCurrentPath);
mPlayer.prepareAsync(); } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} @Override
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
Log.v(TAG, "onVideoSizeChanged called");
if (width == 0 || height == 0) {
Log.e(TAG, "invalid video width(" + width + ") or height(" + height + ")");
return;
}
mIsVideoSizeKnown = true;
mVideoWidth = width;
mVideoHeight = height;
if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
startVideoPlayback();
} } @Override
public void onPrepared(MediaPlayer mp) {
Log.d(TAG, "onPrepared called");
mIsVideoReadyToBePlayed = true;
if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown) {
startVideoPlayback();
} } @Override
public void onCompletion(MediaPlayer mp) {
Log.d(TAG, "onCompletion called"); } @Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
Log.d(TAG, "onBufferingUpdate percent:" + percent); } private void releaseMediaPlayer() {
if (mPlayer != null) {
mPlayer.release();
}
} private void doCleanUp() {
mVideoWidth = 0;
mVideoHeight = 0;
mIsVideoReadyToBePlayed = false;
mIsVideoSizeKnown = false;
} private void startVideoPlayback() {
Log.v(TAG, "startVideoPlayback");
Log.d(TAG, "size: "+mVideoWidth +" x "+ mVideoHeight);
mHolder.setFixedSize(mVideoWidth, mVideoHeight);
mPlayer.start();
} }
在外部使用的时候只需要传一个SurfaceView进去然后setPath(String url),就可以直接播放了。
MediaPlayer视频播放器的更多相关文章
- 【Android 多媒体开发】 MediaPlayer 网络视频播放器
作者 : 万境绝尘 (octopus_truth@163.com) 转载请著名出处 : http://blog.csdn.net/shulianghan/article/details/3889514 ...
- Android 视频播放器 (二):使用MediaPlayer播放视频
在 Android 视频播放器 (一):使用VideoView播放视频 我们讲了一下如何使用VideoView播放视频,了解了基本的播放器的一些知识和内容.也知道VideoView内部封装的就是Med ...
- android视频播放器
RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和RealNetworks公司提交的 ...
- 项目源码--IOS自定义视频播放器
下载源码 技术要点: 1. 视频播放器功能的实现 2. 视频文件的扫描与管理 3. Ipad UI的实现 4.源码详细的中文注释 ……. 详细介绍: 1. 视频播放器功能的实现 源码基于MediaPl ...
- 网页中插入Flvplayer视频播放器代码
http://blog.csdn.net/china_skag/article/details/7424019 原地址:http://yuweiqiang.blog.163.com/blog/stat ...
- flvplayer.swf flv视频播放器使用方法
今天由于网页上要加入一个视频文件,就研究了一下flv视频播放器flvplayer.swf : 关于SewisePlayer 插件 演示例子链接 一.直接在html文件中加载: &l ...
- Android开发学习之路--基于vitamio的视频播放器(二)
终于把该忙的事情都忙得差不多了,接下来又可以开始good good study,day day up了.在Android开发学习之路–基于vitamio的视频播放器(一)中,主要讲了播放器的界面的 ...
- 22_Android中的本地音乐播放器和网络音乐播放器的编写,本地视频播放器和网络视频播放器,照相机案例,偷拍案例实现
1 编写以下案例: 当点击了"播放"之后,在手机上的/mnt/sdcard2/natural.mp3就会播放. 2 编写布局文件activity_main.xml <Line ...
- Android 音视频深入 十九 使用ijkplayer做个视频播放器(附源码下载)
项目地址https://github.com/979451341/Myijkplayer 前段时候我觉得FFmpeg做个视频播放器好难,虽然播放上没问题,但暂停还有通过拖动进度条来设置播放进度,这些都 ...
随机推荐
- android studio 快捷笔记
setting->editor->打勾 ctrl+Q ctrl+tab alt+回车 ctrl+shift+回车
- 偶然碰到的Win7 64位下CHM 的问题解决
最近下了几个沪江资料,都是chm格式的,但是在win7 64位下,都显示不了里面的音频和视频flash之类的控件,虽然可以通过源文件的方式打开视频文件,但是很麻烦. 网上似乎碰到的人也不是很多, ...
- C++设计模式实现--组合(Composite)模式
一. 举例 这个样例是书上的,如果有一个公司的组结结构例如以下: 它的结构非常像一棵树,当中人力资源部和財务部是没有子结点的,详细公司才有子结点. 并且最关健的是,它的每一层结构非常相似. 代码实现例 ...
- js 解析XML 在Edge浏览器下面 无法准确读到节点属性值
js 解析XML 在Edge浏览器下面 无法准确读到节点属性值 Dom.documentElement.childNodes[j].attributes[2] 这个是大众写法 在win10的edge ...
- ASP.NET页面传值方式
http://www.cnblogs.com/zhangkai2237/archive/2012/05/06/2486462.html http://www.cnblogs.com/xiaoyusmi ...
- LinkNode 温度报警器视频(2016-05-15)
文档就不发了,申请的时候说要官方首发,所以半个月后,这里就只上一个视频表表心意.
- 在SAE上搭建自定义版本WordPress, 并用SAE Storage代替WordPress Uploads
问题由来: 1. SAE中默认的WP for SAE版本太低, 导致某些基于新版本WordPress的插件不能使用. 2. SAE中单个APP的代码空间仅有100M. 将WordPress中uploa ...
- bootstrap基础知识
Bootstrap是Twitter推出的一款简洁.直观.强悍的前端开发框架. Bootstrap基于 HTML.CSS.JAVASCRIPT.它由Twitter的设计师Mark Otto和Jacob ...
- cocos2d-x游戏开发系列教程-超级玛丽05-CMMenuScene
代码下载链接 http://download.csdn.net/detail/yincheng01/6864893 解压密码:c.itcast.cn 背景 上一篇博文提到appDelegate,在该类 ...
- mysql 添加[取消]timestamp的自动更新
创建自动更新的 timestamp (插入或修改时 uptime都会自动更新) CREATE TABLE `hello` (`id` int(11) NOT NULL,`uptime` timesta ...