# ctyun-xstore-player-android **Repository Path**: ctyun-xstore/ctyun-xstore-player-android ## Basic Information - **Project Name**: ctyun-xstore-player-android - **Description**: ctyun-xstore-player-android - **Primary Language**: Android - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2019-02-20 - **Last Updated**: 2023-12-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # VideoView VideoView是一个基于[ijkplayer](https://github.com/Bilibili/ijkplayer)的视屏播放库,可以用于播放本地和网络视频。 一、集成步骤: 第一步:app的build.gradle文件,增加如下配置 ```java dependencies { ... implementation 'com.gitee.ctyun-xstore:ctyun-xstore-player-android:0.0.3' } ``` 第二步:主工程的build.gradle文件,增加如下配置 ```java allprojects { repositories { google() jcenter() mavenCentral() maven { url 'https://jitpack.io' } maven { url 'http://4thline.org/m2' } } } ``` 第三步:app的build.gradle文件,增加如下配置 ```java android { .... packagingOptions { exclude 'META-INF/DEPENDENCIES.txt' exclude 'META-INF/NOTICE' exclude 'META-INF/NOTICE.txt' exclude 'META-INF/LICENSE' exclude 'META-INF/LICENSE.txt' exclude 'META-INF/beans.xml' } ... } ``` 第四步:增加相关权限配置 ```java ``` 二、使用说明: 第一步:把VideoView作为一个控件添加到你的布局中 ```java ``` 第二步:在AndroidManifest.xml中activity进行如下配置(DemoActivity为你自己的Activity) ```java ``` 第三步:设置播放器高度、设置播放源,即可按照默认配置播放视频了。 ```java mVideoView = findViewById(R.id.player); // 设置播放器的高度,一般宽高比为16:9 int widthPixels = getResources().getDisplayMetrics().widthPixels; ViewGroup.LayoutParams layoutParams = mVideoView.getLayoutParams(); layoutParams.height = widthPixels / 16 * 9; // 可选:播放器相关配置,其他配置参照类PlayerConfig mVideoView.setPlayerConfig(new PlayerConfig.Builder() // .autoRotate(false) // 自动旋转屏幕 // .enableMediaCodec() // 启动硬解码 // .savingProgress() // 保存播放进度 .build()); // 设置播放源 List videos = new ArrayList<>(); // 片头广告 // videos.add(new VideoModel(URL_AD, "", PlayerConstants.VideoType.START_AD, new AdControllerListener() { // @Override // public void onAdClick() { // Toast.makeText(DemoActivity.this, "广告点击跳转", Toast.LENGTH_SHORT).show(); // } // })); videos.add(new VideoModel(URL_VOD, "这是一个标题", PlayerConstants.VideoType.VOD)); // 片尾广告 videos.add(new VideoModel(URL_AD, "", PlayerConstants.VideoType.END_AD)); mVideoView.fromSource(videos) .videoId("123456") .pauseAdUrl(pauseAdUrl) .thumbUrl(pauseAdUrl2) .watermark("我的水印", PlayerConstants.WatermarkTextPosition.BOTTOM_RIGHT) .onPlay(new OnPlayListener() { @Override public void play() { Log.d(TAG, "onPlay"); } }) .onPause(new OnPauseListener() { @Override public void pause() { Log.d(TAG, "onPause"); } }) .onLoadStart(new OnLoadStartListener() { @Override public void loadStart() { Log.d(TAG, "onLoadStart"); } }) .onStop(new OnStopListener() { @Override public void stop() { Log.d(TAG, "onStop"); } }) .onError(new OnErrorListener() { @Override public void error() { Log.d(TAG, "onError"); } }) .onEnterFullScreen(new OnEnterFullScreenListener() { @Override public void enterFullScreen() { Log.d(TAG, "onEnterFullScreen"); } }) .onExitFullScreen(new OnExitFullScreenListener() { @Override public void exitFullScreen() { Log.d(TAG, "onExitFullScreen"); } }) .onMute(new OnMuteListener() { @Override public void mute() { Log.d(TAG, "onMute"); } }) .onResumeVolume(new OnResumeVolumeListener() { @Override public void resumeVolume() { Log.d(TAG, "onResumeVolume"); } }) .onSetVolume(new OnSetVolumeListener() { @Override public void setVolume() { Log.d(TAG, "onSetVolume"); } }) .onSeekTo(new OnSeekToListener() { @Override public void seekTo(long pos) { Log.d(TAG, "onSeekTo : " + pos); } }) .load(); DanmakuModel danmakuModel = new DanmakuModel(); List danmakuDetails = new ArrayList<>(); danmakuModel.setDanmakuDetails(danmakuDetails); danmakuModel.setScrollSpeed(1.2f); DanmakuDetail danmakuDetail = new DanmakuDetail(); danmakuDetail.setType(1); danmakuDetail.setRelativeTime(3.0f); danmakuDetail.setText("啊啊啊啊啊啊啊啊啊啊啊啊"); danmakuDetail.setColor(16777215); danmakuDetails.add(danmakuDetail); DanmakuDetail danmakuDetail2 = new DanmakuDetail(); danmakuDetail2.setType(5); danmakuDetail2.setRelativeTime(6.0f); danmakuDetail2.setText("dsadasdsadadssd"); danmakuDetail2.setColor(16776960); danmakuDetails.add(danmakuDetail2); DanmakuDetail danmakuDetail3 = new DanmakuDetail(); danmakuDetail3.setType(4); danmakuDetail3.setRelativeTime(3.5f); danmakuDetail3.setText("弹幕来啦~~~~"); danmakuDetail3.setColor(16711680); danmakuDetails.add(danmakuDetail3); // 启用投屏 mVideoView.enableDLNA(); // 自动播放 mVideoView.start(); ``` 第四步:Activity中: ```java @Override protected void onPause() { super.onPause(); ijkVideoView.pause(); } @Override protected void onResume() { super.onResume(); ijkVideoView.resume(); } @Override protected void onDestroy() { super.onDestroy(); ijkVideoView.release(); // 解决内存泄漏的问题 MemoryLeakUtil.fixLeak(this); } @Override public void onBackPressed() { if (!ijkVideoView.onBackPressed()) { super.onBackPressed(); } } ``` 播放器其他接口使用说明,参照DemoActivity.java里面的代码