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做个视频播放器好难,虽然播放上没问题,但暂停还有通过拖动进度条来设置播放进度,这些都 ...
随机推荐
- github 的分支操作
首先需要当前目录设置为仓库目录 一.创建本地分支 1.查看有哪些分支:git branch 2.创建一个分支:git branch name ,其中name是分支名 3.切换到分支:git chec ...
- 在Android Studio中使用Gradle方便地修改包名
情景: 主Module引用了多个module,在代码使用R.xx.xx的时候,会import 当前包名.R.而由于需要上架Play做测试,可是目前的包名已经被使用了,所以需要修改包名. 正确使用bui ...
- 【水一发next_permutation】poj 1146——ID Codesm
来源:点击打开链接 求字典序下一位,没有直接输出没有.全排列函数秒水过. #include <iostream> #include <algorithm> #include & ...
- oracle 中的select ...connect by prior ...start with 及(+)的用法
1.select ...connect by prior ...start with的用法: select ... from <tablename> where <condition ...
- 框架技术--Spring自动加载配置
今天项目中遇到一个问题,一个方法在服务启动后会自动被执行,查看了下配置未发现有定时的配置.但是后来发现是spring配置了启动时默认加载了方法. 代码: <?xml version=" ...
- poj2342 Anniversary party【树形dp】
转载请注明出处,谢谢:http://www.cnblogs.com/KirisameMarisa/p/4316097.html ---by 墨染之樱花 [题目链接]http://poj.org/p ...
- openstack之网络基础
L1:物理层L2:数据链路层,基于mac地址的通信,通过交换机连接:对等传输,即交换机上的一个主机发一个包,连接在该交换机上的所有机器都能收到:L3:网络层,基于ip地址,路由器设备,连接不同网段,进 ...
- 用Aspose.Cells控件读取Excel
Aspose是一个很强大的控件,可以用来操作word,excel,ppt等文件,用这个控件来导入.导出数据非常方便.其中Aspose.Cells就是用来操作Excel的,功能有很多.我所用的是最基本的 ...
- DevExpress ASP.NET 使用经验谈(4)-CriteriaOperator的使用
上一节中,我们已经介绍了,使用CriteriaOperator表达式,获取对象数据. CriteriaOperator criteria = CriteriaOperator.Parse(" ...
- 获取图片中的文本--MODI
http://www.aspsnippets.com/Articles/Read-Extract-Text-from-Image-OCR-in-ASPNet-using-C-and-VBNet.asp ...