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是直播的网络协议

     效果:
    直播中...

  • 相关阅读:
    面试官问我:记录存在就更新,不存在就插入有啥思路怎么办?愣着干嘛?进来白嫖啊! (上)
    面试官问我:char和varchar的区别 怎么办?愣着干嘛?进来白嫖啊!
    面试官竟然疯狂问我数据库的组提交?怎么办?愣着干嘛?进来白嫖呀!
    面试官疯狂问我联表查询怎么办? 愣着干嘛?进来白嫖啊!
    面试官狂问我各种锁怎么办?愣着干嘛?进来白嫖啊!
    面试被问:如何排查慢查询(执行计划)怎么办?愣着干嘛?进来白嫖呀!
    B站挂了之后出现的tengine是个啥?
    Python
    Python
    Python
  • 原文地址:https://www.cnblogs.com/fangg/p/5932961.html
Copyright © 2011-2022 走看看