package com.itheima.videoplayer;

import java.io.IOException;

import android.media.MediaPlayer;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView; public class MainActivity extends Activity {
private MediaPlayer player;//只能播放MP4和3gp格式视频
static int currentPosition;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);//SurfaceView标签要先显示在页面才能使用,因此要另外开启一个线程睡一会让布局生成了再去使用SurfaceView对象。
SurfaceView sv = (SurfaceView) findViewById(R.id.sv);//视频播放画面
//拿到surfaceview的控制器
final SurfaceHolder sh = sv.getHolder();
// Thread t = new Thread(){
// @Override
// public void run() {
// try {
// sleep(200); //200毫秒不能写死
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// runOnUiThread(new Runnable() { //在主线程去执行
// @Override
// public void run() {
// MediaPlayer player = new MediaPlayer();
// player.reset();
// try {
// player.setDataSource("sdcard/2.3gp");
// player.setDisplay(sh);
// player.prepare();
// player.start();
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
// });
// }
// };
// t.start();
sh.addCallback(new Callback() {
//surfaceView销毁时调用
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
//每次surfaceview销毁时,同时停止播放视频
if(player != null){
currentPosition = player.getCurrentPosition();
player.stop();
player.release();
player = null;
}
}
//surfaceView创建时调用surfaceView可见时调用
@Override
public void surfaceCreated(SurfaceHolder holder) {
//每次surfaceView创建时才去播放视频
if(player == null){
player = new MediaPlayer();
player.reset();
try {
player.setDataSource("sdcard/2.3gp");
player.setDisplay(sh);
player.prepare();
player.start();
player.seekTo(currentPosition);
} catch (Exception e) {
e.printStackTrace();
}
}
}
//surfaceView结构改变时调用
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
}
});
}
}
/*页面:
<SurfaceView
android:id="@+id/sv"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
---
#视频播放器
##SurfaceView
* 对画面的实时更新要求较高
* 双缓冲技术:内存中有两个画布,A画布显示至屏幕,B画布在内存中绘制下一帧画面,绘制完毕后B显示至屏幕,A在内存中继续绘制下一帧画面
* 播放视频也是用MediaPlayer,不过跟音频不同,要设置显示在哪个SurfaceView
*/

vitamio播放视频:

package com.itheima.videoview;

import io.vov.vitamio.LibsChecker;
import io.vov.vitamio.widget.MediaController;
import io.vov.vitamio.widget.VideoView;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//检测是否支持vitamio,没有安装就安装
if (!LibsChecker.checkVitamioLibs(this)) {return;}
VideoView vv = (VideoView) findViewById(R.id.vv);
vv.setVideoPath("sdcard/4.rmvb");
vv.start();
vv.setMediaController(new MediaController(this));//视频播放控制器
}
}
/*
###SurfaceView
* 双缓冲技术
* 重量级组件(占用资源多)
* 只要不可见,就不会创建,可见时,才会创建
* 只要不可见,就会销毁
### FFMPEG
* 开源免费的音视频编解码器,用C语言开发。
### Vitamio
* 封装了FFMPEG的视频播放框架
* 对外提供的api全部都是javaApi*/
/*<io.vov.vitamio.widget.VideoView
android:id="@+id/vv"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>*/
//清单文件:<activity android:name="io.vov.vitamio.activity.InitActivity"></activity>

