http://henzil.easymorse.com/?p=165
实现播放视频有两种方式,一种是使用VideoView;一种是使用SurfaceView。
VideoView
在main.xml中加入:
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<VideoView android:id="@+id/videoView" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_x="10px"
android:layout_y="10px" />
</AbsoluteLayout>
在类中,加入以下代码
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//设置成全屏模式
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//强制为横屏
setContentView(R.layout.main);
videoView = (VideoView) findViewById(R.id.videoView);
// videoView.setVideoPath("/sdcard/xyx.3gp");
videoView.setVideoURI(Uri.parse("/sdcard/beijinghuanyingni.mp4"));
MediaController mediaController = new MediaController(this);
videoView.setMediaController(mediaController);
videoView.start();
//videoView.requestFocus();
首先我使用的是全屏,强制横屏播放视频。.setVideoURI是设置视频的路径,这里我用的是sdcard上的视频,如果用http的,则需写完整路径。最重要的一点,我看网上有用videoView.requestFocus();来加载视屏播放,这里我没有能播放成功,改用了videoView.start();来播放。
这种方式是使用Android自带的按钮,无需自定义暂停、播放等按钮控件。
源码见:http://henzil.googlecode.com/svn/trunk/play/
SurfaceView
这种方式是使用自定义的暂停、播放等按钮控件。
在main.xml文件中加入:
<SurfaceView android:id="@+id/surface"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center">
</SurfaceView>
在Java类中,实现OnBufferingUpdateListener, OnCompletionListener, MediaPlayer.OnPreparedListener,SurfaceHolder.Callback接口
代码见:
package com.play2;
import java.io.IOException;
import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnBufferingUpdateListener;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;
public class PlayDemo2 extends Activity implements OnBufferingUpdateListener,
OnCompletionListener, MediaPlayer.OnPreparedListener,
SurfaceHolder.Callback {
private MediaPlayer mediaPlayer;
private SurfaceView surfaceView;
private SurfaceHolder surfaceHolder;
private int videoWidth;
private int videoHeight;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.main);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);//强制为横屏
this.surfaceView = (SurfaceView) this.findViewById(R.id.surface);
this.surfaceHolder = this.surfaceView.getHolder();
this.surfaceHolder.addCallback(this);
this.surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
Log.v("cat", ">>>create ok.");
}
private void playVideo() throws IllegalArgumentException,
IllegalStateException, IOException {
this.mediaPlayer = new MediaPlayer();
this.mediaPlayer
.setDataSource("/sdcard/daoxiang.3gp");
this.mediaPlayer.setDisplay(this.surfaceHolder);
this.mediaPlayer.prepare();
this.mediaPlayer.setOnBufferingUpdateListener(this);
this.mediaPlayer.setOnPreparedListener(this);
this.mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
Log.i("mplayer", ">>>play video");
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
Log.i("cat", ">>>surface changed");
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
this.playVideo();
} catch (Exception e) {
Log.i("cat", ">>>error", e);
}
Log.i("cat", ">>>surface created");
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
Log.v("mplayer", ">>>surface destroyed");
}
@Override
public void onCompletion(MediaPlayer arg0) {
// TODO Auto-generated method stub
}
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
// TODO Auto-generated method stub
}
@Override
public void onPrepared(MediaPlayer arg0) {
this.videoWidth = this.mediaPlayer.getVideoWidth();
this.videoHeight = this.mediaPlayer.getVideoHeight();
if (this.videoHeight != 0 && this.videoWidth != 0) {
this.surfaceHolder.setFixedSize(this.videoWidth, this.videoHeight);
this.mediaPlayer.start();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (this.mediaPlayer != null) {
this.mediaPlayer.release();
this.mediaPlayer = null;
}
}
}
分享到:
相关推荐
Android 移动应用开发,视频播放软件功能实现 具有登录,浏览记录,播放视频等的功能Android 移动应用开发,视频播放软件功能实现 具有登录,浏览记录,播放视频等的功能Android 移动应用开发,视频播放软件功能实现...
一行代码快速实现视频播放,Android视频播放,AndroidMP3播放,安卓视频播放一行代码搞定,真正实现Android的全屏功能,立志成为Android平台使用最广泛的视频播放控件
Android视频播放 广告,让视频播放更简单.
简单的Android视频播放器,实现本地播放和url播放,实现全屏播放和下载功能
使用Android自带的编码工具,可实现硬编码,这里有一个国内大神开源的封装很完善的的库yasea,第一种方法需要实现的Camera采集部分也一起封装好了,进行一些简单配置就可以实现编码推流,并且yasea目前已经直接支持...
VideoListPlayer实现了在列表控件(ListView, RecyclerView)中加载并播放视频,并支持滑动时自动播放/暂停的功能 利用该项目,可以轻松实现类似Instagram的视频播放功能 注意:最低支持API 14以上 效果预览 ...
使用VideoView播放视频简单、方便,但有些早期的开发者还是更喜欢使用MediaPlayer来播放视频,但由于MediaPlayer主要用于播放音频,因此它没有提供图像输出界面,此时就需要借助于SurfaceView来显示MediaPlayer播放...
android VLC可实现rtsp播放 录屏 截图等功能
android studio javacv实现 播放rstp流、抓图、录制视频功能,完整例子,直接导入android studio就可以用。
android 利用MediaPlayer+SurfaceView播放视频,与我的文章对应http://blog.csdn.net/shenxiaolei507/article/details/41349295,而且其中还有很多高级功能的实现,还包括ViedioView播放视频!!
android studio VideoView本地视频播放
本文实例讲述了Android编程实现播放视频的方法。分享给大家供大家参考,具体如下: 播放视频文件其实并不比播放音频文件复杂,主要是使用 VideoView 类来实现的。这个 类将视频的显示和控制集于一身,使得我们仅仅...
Android音频和视频播放
主要为大家详细介绍了android surfaceView实现播放视频功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
在同一局域网中,Android推流端(比如平板)内置RTSP/RTMP服务器,Android推流端将摄像头的画面实时推流到内置的RTSP/RTMP服务器上,然后在Android手机上实时进行播放。 本方案实现了如下功能 : 平板端内置RTSP/RTMP...
Android用视频的录制和播放功能的实现,里面有对视频大小的限制,不过可能会有一点问题,希望在帮助大家的同时大家也能帮我解决一下。
Android 动画实现广告播放 主要是图片的平移、缩放效果,当然可以自己添加其他动画效果
简单的视频播放器源码。主要使用了VideoView类。Android为视频播放提供了VideoView 的组件,让我们可以方便的实现MP4、3GP等视频的播放
类似头条,网易App列表当中播放视频以及实现全屏,列表当中嵌套视频播放,滑出可视区域停止播放,点击全屏播放,主要利用textureview+mediaplay实现关键功能。修改了相关bug,可直接使用(之前的资源删除不了)。 --...
实现一个运行于Android平台的音乐播放器,可以列出SD卡上的所有歌曲,并实现简单的播放、暂停、切歌以及设置等功能。 1. 加载本地歌曲 通过列表形式将本地歌曲列出,显示简要信息,如歌名、歌手。 2. 播放控制 ...