快速使用Vitamio框架播放网络视频

简介

文章简介,把以前写过的东西拿来复习分享一下,由于Android自带的VideoView等控件支持的视频播放格式较少,所以使用到Vitamio框架进行快速的搭建一个能播放更多格式的视频播放功能。
需要用到
Vitamio框架:https://github.com/yixia/VitamioBundle
Android Studio:http://www.android-studio.org/
Android SDK等一系列的开发环境,推荐使用API Level 18以上,模拟器CPU选择ARM架构的,选择Intel架构的会出现崩毁现象。

准备工作

下载Vitamio
下载Vitamio
下载完成后只需要解压出Vitamio这个文件夹
解压文件
然后打开Android Studio 新建项目,在File->New->Import Module
Import Module
选择对应的文件目录,根据提示进行相应操作后,在Project Structure 中能看到Vitamio这个模块说明导入成功了。
文件目录
导入成功

布局编写

<?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:fitsSystemWindows="true"
    android:orientation="vertical" >
    <!-- 使用Vitamio中的不局将Vitamio框架的VideoView包裹-->
    <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>

Activity文件

下面开始写代码了

package com.TJApp.handchina.Activity;

import com.TJApp.handchina.R;
import com.TJApp.handchina.R.id;
import com.TJApp.handchina.R.layout;


import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import io.vov.vitamio.LibsChecker;
import io.vov.vitamio.MediaPlayer;
import io.vov.vitamio.Vitamio;
import io.vov.vitamio.widget.MediaController;
import io.vov.vitamio.widget.VideoView;

/**
 * 播放器集成
 *
 * @author TianJun
 *
 */
public class MyVideoPlay extends Activity implements MediaPlayer.OnBufferingUpdateListener, MediaPlayer.OnInfoListener {
    private String path = "" ;
//  private Uri uri = null;
    private ProgressBar pb;
    private TextView downloadRateView, loadRateView;
    private VideoView mVideoView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //检查Vitamio的库是否正常
        if (!LibsChecker.checkVitamioLibs(this)) {
            return;
        }
        //初始化框架
        Vitamio.isInitialized(getApplicationContext());
        setContentView(layout.videoplayer);
        //获取intent,并获取传递进来的URL参数
        Intent intent = getIntent();
        path = intent.getStringExtra("VideoUrl");
        //初始化绑定相应控件
        pb = (ProgressBar) findViewById(id.probar);
        mVideoView = (VideoView) findViewById(id.buffer);
        downloadRateView = (TextView) findViewById(R.id.download_rate);
        loadRateView = (TextView) findViewById(R.id.load_rate);
        //判断UR是否为空
        if (path == "") {
            //告诉用户需要设置媒体文件的URL地址路径
            Toast.makeText(MyVideoPlay.this, "请输入媒体文件URL地址", Toast.LENGTH_LONG).show();
            return;
        } else {
            //设置播放地址
            mVideoView.setVideoPath(path);
            //设置视频控制器,当然这个可以自定义控制器,我这里使用自带想控制器
            mVideoView.setMediaController(new MediaController(this));
            //获取焦点
            mVideoView.requestFocus();
            //设置状态信息监听
            mVideoView.setOnInfoListener(this);
            //设置数据更新监听
            mVideoView.setOnBufferingUpdateListener(this);
            //进行异步的准备
            mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mediaPlayer) {
                    //播放速率的调节,需要Vitamio 4.0 以上
                    mediaPlayer.setPlaybackSpeed(1.0f);
                }
            });
        }
    }

    /**
     * 数据更新监听的回调函数
     * @param mp      the MediaPlayer the update pertains to
     * @param percent the percentage (0-100) of the buffer that has been filled thus
     */
    @Override
    public void onBufferingUpdate(MediaPlayer mp, int percent) {
//        Log.i("onBufferingUpdate",percent+"");
        loadRateView.setText(percent + "%");
    }

    /**
     * 视频状态更新监听的回调函数
     * @param mp    the MediaPlayer the info pertains to.
     * @param what  the type of info or warning.
     *              <ul>
     *              <li>{@link #MEDIA_INFO_VIDEO_TRACK_LAGGING}
     *              <li>{@link #MEDIA_INFO_BUFFERING_START} 缓存开始
     *              <li>{@link #MEDIA_INFO_BUFFERING_END} 缓存结束
     *              <li>{@link #MEDIA_INFO_NOT_SEEKABLE}
     *              <li>{@link #MEDIA_INFO_DOWNLOAD_RATE_CHANGED} 缓存率改变
     *              </ul>
     * @param extra an extra code, specific to the info. Typically implementation
     *              dependant.
     * @return
     */
    @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:
                //下载速率的显示
                downloadRateView.setText("" + extra + "kb/s" + "  ");
                break;
        }
        return false;
    }

    /**
     * Activity 失去焦点
     */
    @Override
    protected void onPause() {
        super.onPause();
        mVideoView.pause();//暂停
    }

    /**
     * Activity 获得焦点
     */
    @Override
    protected void onResume() {
        super.onResume();
        mVideoView.start();//开始
    }

    /**
     * Activity 停止
     * 停止摧毁后一定要判断是否有初始化,如果初始化后需要关闭释放Vitamio播放器
     * 不然会出现应用崩溃
     */
    @Override
    protected void onStop() {
        super.onStop();
        //判断是否初始化
        if (LibsChecker.checkVitamioLibs(this)) {
            //VideoView停止关闭
            mVideoView.stopPlayback();
        }
    }
}

大功告成!~
对了,manifest的配置文件不要忘了哦。

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值