Android:视频(VideoView/MediaPlayer)
Android之视频播放
VideoView
if(android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)){ //判断SDCard是否存在
SDExit = true;
} else{
SDExit = false;
Toast.makeText(VideoActivity.this, "SD卡不存在!", Toast.LENGTH_SHORT).show();
}
public class VideoActivity extends Activity{
private VideoView videoView;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.video);
videoView=(VideoView)findViewById(R.id.video);
String videoPath = "file:///sdcard/video/he.mp4";
videoView.setVideoURI(Uri.parse(videoPath));
videoView.setMediaController(new MediaController(this));// 设置播放器的控制条
videoView.requestFocus();
videoView.start(); // 开始播放视频
}
}
<!-- VideoView - 视频播放控件-->
<VideoView android:id="@+id/video" android:layout_width="fill_parent"
android:layout_height="360dp" />
MediaPlayer
<SurfaceView
android:id="@+id/surface"
android:layout_width="match_parent"
android:layout_height="360dp" > </SurfaceView>
public class VideoActivity extends Activity implements OnBufferingUpdateListener, OnCompletionListener,
OnPreparedListener,OnVideoSizeChangedListener, SurfaceHolder.Callback{
private MediaPlayer mediaPlayer;
private SurfaceView surfaceView;
private SurfaceHolder holder;
private Bundle bundle;
private String videoPath;
private int mVideoWidth, mVideoHeight;
private static final String MEDIA = "media";
private static final int LOCAL_AUDIO = 1, STREAM_AUDIO = 2, RESOURCES_AUDIO = 3, LOCAL_VIDEO = 4, STREAM_VIDEO = 5;
private boolean isVideoSizeKnown = false, isVideoReadyToBePlayed = false;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.video);
surfaceView = (SurfaceView) findViewById(R.id.surface);
holder = surfaceView.getHolder();
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
bundle = getIntent().getExtras();
private void playVideo(){ //播放视频
cleanUp();
try {
videoPath = "file:///sdcard/video/he.mp4";
//videoPath = "http://192.168.0.180:8080/?action=stream";
if(videoPath == ""){
Toast.makeText(VideoActivity.this, "视频路径不正确!", Toast.LENGTH_SHORT).show();
}
mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(videoPath);
mediaPlayer.setDisplay(holder);
mediaPlayer.prepare();
mediaPlayer.setOnBufferingUpdateListener(this);
mediaPlayer.setOnCompletionListener(this);
mediaPlayer.setOnPreparedListener(this);
mediaPlayer.setOnVideoSizeChangedListener(this);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
}catch (Exception e) {
}
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
playVideo();
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
@Override
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
if (width == 0 || height == 0) {
return ;
}
isVideoSizeKnown = true;
mVideoWidth = width;
mVideoHeight = height;
if (isVideoReadyToBePlayed && isVideoSizeKnown) {
startVideoPlayback();
}
}
@Override
public void onPrepared(MediaPlayer mp) {
isVideoReadyToBePlayed = true;
if (isVideoReadyToBePlayed && isVideoSizeKnown) {
startVideoPlayback();
}
}
@Override
public void onCompletion(MediaPlayer mp) {
}
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
}
@Override
protected void onPause() {
super.onPause();
releaseMediaPlayer();
cleanUp();
}
@Override
protected void onDestroy() {
super.onDestroy();
releaseMediaPlayer();
cleanUp();
}
private void releaseMediaPlayer() {
if (mediaPlayer != null) {
mediaPlayer.release();
mediaPlayer = null;
}
}
private void cleanUp() {
mVideoWidth = 0;
mVideoHeight = 0;
isVideoReadyToBePlayed = false;
isVideoSizeKnown = false;
}
private void startVideoPlayback() {
holder.setFixedSize(mVideoWidth, mVideoHeight);
mediaPlayer.start();
}
}
官网参考链接:http://developer.android.com/reference/android/media/MediaPlayer.html
参考链接:
代码下载示例:http://download.csdn.net/detail/klcf0220/5999561
Android:视频(VideoView/MediaPlayer)的更多相关文章
- android 随手记 videoview循环播放网络视频 和mediaplayer+sufaceview播放网络视频
1:videoview循环播放视频 1>xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res ...
- Android视频媒体相关,VideoView和开源框架vitamio
虽然Android已经内置了VideoView组件和MediaPlayer类来支持开发视频播放器,但支持格式.性能等各方面都十分有限,但是Vitamio的确强大到没朋友! Vitamio 是一款 An ...
- Android使用VideoView播放本地视频及网络视频Demo
1.xm文件 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:and ...
- Android使用VideoView播放网络视频
Android支持播放网络上的视频.在播放网络上的视频时,牵涉到视频流的传输,往往有两种协议,一种是HTTP,一种是RTSP.这 两种协议最大的不同是,HTTP协议,不支持实时流媒体的播放,而RTSP ...
- android采用videoView播放视频(包装)
//android播放视频.用法:于androidManifest.xml添加activity, // <activity android:name=".PlayVideo" ...
- android中VideoView播放sd卡上面的视频
(1)videoView组件只支持MP4和3gp格式的视屏播放,如果想播放其它视屏格式的文件,还得开发能够播放的视屏播放器 (2)videoView组件功能比较单一,如果想开发功能丰富的播放器,还得重 ...
- Android下VideoView的研究
VideoView继承自SurfaceView,实现了MediaController.MediaPlayerControl的接口.在android系统中的包名为android.widget.Video ...
- android之VideoView和视频播放View的扩展
1.概念及扩展 VideoView 是android 系统提供的一个媒体播放显示和控制的控件.其结构层次如下: 原型:VideoView extends SurfaceView implements ...
- android 视频开发2分之2(仿美拍,糗百)
上一篇写了分段录制和合并视频.这一篇则是选择视频,然后截断视频. 1.从sdcard中找到视频资源: 2.分析视频,拿到你须要的帧数当你的图片.(我的是依据參数来算的多少秒1帧的图片,通常是1秒1帧来 ...
随机推荐
- CF741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths
CF741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths 好像这个题只能Dsu On Tree? 有根树点分治 统计子树过x的 ...
- Eclipse编辑jsp、js文件时卡死现象的解决办法汇总
使用Eclipse编辑jsp.js文件时,经常出现卡死现象,在网上百度了N次,经过N次优化调整后,卡死现象逐步好转,具体那个方法起到作用,不太好讲.将所有用过的方法罗列如下: 1.取消验证 windo ...
- MySQL中使用like查找汉字 Incorrect string value 解决办法
用Select…like %…%来查找MySQL的text类型字段的一个中文,却发现查出来的是乱的,发现不少人也遇到这样的问题.在中文排序和查找的时候,汉字的结果是错误的. 原因在于MySQL在查找字 ...
- springmvc的controller中使用@Transactional无效
最近看mybatis的时候做了一个练习,但是进行事务处理的时候出了问题,如下 package com.henu.lz.controller; import org.springframework.be ...
- url 编码和解码网址
Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...
- saltstack安装与配置
Saltstack是基于Python开发的一套C/S架构,具备Puppet.Ansible功能于一身的配置管理工具,功能十分强大,各模块融合度及复用性极高:使用号称世界上最快的消息队列ZeroMQ使得 ...
- GO语言的进阶之路-面向对象编程
GO语言的进阶之路-面向对象编程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 当你看完这篇文章之时,我可以说你的Golang算是入门了,何为入门?就是你去看Docker 源码能看 ...
- ivew实现table的编辑保存追加删除
ivew实现table的编辑 例子1 例子2
- elasticsearch核心知识梳理
https://blog.csdn.net/laoyang360/article/details/52244917
- webstorm 很卡 scanning files to index (扫描文件索引)
webstorm 号称"前端神器",但npm导入包跑索引,会很卡不停的跑索引... 排除你不想索引的文件夹 找到你想排除的文件夹(主要是node_modulewe文件夹),右键选择 ...