首页 技术 正文
技术 2022年11月20日
0 收藏 494 点赞 4,560 浏览 3040 个字
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>
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,992
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,506
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,349
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,134
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,767
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,844