使用Vitamio开源项目在Android实现播放网络视频

Vitamio是一款开源的视频播放库,我们可以在Android或者ios中很轻松的调用。本文主要介绍了如何在AndroidStudio中导入Vitamio库,以实现播放网络视频。

一,导入Vitamio工程

1,去GitHub下载这个项目: https://github.com/yixia/VitamioBundle

2,在AndroidStudio中将其导入


如图,我们选择Import Module(在AndroidStudio中一个Project就相当于Eclipse中的WorkSpace,而Module则相当于Eclipse中的Project)。


如图在这里将项目导入我们的项目中。

3,将导入的Vitamio项目作为一个库引用


如图,我们选择Project Structure,然后在弹出的页面的左边的Modules一栏,选择我们的主要的Android项目,然后点击右边Dependencies一栏,点击底部的“加号”如下图,并选择Module dependency。


在弹出的界面中,我们选择刚刚导入的Vitamio工程,然后点击ok,即可导入成功。

二,使用Vitamio创建自己的播放器Activity

public class VideoViewBuffer extends Activity implements MediaPlayer.OnInfoListener, MediaPlayer.OnBufferingUpdateListener {

    /**
     * TODO: Set the path variable to a streaming video URL or a local media file
     * path.
     */
    private String path = "测试视频地址";
    private Uri uri;
    private io.vov.vitamio.widget.VideoView mVideoView;
    private ProgressBar pb;
    private TextView downloadRateView, loadRateView;
    private String subTitleUrlPath = "字幕地址";
    private String subTitlePath = Environment.getExternalStorageDirectory() + "/Test/";
    private String subTitleName = "test.srt";
    private TextView tvSrt;
    private List<HashMap<String, String>> SrtList;
    private DownLoadSubTitle task = new DownLoadSubTitle();
    private SrtTask srtTask = new SrtTask();

    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        if (!LibsChecker.checkVitamioLibs(this))
            return;
        setContentView(R.layout.coursera_videobuffer);
        mVideoView = (VideoView) findViewById(R.id.buffera);
        pb = (ProgressBar) findViewById(R.id.probar);

        downloadRateView = (TextView) findViewById(R.id.download_rate);
        loadRateView = (TextView) findViewById(R.id.load_rate);

        tvSrt = (TextView) findViewById(R.id.coursera_videobuffer_srt);//项目中显示字幕的控件
        if (path == "") {
            // Tell the user to provide a media file URL/path.
            Toast.makeText(
                    VideoViewBuffer.this,
                    "Please edit VideoBuffer Activity, and set path"
                            + " variable to your media file URL/path", Toast.LENGTH_LONG).show();
            return;
        } else {
      /*
       * Alternatively,for streaming media you can use
       * mVideoView.setVideoURI(Uri.parse(URLstring));
       */
            uri = Uri.parse(path);
            mVideoView.setVideoURI(uri);
            mVideoView.setMediaController(new MediaController(this, mVideoView));
            mVideoView.requestFocus();
            mVideoView.setOnInfoListener(this);
            mVideoView.setOnBufferingUpdateListener(this);
            mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mediaPlayer) {
                    // optional need Vitamio 4.0
                    task.execute();
                    mediaPlayer.setPlaybackSpeed(1.0f);
                }
            });
        }
