视频播放(在线)
来源:互联网 发布:免流软件原理 编辑:程序博客网 时间:2024/04/28 18:55
背景android:background="#FFFFFF"
使用surfaceview控件实现视频播放,但是接到电话在播放的时候只有声音无画面,因为surfaceview控件离开前台后会被摧毁,当activity重新回到前台的时候surfaceview又会被重建,但是在onResume()方法后,故onResume()中无法播放,可以通过监听对象,在surfaceview创建的回调方法中重新播放,保存position,再次播放用
onDestroy()方法中释放播放器对象。
path=filename实现在线播放
public class MainActivity extends Activity { private EditText nameText; private String path; private MediaPlayer mediaPlayer; private SurfaceView surfaceView; private boolean pause; private int position; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mediaPlayer = new MediaPlayer(); nameText = (EditText) this.findViewById(R.id.filename); surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView); //把输送给surfaceView的视频画面,直接显示到屏幕上,不要维持它自身的缓冲区 surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); surfaceView.getHolder().setFixedSize(176, 144); //设置分辨率 surfaceView.getHolder().setKeepScreenOn(true); //保持屏幕高亮,不锁屏 surfaceView.getHolder().addCallback(new SurfaceCallback()); } private final class SurfaceCallback implements Callback{public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {}public void surfaceCreated(SurfaceHolder holder) {if(position>0 && path!=null){play(position);position = 0;}}public void surfaceDestroyed(SurfaceHolder holder) {if(mediaPlayer.isPlaying()){position = mediaPlayer.getCurrentPosition();mediaPlayer.stop();}} }@Overrideprotected void onDestroy() { mediaPlayer.release(); mediaPlayer = null;super.onDestroy();}public void mediaplay(View v){ switch (v.getId()) {case R.id.playbutton:String filename = nameText.getText().toString();if(filename.startsWith("http")){path = filename; //实现在线播放play(0);}else{File file = new File(Environment.getExternalStorageDirectory(), filename);if(file.exists()){path = file.getAbsolutePath();play(0);}else{path = null;Toast.makeText(this, R.string.filenoexsit, 1).show();}}break;case R.id.pausebutton:if(mediaPlayer.isPlaying()){mediaPlayer.pause();pause = true;}else{if(pause){mediaPlayer.start();pause = false;}}break;case R.id.resetbutton:if(mediaPlayer.isPlaying()){mediaPlayer.seekTo(0);}else{if(path!=null){play(0);}}break;case R.id.stopbutton:if(mediaPlayer.isPlaying()){mediaPlayer.stop();}break;} }private void play(int position) {try {mediaPlayer.reset();mediaPlayer.setDataSource(path);mediaPlayer.setDisplay(surfaceView.getHolder());mediaPlayer.prepare();//缓冲mediaPlayer.setOnPreparedListener(new PrepareListener(position));} catch (Exception e) {e.printStackTrace();}}private final class PrepareListener implements OnPreparedListener{private int position;public PrepareListener(int position) { this.position = position;}public void onPrepared(MediaPlayer mp) {mediaPlayer.start();//播放视频if(position>0) mediaPlayer.seekTo(position);}}}
0 0
- 视频播放(在线)
- IOS在线的播放视频
- Red5流服务器搭建(实现在线直播,流媒体视频播放和在线视频会议)
- Red5流服务器搭建(实现在线直播,流媒体视频播放和在线视频会议)
- Red5流服务器搭建(实现在线直播,流媒体视频播放和在线视频会议)
- Red5流服务器搭建(实现在线直播,流媒体视频播放和在线视频会议)
- 在视听在线上播放视频
- ios:播放在线的网络视频
- TextureView+MediaPlayer实现在线短视频播放
- 在线网页视频播放器(flash flv播放器)
- 视频播放(VideoView)
- 视频播放(一)
- 视频播放(二)
- 视频播放(三)
- 视频播放(四)
- ckplayer(视频播放)
- 在线wmv视频的全屏播放功能实现 (转)
- 优酷|土豆|56视频自动播放代码在线生成
- 加油吧,骚年!
- Spark on yarn有分为两种模式yarn-cluster和yarn-client
- 线性表之双循环链表
- 网站优化之YSLOW篇
- 我的第一篇人生博客
- 视频播放(在线)
- 斐波那契数列
- c#GDI绘制数字问题
- Spring AOP(一)——什么是AOP
- PopUpWindow使用详解(一)——基本使用
- IOS中根视图控制器的剖析
- 马虎的算式(穷举暴破)
- shell订时检测sshd的端口
- 蓝桥杯 未名湖边的烦恼