【Android SurfaceView】视频播放器 简单例子
来源:互联网 发布:淘宝远望手机怎么样 编辑:程序博客网 时间:2024/05/16 01:10
找过好过视频播放器的例子,但是都特么给一半代码,不给一半代码!
还有的
我也是醉了!把自己以前的笔记发一下吧,
虽然有缺陷:
1,横屏切换的时候,线程会死掉,不能激活... (已经搞定了!谢谢各位dalao!)
2,停止的时候,线程释放了资源,但是还是有一张图片在
3,待机状态,还有有声音播放的。
现在还没有解决,希望公布代码后,有人提出改进建议...
暂时实现了:
1,进度条绑定播放器的进度
2,三个按钮:播放,暂停,停止
3,视频从SD卡读取,就在根目录,当前是hand.mp4(其他格式嘛?应该不支持吧....)
4、切换屏幕的时候,仍然可以播放,线程没有死掉!播放也继续进度!
这是布局:
播放:
暂停:
1、TestVedioActivity.java
package com.open_open.android_ch14_2;import android.app.Activity;import android.media.AudioManager;import android.media.MediaPlayer;import android.os.Bundle;import android.os.Environment;import android.os.SystemClock;import android.view.SurfaceHolder;import android.view.SurfaceView;import android.view.View;import android.widget.Button;import android.widget.SeekBar;import android.widget.SeekBar.OnSeekBarChangeListener;/* 视频播放器 素材:1280x 720 ,来自sd卡 Surface:原始图形缓冲区, Surface是管理显示内容的数据,储存数据的交换 */public class TestVedioActivity extends Activity { private SurfaceView sfview; //在Surface的基础上,显示视频 private SurfaceHolder holder; //在Surface的基础上,控制尺寸大小和格式 private SeekBar sb; //进度条 private MediaPlayer mp; //媒体播放器 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test_vedio); sb=(SeekBar)findViewById(R.id.sb); sfview=(SurfaceView)findViewById(R.id.sfView); holder=sfview.getHolder(); sb.setOnSeekBarChangeListener(new OnSeekBarChangeListener() { @Override public void onStopTrackingTouch(SeekBar seekBar) { if(mp!=null) mp.seekTo(seekBar.getProgress()); } @Override public void onStartTrackingTouch(SeekBar seekBar) { } @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { } }); } public void doPlay(View view){ if(mp!=null) return; mp=new MediaPlayer(); String path=Environment.getExternalStorageDirectory().getAbsolutePath()+"/hand.mp4"; try { mp.setDataSource(path); mp.setAudioStreamType(AudioManager.STREAM_MUSIC); mp.setDisplay(holder); mp.prepare(); sb.setMax(mp.getDuration()); mp.start();//控制进度条 new Thread(new Runnable() { @Override public void run() { while(mp.getCurrentPosition()<=sb.getMax()){ sb.setProgress(mp.getCurrentPosition());//设置进度条当前进度 SystemClock.sleep(200); } } }); } catch (Exception e) { e.printStackTrace(); } } public void doPause(View view){ if(mp!=null&&mp.isPlaying()){ mp.pause();//暂停 ((Button)view).setText("继续播放"); }else if(mp!=null&&mp.isPlaying()==false){ mp.start();//播放 ((Button)view).setText("暂停"); } } public void doStop(View view){ if(mp!=null){ sb.setProgress(0); mp.stop(); mp.release(); mp=null; } }}
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <SeekBar android:id="@+id/sb" android:layout_width="match_parent" android:layout_height="wrap_content" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="播放" android:onClick="doPlay" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="暂停" android:onClick="doPause" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="停止" android:onClick="doStop" /> </LinearLayout> <SurfaceView android:id="@+id/sfView" android:layout_width="match_parent" android:layout_height="300sp" /></LinearLayout>
3、Android Manifest.xml 权限开启:
<! - 权限开启:增加文件卸载,允许写入SD卡,允许打开摄像头,允许录音 - >
<uses-permission android :name = “android.permission.MOUNT_UNMOUNT_FILESYSTEMS” /> <uses-permission android :name = “android.permission.WRITE_EXTERNAL_STORAGE” /> <uses-permission android :name = “android.permission.CAMERA” / > <uses-permission android :name = “android.permission.RECORD_AUDIO” />
TestVedioActivity :这里的四个 属性,让切换屏幕的时候线程没有死掉!
<activity android:name=".TestVedioActivity" android:configChanges="orientation|screenLayout|keyboardHidden|screenSize"/>
要是有所改进,我会发第二篇 改进的博客的。
2 0
- 【Android SurfaceView】视频播放器 简单例子
- 【Android SurfaceView】视频播放器 简单例子2(改良版)
- android SurfaceView 视频播放器
- Android SurfaceView视频播放器
- Android使用SurfaceView播放视频 简单介绍
- 视频播放 小例子 SurfaceView
- android surfaceview 播放视频
- Android SurfaceView 播放视频
- Android--SurfaceView播放视频
- Android中使用SurfaceView视频播放器
- Android中使用SurfaceView视频播放器
- Android SurfaceView + MediaPlayer实现视频播放器
- Android中使用SurfaceView视频播放器
- android MediaPlayer SurfaceView 网络视频播放器
- android surfaceView+mediaPlayer 自定义视频播放器
- Android-SurfaceView+VideoView视频播放器实例
- Android 视频播放器SurfaceView+Mediaplayer
- 简单的视频播放surfaceView
- Perror&Printf
- VC对话框焦点转换问题
- Android studio使用lint找出安卓项目中无用资源文件
- 自定义AlertDialog内容居中显示
- BZOJ1510 [POI2006]Kra-The Disks
- 【Android SurfaceView】视频播放器 简单例子
- day01
- iOS开发中遇到过的坑
- C语言中static与extern的用法
- 模块句柄和进程句柄的区别?
- Failed to load class "org.slf4j.impl.StaticLoggerBinder"
- javascript 禁止右键和复制
- Android用Zxing扫二维码/生成二维码功能
- 曲线总结