//    Toast.makeText(getApplicationContext(), "测试", Toast.LENGTH_SHORT).show();

    }

    @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 true;
    }

    @Override
    public void onBufferingUpdate(MediaPlayer mp, int percent) {
        loadRateView.setText(percent + "%");
    }

    public void onConfigurationChanged(Configuration newConfig) {
//        System.out.println("方向变化了");
        mVideoView.setVideoLayout(mVideoView.mVideoLayout, mVideoView.mAspectRatio);
        super.onConfigurationChanged(newConfig);
//        System.out.println("videoBuffer中的方向" + newConfig.orientation);
    }

    public void getSubtitle(String path, String filename) {
        HttpDownLoad hd = new HttpDownLoad();
        hd.getConnection(path);
        if ((hd.getInputStream() != null) && (hd.getLength() != 0)) {
            hd.writeIntoSD(filename);
        }
    }

    private class DownLoadSubTitle extends AsyncTask<Integer, Integer, Integer> {

        @Override
        protected Integer doInBackground(Integer... params) {
            System.out.println("执行了下载字幕的方法");
            int state = 0;
            try {
                getSubtitle(subTitleUrlPath, subTitleName);
            } catch (Exception e) {
                state = 1;
                e.printStackTrace();
            }
            return state;
        }

        @Override
        protected void onPostExecute(Integer result) {
            if (result == 0) {
                showSrt(subTitlePath + subTitleName);
                System.out.println("执行了下载字幕的方法,成功");
            } else {
                Toast.makeText(getApplicationContext(), "字幕获取失败", Toast.LENGTH_SHORT).show();
            }
        }
    }

    private void showSrt(String filePath) {
        tvSrt.setVisibility(View.VISIBLE);
        SrtUtils srt = new SrtUtils();
        srt.loadLyricFile(filePath);
        SrtList = srt.getSrtList();
        srtTask.execute();
    }

    private class SrtTask extends AsyncTask<Integer, Integer, Integer> {
        private int position;
        private String currentTex = "";

        @Override
        protected Integer doInBackground(Integer... params) {
            while (mVideoView.getCurrentPosition() < mVideoView.getDuration()) {
                if (isCancelled()) {
                    return null;
                }
                for (int i = 0; i < SrtList.size(); i++) {
                    HashMap map = SrtList.get(i);
                    long start = Long.parseLong(map.get("start").toString());
                    long end = Long.parseLong(map.get("end").toString());
                    long current = mVideoView.getCurrentPosition();
                    if ((current > start && current < end)) {
                        position = i;
                        publishProgress(i);
                    }
                }
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            return null;
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            if (isCancelled()) {
                return;
            }
            String tex = SrtList.get(position).get("text").toString();
            if (currentTex.equals("")) {
                tvSrt.setText(tex);
            } else {
                if (!currentTex.equals(tex)) {
                    tvSrt.setText(tex);
                }
            }
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        System.out.println("重写了onDestory方法");
        task.cancel(true);
        srtTask.cancel(true);
    }

    @Override
    public void onBackPressed() {
        System.out.println("重写了back方法");
        task.cancel(true);
        srtTask.cancel(true);
        this.finish();
        return;
    }
}



  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android Vitamio是一个开源的跨平台多媒体播放框架,它支持播放多种音频格式,包括WAV格式。要在Android Vitamio播放WAV文件,可以按以下步骤进行: 第一步:添加Vitamio库文件到项目中。在build.gradle文件中添加Vitamio库的依赖项。 第二步:在代码中初始化Vitamio库。在App的入口处(如MainActivity的onCreate方法中),调用Vitamio库的初始化方法,确保Vitamio库已经正确初始化。 第三步:创建一个MediaPlayer对象,用于播放音频文件。可以使用VitamioVitamio.createPlayer方法创建一个MediaPlayer对象。 第四步:设置音频文件的路径。使用MediaPlayer对象的setDataSource方法,传入要播放的WAV文件的路径。 第五步:准备MediaPlayer对象。调用MediaPlayer对象的prepareAsync方法,准备音频文件的播放。 第六步:设置MediaPlayer的监听器。可以注册一个MediaPlayer.OnPreparedListener监听器,用于在音频准备完成后播放音频。 第七步:开始播放音频。调用MediaPlayer对象的start方法,开始播放音频。 第八步:在适当的时机释放MediaPlayer对象。当音频播放完成或不再需要播放时,调用MediaPlayer对象的release方法,释放资源。 通过上述步骤,就可以使用Android Vitamio播放WAV文件了。需要注意的是,确保WAV文件的路径正确,并且要在AndroidManifest.xml文件中添加适当的权限,以允许访问存储器中的音频文件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值