zoukankan      html  css  js  c++  java
  • 视频播放-VideoVIew,Vitamio

    • 播放视频文件其实并不比播放音频文件复杂,主要是使用 VideoView类来实现的。这个
      类将视频的显示和控制集于一身,使得我们仅仅借助它就可以完成一个简易的视频播放器。
      VideoView的用法和 MediaPlayer 也比较类似(不同点在于播放视频需要UI控件,播放音乐只需要借助MediaPlayer对象)

      VideoView,用于播放一段视频媒体,它继承了SurfaceView,位于"android.widget.VideoView",是一个视频控件

    • 常用监听:
    • setOnCompletionListener(MediaPlayer.onCompletionListener l):监听播放完成的事件。
    • setOnErrorListener(MediaPlayer.OnErrorListener l):监听播放发生错误时候的事件。
    • setOnPreparedListener(MediaPlayer.OnPreparedListener l)::监听视频装载完成的事件

    xml布局:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context="fanggao.qf.videoview.MainActivity">
    
        <VideoView
            android:id="@+id/video_view"
            android:layout_width="match_parent"
            android:layout_height="300dp" />
    </RelativeLayout>
    View Code

    源代码:

    /**
     * VideoView  surfaceView的子类
     */
    public class MainActivity extends AppCompatActivity {
        private String url = "http://qiubai-video.qiushibaike.com/G2XQOKE9T0NKSX4E_3g.mp4";
        private VideoView videoView;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            //获得videoView对象
            videoView = (VideoView) findViewById(R.id.video_view);
            //给video填充数据
            videoView.setVideoPath(url);
    //        videoView.setVideoURI(Uri.parse(path));第二种方式
            //播放本地资源
    //        videoView.setVideoPath(new File(Environment.getExternalStorageDirectory(),"a.mp3").getPath());
    
            /**媒体控制面版常用方法:MediaController:
             hide();     隐藏MediaController;
             show();     显示MediaController
             show(int timeout);设置MediaController显示的时间,以毫秒计算,如果设置为0则一直到调用hide()时隐藏;
             */
            //设置媒体控制器
            videoView.setMediaController(new MediaController(this));//设置该参数就有滑动条
            //设置准备监听
            videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                    @Override
                public void onPrepared(MediaPlayer mp) {
                   //视频播放器播放视频
                    mp.start();
                }
        });
        }
        /*videoVIew.stopPlayback()内部的方法如下,
                      只是将媒体播放器停止并释放资源
                    if (mMediaPlayer != null) {
                       mMediaPlayer.stop();
                       mMediaPlayer.release();
                       mMediaPlayer = null;
                       */
        /*如果需要播放完毕后播放下一个视频只需要调用videoView.stopPlayback(),后再重新调用VideoVIew.setVideoPath(path)即可
        * 而serfaceView 调用stop方法后将不能再播放视频*/
        @Override
        protected void onDestroy() {
            //在销毁活动之前调用该方法
            if(videoView != null){
                //释放资源
                videoView.stopPlayback();
                videoView = null;
    
            }
            super.onDestroy();
    
        }
    }

    可以看出,VideoView和MediaPlayer用法上很相似,其实是因为VideoView的内部封装了MediaPlayer,使得我们可以很方便的使用它,但是VideoView 并不是一个万能的视频播放工具类,它在视频格式的支持以及播放效率方面都存在着较大的不足,只适于播放一些游戏的片头动画,或者某个应用的视频宣传等.

    另外,也有第三方的包Vitamio,帮助我们轻松的播放视频

    vitamio,下载地址:https://www.vitamio.org/Download/    下载代码即可

    使用方法跟VideoView基本一致

    不过需要在清单文件中注册一个没有界面的Activity,还需要初始化

     下载后将vitamio当module文件导入-修改编译版本跟之前项目一致--最后当库文件导入当前项目中(Add as library)

    没有页面的activity

    <activity
                android:name="io.vov.vitamio.activity.InitActivity"
                android:configChanges="orientation|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"
                android:launchMode="singleTop"
                android:theme="@android:style/Theme.NoTitleBar"
                android:windowSoftInputMode="stateAlwaysHidden"/>

    xml文件:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 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"
        tools:context="fanggao.qf.vitamio.MainActivity">
    
     <io.vov.vitamio.widget.VideoView
         android:id="@+id/videoView"
         android:layout_width="match_parent"
         android:layout_height="match_parent" />
    </RelativeLayout>

    main函数:

    public class MainActivity extends AppCompatActivity {
        //rtmp是直播的网络协议
        private String url="rtmp://live.hkstv.hk.lxdns.com/live/hks";
        private VideoView vView;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //注册
            Vitamio.isInitialized(this);
            setContentView(R.layout.activity_main);
    
            vView = (VideoView) findViewById(R.id.videoView);
            //设置数据
             vView.setVideoPath(url);
            //设置控制器
            vView.setMediaController(new MediaController(this));
            //设置预加载完成后的监听
            vView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    vView.start();
                }
            });
    }
    
        @Override
        protected void onDestroy() {
            if(vView != null){
                vView.stopPlayback();
                vView = null;
            }
            super.onDestroy();
        }
    }

    注意:rtmp是直播的网络协议

     效果:
    直播中...

  • 相关阅读:
    List of the best open source software applications
    Owin对Asp.net Web的扩展
    NSwag给api加上说明
    'workspace' in VS Code
    unable to find valid certification path to requested target
    JMeter的下载以及安装使用
    exception disappear when forgot to await an async method
    Filter execute order in asp.net web api
    记录web api的request以及response(即写log)
    asp.net web api的源码
  • 原文地址:https://www.cnblogs.com/fangg/p/5932961.html
Copyright © 2011-2022 走看看