zoukankan      html  css  js  c++  java
  • Vitamio VideoView 示例


    VideoView 播放本地视频
    /**
     * 会根据视频尺寸自动缩放
     * 自己对VideoView设置的宽高基本不起任何作用
     */
    public class VideoViewDemo extends Activity implements io.vov.vitamio.MediaPlayer.OnPreparedListener, OnClickListener {
        private EditText et_path;
        private Button bt_play;
        private VideoView mVideoView;
        @Override
        public void onCreate(Bundle icicle) {
            super.onCreate(icicle);
            Vitamio.isInitialized(this);
            setContentView(R.layout.videoview);
            et_path = (EditText) findViewById(R.id.et_path);
            bt_play = (Button) findViewById(R.id.bt_play);
            mVideoView = (VideoView) findViewById(R.id.surface_view);
            mVideoView.setMediaController(new MediaController(this));
            mVideoView.setOnPreparedListener(this);
            bt_play.setOnClickListener(this);
        }
        @Override
        public void onPrepared(MediaPlayer mp) {
            mp.setPlaybackSpeed(1.0f);
        }
        @Override
        public void onClick(View v) {
            String filepath = et_path.getText().toString().trim();
            mVideoView.setVideoPath(Environment.getExternalStorageDirectory().getAbsolutePath() + filepath);
            mVideoView.requestFocus();
            mVideoView.start();
        }
    }

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
        <io.vov.vitamio.widget.VideoView
            android:id="@+id/surface_view"
            android:layout_width="300dp"
            android:layout_height="300dp"
            android:layout_gravity="center_horizontal" />
        <EditText
            android:id="@+id/et_path"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="/a.rmvb" />
        <Button
            android:id="@+id/bt_play"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="播放本地多媒体" />
    </LinearLayout>

    VideoView 播放网络视频、控制缩放类型
    /**
     * 字幕,调整视频缩放类型
     * @author 白乾涛
     */
    public class VideoViewSubtitle extends Activity implements OnPreparedListener, OnClickListener, OnTimedTextListener {
        //HTTP,无效
        //path=  "http://www.modrails.com/videos/passenger_nginx.mov";
        //path=  "http://wsmp32.bbc.co.uk/";
        //RTSP,无效
        //path= "http://m.livestream.com";
        //path= "rtsp://xgrammyawardsx.is.livestream-api.com/livestreamiphone/grammyawards";
        //MMS,无效
        //path= "mms://112.230.192.196/zb12";
        //path = "mms://ting.mop.com/mopradio";
        //组播 ,无效
        //path = "udp://236.1.0.1:2000";
        private String path = "http://dlqncdn.miaopai.com/stream/MVaux41A4lkuWloBbGUGaQ__.mp4";
        private String subtitle_path = "";
        private VideoView mVideoView;
        private TextView mSubtitleView;
        private Button btn_changeLayout;
        private Button bt_play1bt_play2bt_play3bt_play4;
        private long mPosition = 0;
        private int mVideoLayout = 0;
        @Override
        public void onCreate(Bundle icicle) {
            super.onCreate(icicle);
            Vitamio.isInitialized(getApplicationContext());
            setContentView(R.layout.subtitle2);
            mVideoView = (VideoView) findViewById(R.id.surface_view);
            btn_changeLayout = (Button) findViewById(R.id.btn_changeLayout);
            bt_play1 = (Button) findViewById(R.id.bt_play1);
            bt_play2 = (Button) findViewById(R.id.bt_play2);
            bt_play3 = (Button) findViewById(R.id.bt_play3);
            bt_play4 = (Button) findViewById(R.id.bt_play4);
            btn_changeLayout.setOnClickListener(this);
            bt_play1.setOnClickListener(this);
            bt_play2.setOnClickListener(this);
            bt_play3.setOnClickListener(this);
            bt_play4.setOnClickListener(this);

            mVideoView.setVideoPath(path);
            mVideoView.setMediaController(new MediaController(this));
            mVideoView.requestFocus();
            mVideoView.setOnPreparedListener(this);
            mVideoView.setOnTimedTextListener(this);
        }
        @Override
        protected void onPause() {
            mPosition = mVideoView.getCurrentPosition();
            mVideoView.stopPlayback();
            super.onPause();
        }
        @Override
        protected void onResume() {
            if (mPosition > 0) {
                mVideoView.seekTo(mPosition);
                mPosition = 0;
            }
            super.onResume();
            mVideoView.start();
        }
        @Override
        public void onPrepared(MediaPlayer mp) {
            mp.setPlaybackSpeed(1.0f);
            mVideoView.addTimedTextSource(subtitle_path);//不知道哪来的API
            mVideoView.setTimedTextShown(true);//不知道哪来的API
        }
        @Override
        public void onClick(View v) {
            if (v.getId() == R.id.btn_changeLayout) {
                changeLayout(v);
            } else {
                switch (v.getId()) {
                case R.id.bt_play1:
                    path = "http://112.253.22.157/17/z/z/y/u/zzyuasjwufnqerzvyxgkuigrkcatxr/hc.yinyuetai.com   /D046015255134077DDB3ACA0D7E68D45.flv";
                    break;
                case R.id.bt_play2://HLS m3u8
                    path = "http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8";
                    break;
                case R.id.bt_play3:
                    path = "http://7xt0mj.com1.z0.glb.clouddn.com/xia.v.1280.720.f4v";
                    break;
                case R.id.bt_play4:
                    path = "http://7xt0mj.com1.z0.glb.clouddn.com/lianaidaren.v.640.480.mp4";
                    break;
                }
                mVideoView.setVideoPath(path);
                mVideoView.requestFocus();
                mVideoView.start();
            }
        }
        @Override
        public void onTimedText(String text) {
            mSubtitleView.setText(text);
        }
        @Override
        public void onTimedTextUpdate(byte[] pixels, int width, int height) {
        }
        public void changeLayout(View view) {
            mVideoLayout++;
            if (mVideoLayout == 4) mVideoLayout = 0;//循环
            switch (mVideoLayout) {
            case 0:
                mVideoLayout = VideoView.VIDEO_LAYOUT_ORIGIN;//原始画面
                view.setBackgroundResource(R.drawable.mediacontroller_sreen_size_100);
                break;
            case 1:
                mVideoLayout = VideoView.VIDEO_LAYOUT_SCALE;//全屏
                view.setBackgroundResource(R.drawable.mediacontroller_screen_fit);
                break;
            case 2:
                mVideoLayout = VideoView.VIDEO_LAYOUT_STRETCH;//拉伸
                view.setBackgroundResource(R.drawable.mediacontroller_screen_size);
                break;
            case 3:
                mVideoLayout = VideoView.VIDEO_LAYOUT_ZOOM;//裁剪
                view.setBackgroundResource(R.drawable.mediacontroller_sreen_size_crop);
                break;
            }
            mVideoView.setVideoLayout(mVideoLayout, 0);//第二个参数为【宽高比】,为0将自动检测
        }
    }

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="400dp"
            android:layout_gravity="center_horizontal"
            android:orientation="vertical" >
            <io.vov.vitamio.widget.CenterLayout
                android:id="@+id/dd"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:orientation="vertical" >
                <io.vov.vitamio.widget.VideoView
                    android:id="@+id/surface_view"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_centerHorizontal="true"
                    android:layout_centerVertical="true" />
            </io.vov.vitamio.widget.CenterLayout>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true"
                android:text="@string/res_audio" />
        </RelativeLayout>
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >
            <Button
                android:id="@+id/bt_play1"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="flv" />
            <Button
                android:id="@+id/bt_play2"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="m3u8" />
            <Button
                android:id="@+id/bt_play3"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="f4v" />
            <Button
                android:id="@+id/bt_play4"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="mp4" />
            <Button
                android:id="@+id/btn_changeLayout"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:background="@drawable/mediacontroller_sreen_size_100" />
        </LinearLayout>
    </LinearLayout>

    VideoView 显示缓冲信息
    /**
     * 显示缓冲相关信息
     * @author 白乾涛
     */
    public class VideoViewBuffer extends Activity implements OnInfoListener, OnBufferingUpdateListener, OnPreparedListener {
        private String path = "http://112.253.22.157/17/z/z/y/u/zzyuasjwufnqerzvyxgkuigrkcatxr/hc.yinyuetai.com   /D046015255134077DDB3ACA0D7E68D45.flv";
        
        private Uri uri;
        private VideoView mVideoView;
        private ProgressBar pb;
        private TextView downloadRateViewloadRateView;//网速和已经加载的百分比
        @Override
        public void onCreate(Bundle icicle) {
            super.onCreate(icicle);
            Vitamio.isInitialized(getApplicationContext());
            setContentView(R.layout.videobuffer);
            mVideoView = (VideoView) findViewById(R.id.buffer);
            pb = (ProgressBar) findViewById(R.id.probar);
            downloadRateView = (TextView) findViewById(R.id.download_rate);
            loadRateView = (TextView) findViewById(R.id.load_rate);

            uri = Uri.parse(path);
            mVideoView.setVideoURI(uri);
            mVideoView.setMediaController(new MediaController(this));
            mVideoView.requestFocus();
            mVideoView.setOnInfoListener(this);
            mVideoView.setOnBufferingUpdateListener(this);
            mVideoView.setOnPreparedListener(this);
        }
        //******************************************************************************************
        @Override
        public boolean onInfo(MediaPlayer mp, int what, int extra) {//在有警告或错误信息时调用。例如:开始缓冲、缓冲结束、下载速度变化
            switch (what) {
            case MediaPlayer.MEDIA_INFO_BUFFERING_START://开始缓存,暂停播放,显示正在加载
                if (mVideoView.isPlaying()) {
                    mVideoView.pause();
                    pb.setVisibility(View.VISIBLE);
                    downloadRateView.setText("");
                    loadRateView.setText("");
                    downloadRateView.setVisibility(View.VISIBLE);
                    loadRateView.setVisibility(View.VISIBLE);
                }
                break;
            case MediaPlayer.MEDIA_INFO_BUFFERING_END://缓存完成,继续播放
                mVideoView.start();
                pb.setVisibility(View.GONE);
                downloadRateView.setVisibility(View.GONE);
                loadRateView.setVisibility(View.GONE);
                break;
            case MediaPlayer.MEDIA_INFO_DOWNLOAD_RATE_CHANGED://显示 下载速度(KB/s)
                downloadRateView.setText("" + extra + "kb/s" + "  ");
                break;
            }
            return true;
        }
        @Override
        public void onBufferingUpdate(MediaPlayer mp, int percent) {//在网络视频流缓冲变化时调用
            loadRateView.setText(percent + "%");
        }
        @Override
        public void onPrepared(MediaPlayer mp) {
            mp.setPlaybackSpeed(1.0f);
        }
    }

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical" >
        <io.vov.vitamio.widget.CenterLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical" >
            <io.vov.vitamio.widget.VideoView
                android:id="@+id/buffer"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_centerHorizontal="true"
                android:layout_centerVertical="true" />
        </io.vov.vitamio.widget.CenterLayout>
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:orientation="horizontal" >
            <ProgressBar
                android:id="@+id/probar"
                style="?android:attr/progressBarStyleLarge"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
            <TextView
                android:id="@+id/download_rate"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="" />
            <TextView
                android:id="@+id/load_rate"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:text="" />
        </LinearLayout>
    </RelativeLayout>





  • 相关阅读:
    类的专有方法(__getitem__和__setitem__)
    类的专有方法(__len__)
    demo02
    python之函数用法__str__()
    repr
    类的专有方法(__repr__)
    类的专有方法(__del__)
    类的专有方法(__init__)
    静态方法
    Golang接口简单了解
  • 原文地址:https://www.cnblogs.com/baiqiantao/p/5434774.html
Copyright © 2011-2022 走看看