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_play1, bt_play2, bt_play3, bt_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 downloadRateView, loadRateView;//网速和已经加载的百分比
    @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>

Vitamio VideoView 示例的更多相关文章

  1. vitamio videoView 用隐藏除videoview的控件,并旋转屏幕方向实现的全屏功能,出现的画面不能填充满videoview(画面不完整)

    使用vitamio 封装的播放器 当切换到全屏模式,有时候会出现播放的画面不是全屏的情况, 全屏时,画面只占左半部分并出现拉伸效果,还显示不全,等等其他情况 阅读分析源代码发现是getHolder() ...

  2. 玩转Android之在线视频播放控件Vitamio的使用

    其实Android中自带的MediaPlayer本身就能播放在线视频,MediaPlayer结合SurfaceView播放在线视频也是不错的选择(如果你没有性能或者用户体验上的要求),关于MediaP ...

  3. Android 多媒体视频播放一( 多媒体理解与经验分享)

    前言 说到android的多媒体,一把辛酸一把泪,当初听说会多媒体的比较牛掰,公司也有需求,于是乎我也积极的加入研究android多媒体的行列,记得以前刚接触的时候,最开始还是比较头大的,主要是但是很 ...

  4. 视频播放-VideoVIew,Vitamio

    播放视频文件其实并不比播放音频文件复杂,主要是使用 VideoView类来实现的.这个类将视频的显示和控制集于一身,使得我们仅仅借助它就可以完成一个简易的视频播放器.VideoView的用法和 Med ...

  5. Android视频媒体相关,VideoView和开源框架vitamio

    虽然Android已经内置了VideoView组件和MediaPlayer类来支持开发视频播放器,但支持格式.性能等各方面都十分有限,但是Vitamio的确强大到没朋友! Vitamio 是一款 An ...

  6. VideoView 视频播放 示例

    介绍 实现的功能: 可播放本地视频或网络视频,可控制播放或暂停 最小化时保存播放位置及播放状态,resume时恢复所有状态: 横竖屏切换时保持切换前的位置及状态 在屏幕上竖直滑动可调节屏幕亮度和音量 ...

  7. Vitamio

    前言 虽然Android已经内置了VideoView组件和MediaPlayer类来支持开发视频播放器,但支持格式.性能等各方面都十分有限,这里与大家一起利用免费的Vitamio来打造属于自己的And ...

  8. vitamio框架

    import io.vov.vitamio.LibsChecker; import io.vov.vitamio.MediaPlayer; import io.vov.vitamio.MediaPla ...

  9. Android视录视频示例

    这几天需要搞一个Android视频通话功能,从最简单的视频录制开始,网上例子大多不完整.下面的示例参考过别人的代码,还是拿出来给需要的朋友分享下. Activity类:VideoActivity pa ...

随机推荐

  1. BroadcastReceiver监听电量变化

    用BroadcastReceiver监听电量的变化,可以实现BroadcastReceiver接收电量变化的广播,然后获取电量百分比信息. BatteryChangedReceiver.java pu ...

  2. bash shell学习-实践 (自己实现一些小工具)

    The poor starve while the rich feast. "穷人饥肠辘辘,富人大吃大喝" 参考资料:鸟哥的Linux私房菜 基础学习篇(第三版)  Linux S ...

  3. jquery 的attr()方法解析

    我想用jquery的attr()方法修改一个li小圆点的背景颜色和外边框的时候:刚开始 $("#shanghai-btn").attr({background:"#999 ...

  4. extjs中rowEditing动态编辑

    我们在使用Grid的rowEditing插件时希望能够根据自己的业务需求能够动态的实现那一列是用户可以编辑的,那一列用户不可编辑,下面给出一个方案能够实现rowEditing的动态编辑功能. 之前我通 ...

  5. PHP5的对象复制

    今天用yii开发程序,一个bug改了一晚上,最后发现问题出在了对象复制机制上,PHP5之前的对象复制只需要$object_a = $object_b即可,但PHP5这样得到的是浅复制,及指针指向,并不 ...

  6. Pku1947 Rebuilding Roads

    题意是给一棵树,问最少删掉几条边.使得剩下的子树中有节点个数为m个的 设f[i][j]表示i号点所在的子树中选了j个点至少需要删去f[i][j]条边. code: #include<cstdio ...

  7. bzoj3576: [Hnoi2014]江南乐

    Description 小A是一个名副其实的狂热的回合制游戏玩家.在获得了许多回合制游戏的世界级奖项之后,小A有一天突然想起了他小时候在江南玩过的一个回合制游戏.    游戏的规则是这样的,首先给定一 ...

  8. 禁用ios7 手势滑动返回功能

    禁用ios7 手势滑动返回功能 版权声明:本文为博主原创文章,未经博主允许不得转载. 在有的时候,我们不需要手势返回功能,那么可以在页面中添加以下代码: - (void)viewDidAppear:( ...

  9. ASP.NET中IsPostBack详解

    一,IsPostBack介绍 Page.IsPostBack是一个标志:当前请求是否第一次打开.调用方法为:Page.IsPostBack或者IsPostBack或者this.IsPostBack或者 ...

  10. 『Python』 爬取 WooYun 论坛所有漏洞条目的相关信息

    每个漏洞条目包含: 乌云ID,漏洞标题,漏洞所属厂商,白帽子,漏洞类型,厂商或平台给的Rank值 主要是做数据分析使用:可以分析某厂商的各类型漏洞的统计:或者对白帽子的能力进行分析..... 数据更新 ...