android 98 MediaPlayer+SurfaceView播放视频的更多相关文章

  1. 使用MediaPlayer和SurfaceView播放视频

    使用VideoView播放视频简单.方便,丹有些早期的开发者更喜欢使用MediaPlayer来播放视频,但由于MediaPlayer主要用于播放音频,因此它没有提供图像输出界面,此时 需要借助于Sur ...

  2. android中使用MediaPlayer和SurfaceView播放视频

    package com.test.video; import java.io.IOException; import android.media.AudioManager; import androi ...

  3. Android MediaPlayer和SurfaceView播放视频

    昨天介绍了VideoView播放视频,今天再介绍一种播放视频的方法MediaPlayer和SurfaceView,MediaPlayer播放音频,SurfaceView来显示图像,具体步骤如下: 1. ...

  4. 运用surfaceView与MediaPlayer实现播放视频的功能

    该程序运用了surfaceView与MediaPlayer结合,实现播放视频,surfaceView详情请见 SurfaceView的使用 使用了第三方包Volly里面的方法StringQueue下载 ...

  5. MediaPlayer类——播放视频和音乐

    1)如何获得MediaPlayer实例: 可以使用直接new的方式: MediaPlayer mp = new MediaPlayer(); 也可以使用create的方式,如: MediaPlayer ...

  6. android中使用setVideoURI()播放视频

    最近在做一个demo,要求播放视频,记录一下.使用的是VideoView控件,如果播放网络视频的话,视频应该是渐进流式的,格式嘛,大家应该都知道,一般是H.263或者H.264格式的扩展名为3gp或者 ...

  7. [Xcode 实际操作]六、媒体与动画-(17)使用MediaPlayer框架播放视频

    目录:[Swift]Xcode实际操作 本文将演示视频的播放功能. 在项目名称上点击鼠标右键,弹出右键菜单, 选择[Add Files to "DemoApp"],往项目中导入文件 ...

  8. Android SurfaceView播放视频时横竖屏的调整

    对于横屏录制的视频就横屏播放,对于竖屏录制的视频就竖屏播放. 在mainifest文件里对负责播放的Activity添加以下属性“ android:configChanges="orient ...

  9. Android中使用VideoView 播放视频

    VideoView一般结合MediaController类使用,它会提供一个友好的图形界面,通过该界面可以控制视频的播放 package com.test.videoview; import andr ...

随机推荐

  1. asp.net将sql语句封装在类库中

    将sql语句封装在cs中,通过类库的引用使用他的select.update.insert 源代码(cs): using System; using System.Collections.Generic ...

  2. 丢手帕问题(环形链表)---Java 待优化

    /** * * @author Administrator * 功能:丢手帕问题 */ package com.litao; public class Demo4 { /** * @param arg ...

  3. LinuxShell_variable+if+while

    [root@ossec-server mybash]# vim ./hello.sh #! /bin/sh # This is a example bash script echo "Hel ...

  4. Android EditText如何去除边框添加下划线

    (一)问题 之前的自定义EditText只能显示高度不超过屏幕高度的文本内容,继续增加内容会出现如下问题: (二)原因分析 下部(超出屏幕高度的部分)没有继续画线,也就是说横线没有画够,那么一定是循环 ...

  5. Android 动态背景的实现以及SurfaceView中添加EditText控件

    首先还是一贯作风,我们先看案例: \ 静态图看不出来效果,如果用过此软件(扎客)的同学们都知道,她的背景会动.怎么样,是不是觉得很时尚,起码比静态的要好(个人观点).其实实现起来并不复杂,这个如果让做 ...

  6. 百万程序员的苦恼-选择VB.NET还是C#

    在过去的一年中,互联网上的各大讨论区或者电子邮件的讨论列表都对微软的VB.NET以及C#的各种优越性做了探讨.这些讨论围绕的主要问题就是,我应该先学哪一个,VB.NET还是C#?? 我写这篇文章的目的 ...

  7. Asp.net性能优化技巧

    [摘 要] 我只是提供我几个我认为有助于提高写高性能的asp.net应用程序的技巧,本文提到的提高asp.net性能的技巧只是一个起步,更多的信息请参考<Improving ASP.NET Pe ...

  8. Android 开发性能优化之SparseArray(三)

    SparseArray是android里为<Interger,Object>这样的Hashmap而专门写的class,目的是提高效率,其核心是折半查找函数(binarySearch) pr ...

  9. HDU-1240 Asteroids! (BFS)这里是一个三维空间,用一个6*3二维数组储存6个不同方向

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission ...

  10. 查看ssh服务开启状态

    root@dbaudit-desktop:/etc/init.d# /etc/init.d/ssh status * sshd is running 或者这样检查:root@dbaudit-deskt ...