基于libvlc aar的播放器实例

   日期:2020-08-23     浏览:217    评论:0    
核心提示:之前我在服务器里面已经编译出aar包(VLC for Android编译出AAR文件)因为有了aar包做一些事情就简单多了,不像以前的so库,接口很多都要自己写,现在基于aar包去制作自己的播放器

之前我在服务器里面已经编译出aar包(VLC for Android编译出AAR文件)因为有了aar包做一些事情就简单多了,不像以前的so库,接口很多都要自己写,现在基于aar包去制作自己的播放器

VLC也有自己的的例子,包括了java和native方式,下载方法:git clone https://code.videolan.org/videolan/libvlc-android-samples.git

不过VLC例子的build.gradle问里面,org.videolan.android:libvlc-all:3.1.12会编译开始会下载这个aar包,不用墙过去的话,会下载很慢

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.0.2'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'org.videolan.android:libvlc-all:3.1.12'
}

接下来开始基于aar包去制作自己的播放器,名称暂定vlc-player,播放直播流


一.效果演示:

1.局部播放

2.全屏播放


二.apk配置注意地方:

在build.gradle里面,配置libs的路径,使app/libs成为项目的一部分

android {
	...
    repositories{
        flatDir{
            dirs 'libs'
        }
    }
}

然后去掉了自动下载的aar配置,使用本地的arr

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    ...
 	//implementation 'org.videolan.android:libvlc-all:3.1.12'
    implementation(name: 'libvlc-all-3.2.6', ext: 'aar')//使用本地aar
}

由于包有70多M,build.gradle里面,只配置armeabi-v7a,x86这2个cpu类型,生成的apk只有30多M,也兼容64位的cpu。唯一比较大的问题64位的cpu的最好效果没有发挥出来,等抽时间再裁剪一下vlc内部。

defaultConfig {
		...
        ndk {
            //选择要添加的对应cpu类型的.so库。
            abiFilters 'armeabi-v7a','x86'
        }
    }

三.apk主要代码分析:

下面代码段主要初始化vlc,args是vlc的参数配置,后期用的比较多。"–rtsp-tcp"是加快rtsp加载视频速度,因为apk会应用安防的比较多,对速度和实时性要求比较高

        final ArrayList<String> args = new ArrayList<>();//VLC参数
        args.add("--rtsp-tcp");//强制rtsp-tcp,加快加载视频速度

        mLibVLC = new LibVLC(this, args);
        mMediaPlayer = new MediaPlayer(mLibVLC);
        mVideoLayout = findViewById(R.id.video_layout);

下面代码设置播放地址和开始播放

        mMediaPlayer.attachViews(mVideoLayout, null, ENABLE_SUBTITLES, USE_TEXTURE_VIEW);
		mMediaPlayer.setVideoScale(MediaPlayer.ScaleType.SURFACE_BEST_FIT);
        Uri uri = Uri.parse("http://nclive.grtn.cn/gdws/sd/live.m3u8?_upt=0704702d1598088562");//rtsp流地址或其他流地址
        final Media media = new Media(mLibVLC, uri);
        mMediaPlayer.setMedia(media);
        media.release();
        mMediaPlayer.play();

下面代码段主要监听播放器状态,用于扩展各种应用

 //监听播放状态
        mMediaPlayer.setEventListener(new MediaPlayer.EventListener() {
            @Override
            public void onEvent(MediaPlayer.Event event) {
                if (event.type == MediaPlayer.Event.Opening) {
                    progressBar.setVisibility(View.VISIBLE);
                }
                else if (event.type == MediaPlayer.Event.Buffering){
                    if (event.getBuffering() >= 100){
                        progressBar.setVisibility(View.GONE);
                    }
                }
                else if (event.type == MediaPlayer.Event.Playing){
                    //frame的屏幕大小
                    screen_width = frame_layout.getWidth();
                    screen_height = frame_layout.getHeight();
                    Log.d(TAG, "screen_width:" + screen_width + " screen_height:" + screen_height);
                    mMediaPlayer.setAspectRatio(screen_width + ":" + screen_height);//设置屏幕比例
                }
                else if (event.type == MediaPlayer.Event.Stopped){
                    progressBar.setVisibility(View.GONE);
                }
                else if (event.type == MediaPlayer.Event.EncounteredError){
                    progressBar.setVisibility(View.GONE);
                    error_text.setVisibility(View.VISIBLE);
                    error_text.setText("播放错误");
                }
            }
        });

重点介绍一下setAspectRatio(宽高比)的方法,vlc问题最多出现在跟据屏幕和view宽高拉伸和缩放。不配置宽高比的话,会使用MediaPlayer.ScaleType.SURFACE_BEST_FIT,具体它是怎么best fit,不是很清楚,但是比例效果是有问题的。setAspectRatio其实很简单就是获取屏幕和view宽高,然后转成字符串(宽:高)传到这个方法就可以了,如下代码

		//frame的屏幕大小
		screen_width = frame_layout.getWidth();
		screen_height = frame_layout.getHeight();
		Log.d(TAG, "screen_width:" + screen_width + " screen_height:" + screen_height);
		mMediaPlayer.setAspectRatio(screen_width + ":" + screen_height);//设置屏幕比例

具体的代码,大家可以下载,git地址:https://gitee.com/newpoyang/vlc-player,本人喜欢用码云,国内服务器比较快

参考:
VLC for Android编译出AAR文件(https://blog.csdn.net/u010735007/article/details/108141213)

如有用到此功能的朋友,可以留言交流和点赞

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服