极速赛车APP下载

Android播放视频之VideoView

电脑杂谈  发布时间:2019-09-22 12:02:57  来源:网络整理

android videoview_videoview播放黑屏_android videoview

目前这些app就会有短视频内容android videoview,这里就来讲一下android中播放视频的几种方式。

Android播放视频有三种模式:

1,调用平台已有的播放工具播放视频。

2android videoview极速赛车APP下载,使用android提供的VideoView控件定制自己的视频播放器。

3,使用MediaPlayer和SurfaceView定制自己的视频播放器。

第一种方式最简单了:

 //调用系统自带的播放器
        Uri uri = Uri.parse("/storage/emulated/0/DCIM/Camera/VID_20161103_105921.mp4");
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setDataAndType(uri, "video/mp4");
        startActivity(intent);

就android4.2.2的例程来看 ,系统自带的播放器程序是Gallery2

极速赛车APP下载/packages/apps/Gallery2

通过清单文件,可以了解处理该intent的activity:

\

看一下这个MovieActivity。java

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      。。
        setContentView(R.layout.movie_view);
        View rootView = findViewById(R.id.movie_view_root);
        setSystemUiVisibility(rootView);
        Intent intent = getIntent();
      。。。
        mPlayer = new MoviePlayer(rootView, this, intent.getData(), savedInstanceState,
                !mFinishOnCompletion) {
            @Override
            public void onCompletion() {
                if (mFinishOnCompletion) {
                    finish();
                }
            }
        };

主要用到MoviePlayer,看一下这个MoviePlayer类做了啥

 public MoviePlayer(View rootView, final MovieActivity movieActivity,
            Uri videoUri, Bundle savedInstance, boolean canReplay) {
        mContext = movieActivity.getApplicationContext();
        mRootView = rootView;
        mVideoView = (VideoView) rootView.findViewById(R.id.surface_view);
        mBookmarker = new Bookmarker(movieActivity);
        mUri = videoUri;
        mController = new MovieControllerOverlay(mContext);
        ((ViewGroup)rootView).addView(mController.getView());
        mController.setListener(this);
        mController.setCanReplay(canReplay);
        mVideoView.setOnErrorListener(this);
        mVideoView.setOnCompletionListener(this);
        mVideoView.setVideoURI(mUri);
        mVideoView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                mController.show();
                return true;
            }
        });
        // The SurfaceView is transparent before drawing the first frame.
        // This makes the UI flashing when open a video. (black -> old screen
        // -> video) However, we have no way to know the timing of the first
        // frame. So, we hide the VideoView for a while to make sure the
        // video has been drawn on it.
        mVideoView.postDelayed(new Runnable() {
            @Override
            public void run() {
                mVideoView.setVisibility(View.VISIBLE);

android videoview_videoview播放黑屏_android videoview

这个mVideoView是VideoView类型

所以通过下面代码可以清楚,android自带的播放器也是使用VideoView这个控件来实现的。

那么接着就讲一下第二种方式,使用VideoView定制自己的视频播放器

VideoView看名字需要是View的子类

\

VideoView的直接父类是SurfaceView .关于SurfaceView前面Android视图SurfaceView的使用一文已做简单介绍。

SurfaceView可以用来显示手机的预览界面,也可以拿来显示视频的数据。

下面就来看一下如何使用VideoView。

使用VideoView播放视频也是两种形式:

一种是只使用VideoView进行播放视频,自己自定义播放进度,播放状况的发力,然后自己控制播放

另一种就是VideoView结合MediaController播放视频,这种方法不需要自己写布局去控制播放。

下面先看第一方式:

结合代码和效果图一起分析下是怎样推动播放视频的:

用手机录制了一段视频,然后用写的应用程序来播放这段视频(真机测试的)

android videoview_videoview播放黑屏_android videoview

\

启动应用发现界面如上:

看一下布局文件:


<framelayout android:id="@+id/activity_main" android:layout_height="match_parent" android:layout_width="match_parent" tools:context="cj.com.videoviewdemo2.MainActivity" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
    
    <framelayout android:alpha="0" android:id="@+id/cover" android:layout_height="match_parent" android:layout_width="match_parent"></framelayout>
    </framelayout>

极速赛车APP下载MyVideoView是用来播放视频的,ImageView是用来显示视频的缩略图的(还未开始播放,先显示缩略图,覆盖VideoView那块区域,因为一开始VideoView那块区域是白色的),cover (FrameLayout)是用来控制 CheckBox 和 LinearLayout 隐藏与显示,CheckBox是控制播放与中止,LinearLayout就是显示播放进度的发力,两个TextView分别是显示当前播放的时间和总时间,SeekBar就是显示进度,可以拖曳到任意位置播放。

下面的代码片段就是设置视频预览照片

 private void initVideoView() {
        Log.d(TAG,"initVideoView ");
        Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(PATH, MINI_KIND);
        if(bitmap != null){
            preview.setImageBitmap(bitmap);
        }
        videoView.setVideoURI(Uri.parse(PATH));
    }
这里用到了ThumbnailUtils这个软件,参考官网文档:

VideoView播放视频,需要传入视频资源,传入方法有下列几种:

\

关于VideoView官方文档:

我这儿播放本地视频,当然也可以播放网络视频。

点击CheckBox进行播放,看一下播放效果:

\

\

看一下代码:

videoview播放黑屏_android videoview_android videoview

 playOrPause.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                Log.d(TAG,"onCheckedChanged  isChecked="+isChecked);
                if(isChecked){//暂停
                    videoView.pause();
                    positon = videoView.getCurrentPosition();
                }else{//播放
                    videoView.seekTo(positon);
                    videoView.start();
                    playOrPause.setVisibility(View.GONE);
                    preview.setVisibility(View.GONE);
                }
            }
        });


本文来自电脑杂谈,转载请注明本文网址:
http://www.0531mai.com/a/bofangqi/article-123742-1.html

相关阅读
发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

极速赛车手机版下载 极速赛车手机版下载 极速赛车手机官网 极速赛车手机版下载 极速赛车手机官网 极速赛车APP 极速赛车双面盘 极速赛车APP下载 极速赛车APP 极速赛车APP下载