Android中使用SurfaceView视频播放器
来源:互联网 发布:淘宝卖微信号违法吗 编辑:程序博客网 时间:2024/05/17 04:54
- public class PlayerVideoActivity extends Activity {
- // SurfaceView控件
- private SurfaceView sv_video;
- private SurfaceHolder surfaceHolder;
- // 播放视频对象
- private MediaPlayer mediaPlayer;
- private String path;
- private boolean PasueFlag = false;
- // 记录暂停播放的位置
- private int currentPosition = 0;
- // 播放按钮的控件
- private LinearLayout video_layout;
- //声明一个回放的记录位置
- private int backPosition = 0;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_video);
- // 获取SurfaceView控件
- sv_video = (SurfaceView) findViewById(R.id.sv_video);
- // 通过控件来获取SurfaceHolder
- surfaceHolder = sv_video.getHolder();
- // 回调函数
- surfaceHolder.addCallback(new SurfaceHolder.Callback() {
- // surfaceView控件被销毁的方法
- @Override
- public void surfaceDestroyed(SurfaceHolder holder) {
- // 当点击后退按钮 就杀死 surfaceView控件 activity被杀死
- //记录视频所播放的位置
- int position = mediaPlayer.getCurrentPosition();
- mediaPlayer.release();
- mediaPlayer = null;
- //声明意图对象
- Intent data = new Intent();
- data.putExtra("position",position);
- PlayerVideoActivity.this.setResult(RESULT_OK, data);
- //当前kill
- PlayerVideoActivity.this.finish();
- }
- // surfaceView创建的时候执行的方法
- @Override
- public void surfaceCreated(SurfaceHolder holder) {
- // 当第一次使用SurfaceView的时候 播放视频
- play();
- }
- // surfaceView发生变化执行的操作
- @Override
- public void surfaceChanged(SurfaceHolder holder, int format,
- int width, int height) {
- }
- });
- // 在这里怎么获取intent传递的数据
- path = this.getIntent().getStringExtra("path");
- backPosition = this.getIntent().getIntExtra("position", 0);
- // 获取LinearLayout的对象
- video_layout = (LinearLayout) findViewById(R.id.video_layout);
- // 隐藏
- video_layout.setVisibility(View.GONE);
- }
- public void playerVideo(View v) {
- play();// 播放视频
- }
- // 视频播放的操作
- public void play() {
- if (PasueFlag) {
- if (mediaPlayer != null) {
- // 跳转到播放记录的位置
- mediaPlayer.seekTo(currentPosition);
- mediaPlayer.start();
- }
- // 变为false
- PasueFlag = false;
- } else {
- // 判断视频 是否为播放状态
- if (mediaPlayer != null) {
- if (mediaPlayer.isPlaying()) {
- System.out.println("视频处于播放状态");
- }
- } else {
- // 传递的路径 是否为空
- if (path != null) {
- try {
- // 创建视频播放的对象
- mediaPlayer = new MediaPlayer();
- /**
- * 视频播放完成出发的事件
- */
- mediaPlayer
- .setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
- @Override
- public void onCompletion(MediaPlayer mp) {
- mediaPlayer.release();
- mediaPlayer = null;
- System.out.println(mediaPlayer
- + "------------onCompletion"
- + mp);
- }
- });
- /**
- * 播放出差错的时候触发的事件
- *
- * 回调函数
- */
- mediaPlayer
- .setOnErrorListener(new MediaPlayer.OnErrorListener() {
- @Override
- public boolean onError(MediaPlayer mp,
- int what, int extra) {
- mediaPlayer.release();
- mediaPlayer = null;
- return false;
- }
- });
- // 设计音频流类型
- mediaPlayer
- .setAudioStreamType(AudioManager.STREAM_MUSIC);
- // 指定播放的文件
- mediaPlayer.setDataSource(path);
- // 指定用于播放视频的SurfaceView的控件
- mediaPlayer.setDisplay(surfaceHolder);
- mediaPlayer.prepare();
- //记录上次播放的位置
- mediaPlayer.seekTo(backPosition);
- mediaPlayer.start();
- PasueFlag = false;
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
- }
- public void pasueVideo(View v) {
- if (mediaPlayer != null && mediaPlayer.isPlaying()) {
- mediaPlayer.pause();
- // 记录这个位置
- currentPosition = mediaPlayer.getCurrentPosition();
- // 标识 这视频 会被暂停
- PasueFlag = true;
- }
- }
- public void stopVideo(View v) {
- if (mediaPlayer != null && mediaPlayer.isPlaying()) {
- mediaPlayer.stop();
- mediaPlayer.release();
- mediaPlayer = null;
- // 暂停标识
- PasueFlag = false;
- }
- }
- public void resetVideo(View v) {
- if (mediaPlayer != null && mediaPlayer.isPlaying()) {
- mediaPlayer.seekTo(0);
- mediaPlayer.start();
- }
- }
- // 触摸事件
- public boolean onTouchEvent(MotionEvent event) {
- // 获取布局对象是否是隐藏
- if (View.GONE == video_layout.getVisibility()) {
- video_layout.setVisibility(View.VISIBLE);// 显示
- } else {
- video_layout.setVisibility(View.GONE);// 隐藏
- }
- return super.onTouchEvent(event);
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // Inflate the menu; this adds items to the action bar if it is present.
- getMenuInflater().inflate(R.menu.player_video, menu);
- return true;
- }
- /*
- * protected void onDestroy() { super.onDestroy(); // 释放资源 if (mediaPlayer
- * != null) { mediaPlayer.release(); mediaPlayer = null; } }
- */
- }
- public class VideoActivity extends Activity {
- private static final int VIDEOREQUESTPLAYER = 1;
- private int position = 0;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_list);
- }
- public void player(View v) {
- Intent intent = new Intent(VideoActivity.this,
- PlayerVideoActivity.class);
- File sdCardFile = Environment.getExternalStorageDirectory();
- String path = sdCardFile.getPath() + "/Music/oppo.3gp";
- intent.putExtra("path", path);
- intent.putExtra("position", position);
- startActivityForResult(intent, VIDEOREQUESTPLAYER);
- }
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- System.out.println("-------------------onActivityResult");
- // 判断是否是这个请求
- if (VIDEOREQUESTPLAYER == requestCode) {
- // 判断这个请求的响应吗是否成功
- if (RESULT_OK == resultCode) {
- position = data.getIntExtra("position", 0);
- System.out.println("==========================" + position);
- }
- }
- }
- }
- <SurfaceView
- android:id="@+id/sv_video"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_alignParentLeft="true"
- android:layout_alignParentTop="true" />
- <LinearLayout
- android:id="@+id/video_layout"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- android:layout_alignParentLeft="true"
- android:gravity="center_horizontal"
- android:orientation="horizontal"
- tools:ignore="UselessParent" >
- <Button
- android:id="@+id/button1"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:onClick="playerVideo"
- android:text="@string/btn_play" />
- <Button
- android:id="@+id/button2"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:onClick="pasueVideo"
- android:text="@string/btn_pasue" />
- <Button
- android:id="@+id/button3"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:onClick="stopVideo"
- android:text="@string/btn_stop" />
- <Button
- android:id="@+id/button4"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:onClick="resetVideo"
- android:text="@string/btn_reset" />
- </LinearLayout>
0 0
- Android中使用SurfaceView视频播放器
- Android中使用SurfaceView视频播放器
- Android中使用SurfaceView视频播放器
- android中使用surfaceview进行视频播放
- android使用SurfaceView播放视频
- android SurfaceView 视频播放器
- Android SurfaceView视频播放器
- android中使用SurfaceView做视频播放器--视频切换无缝连接
- Android中使用MediaPlayer类和SurfaceView播放视频
- Android中使用surfaceview+MediaPlayer播放视频
- Android使用SurfaceView实现视频播放
- Android使用SurfaceView实现播放视频
- Android使用SurfaceView播放视频 简单介绍
- Android:使用MediaPlayer和SurfaceView播放视频
- Android 使用 MediaPlayer + SurfaceView 播放视频
- android surfaceview 播放视频
- Android SurfaceView 播放视频
- Android--SurfaceView播放视频
- c++数组宽度计算的sizeof关于指针设想
- A Rose by Any Other Name Will End Up As a Cabbage
- LTE学习:天线端口数目和物理天线数目关系
- iOS 下拉刷新和上拉加载更多
- python2.7学习笔记(9) ——面向对象编程
- Android中使用SurfaceView视频播放器
- Leetcode: Clone Graph
- 程序员如何在"小公司成长"和"大公司学习"
- [转]struct和typedef struct彻底明白了
- Nginx配置文件详细说明
- pandas
- LeetCode----Roman To Integer
- 更加简洁易用——wangEditor富文本编辑器新版本发布
- 【C++】GET、POST网络请求boost.asio实现