如何在Android项目中使用VLC

先说一下为何要使用VLC,由于项目中要求播放流媒体,之前并无接触过这块。css

经常使用Android视频播放技术:

 

FFmpeg

FFmpeg,它是一个功能很是强大的音视频录制和编解码库。大部分Android开源视频播放技术,例如上面提到的Vitamio,VLC,ijkplayer,底层都是以FFmpeg做为编解码引擎。html

Vitamio

Vitamio是中国团队开发的,基于FFmpeg的视频播放框架,支持的音视频格式和流媒体协议很是全面。它的api基本和Android原生sdk同样,集成难度最小。android

Vitamio分红标准版和至尊版,标准版免费限我的开发者使用,部分多媒体播放功能只有付费版才能使用。git

VLC多媒体播放器

VLC多媒体播放器是VideoLAN计划的多媒体播放器,它融合了FFmpeg计划的解码器与libdvdcss程序库使其有播放多媒体文件及加密DVD影碟的功能。github

在Android上有一个开源的播放器vlc for android,它基于VLC开发,具有全部播放控制特性,是很好的参考资料。api

使用VLC比直接使用FFmpeg要简单得多,但相比Android原生sdk,它要处理的事情仍是很是多,集成比较费时间。架构

 

若是公司肯花钱的话,我仍是建议使用Vitamio,我虽然没看官方文档,但估计集成步骤都已经列出来了。框架

1.我公司不想花钱,就只能用VLC了,VLC一搜全是英文的,说明也不明显。可是若是你仔细看文档仍是可以找到一个项目的,项目地址 https://code.videolan.org/videolan/libvlc-android-samples/-/tree/master,这个项目我没有下载,只看了一下,以为少东西,它虽然引用了libvlc-3.0.0.aar,可是项目中并无,可是能够给你提供必定的思路。ide

2.后来又在网上搜,不少资源都是gitlab上的,https://code.videolan.org/videolan/vlc-android 地址上的项目很全,能够下载下来看,可是估计run起来费劲,它不少依赖都很新,并且gradle plugin的版本也是最新的。它并无用引用arr的方式,而是gitlab

implementation的方式远程依赖,本身的项目中也推荐使用这种方式(除非你本身能够编译arr,arr中能够放对应手机CPU架构的so),使用implementation的方式,它里面包含了四、5中架构吧,具体的本身按照依赖地址下载里面的arr,解压看。

3.彻底能够用2中的方式依赖,下面要作的就是把你须要的架构的so拷到jniLibs文件夹中(本身建立文件夹),而后在module的build.gradle中加入 ndk{abiFilters "xx"}

4.

public boolean init(SurfaceView sView){

        final ArrayList<String> args = new ArrayList<>();
        args.add("-vvv");
        mLibVLC = new LibVLC(this, args);
        mMediaPlayer = new MediaPlayer(mLibVLC);

        //init mMediaPlayer
        final IVLCVout vlcVout = mMediaPlayer.getVLCVout();
        if(sView!=null) {
            vlcVout.setVideoView(sView);
        }


        vlcVout.attachViews();

        Media media = new Media(mLibVLC, Uri.parse(mUrl));
        media.setHWDecoderEnabled(true,true);
        media.addOption(":no-audio");
        media.addOption(":network-caching=150");
        media.addOption(":file-caching=150");
        media.addOption(":sout-mux-caching=150");
        media.addOption(":live-caching=150");
        mMediaPlayer.setMedia(media);
//
        mMediaPlayer.getVLCVout().setWindowSize(800,654);
        mMediaPlayer.setAspectRatio(800+":"+654);
        mMediaPlayer.setScale(0);

        media.release();

        return true;
    }

5.能够布局中加一个按钮,而后点击事件  mMediaPlayer.play();

这样下来,一个简单的流媒体就能够播放了。

我后续还要研究一下播放的设置参数等等,本篇记录一下VLC的集成。