Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

PlayerBase将播放器的繁杂功能其业务组件化处理的框架方案

License

Notifications You must be signed in to change notification settings

fenger7/PlayerBase

Repository files navigation

介绍

PlayerBase是一种将播放业务组件化处理的解决方案框架。无论是播放器内的控制视图还是业务视图,均可以做到组件化处理。将播放器的开发变得清晰简单,更利于产品的迭代。框架内包含系统MediaPlayer的解码实现,demo里面有一套完整的IJKPlayer解码方案的实现和接入,请参见源码可以接入其他播放器解码方案。demo自带了播放控制组件、Loading组件,所有UI功能组件可完全自定义。

遇到问题,请联系作者。QQ:309812983 Email:junhui_jia@163.com

效果

image image image image

Demo下载

Demo下载

功能

-解码方案的组件化、配置化管理
-自定义接入各种解码方案
-解码方案的切换
-提供自定义数据提供者
-视图的组件化处理
-统一的事件下发机制
-扩展事件的添加
-支持列表播放中的无缝续播
-支持视频切角处理,边缘阴影效果-
-等功能......

框架的设计

image image image image

详细设计见PPT附件 PPT附件

使用

需要的权限,如果targetSDK版本在Android M以上的,请注意运行时权限的处理。

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

添加如下依赖

dependencies {
 compile 'com.kk.taurus.playerbase:playerbase:3.0.3'
}

代码混淆时,请在proguard中添加如下保护

-keep public class * extends android.view.View{*;}
-keep public class * implements com.kk.taurus.playerbase.player.IPlayer{*;}

使用BaseVideoView对象,可写入xml布局中,也可用代码创建。

<?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">
 <com.kk.taurus.playerbase.widget.BaseVideoView
 android:id="@+id/videoView"
 android:layout_width="match_parent"
 android:layout_height="match_parent"/>
</RelativeLayout>
mVideoView = findViewById(R.id.videoView);
mDataSource = new DataSource("monitor_id");
mVideoView.setOnPlayerEventListener(this);
mVideoView.setOnReceiverEventListener(this);
mVideoView.setReceiverGroup(ReceiverGroupManager.get().getReceiverGroup(this));
//设置数据提供者 MonitorDataProvider
mVideoView.setDataProvider(new MonitorDataProvider());
mVideoView.setDataSource(mDataSource);
mVideoView.start();

接入其他播放器

具体参见项目代码 IjkPlayer。
使用前做如下配置:

PlayerConfig.addDecoderPlan(new DecoderPlan(1, IjkPlayer.class.getName(), "IjkPlayer"));
PlayerConfig.setDefaultPlanId(1);

组件视图

demo自带了Loading组件、Controller组件、CompleteCover组件。
这些组件均继承自父类BaseCover(覆盖层基类)

自定义覆盖层组件

public class CustomCover extends BaseCover{
	
	public CustomCover(Context context) {
 super(context);
 }
 @Override
 public void onPlayerEvent(int eventCode, Bundle bundle) {
 //...
 }
 @Override
 public void onReceiverEvent(int eventCode, Bundle bundle) {
		//...
 }
 @Override
 public void onPrivateEvent(int eventCode, Bundle bundle) {
		//...
 }
 @Override
 public View onCreateCoverView(Context context) {
 return View.inflate(context, R.layout.layout_custom_cover, null);
 }
 
 //......
	
}

自定义组件的使用。

ReceiverGroup receiverGroup = new ReceiverGroup();
receiverGroup.addReceiver("loading_cover", new LoadingCover(context));
receiverGroup.addReceiver("controller_cover", new ControllerCover(context));
mPlayer.setReceiverGroup(receiverGroup);

无缝续播的使用

类似于今日头条等应用的效果,在列表中播放时无缝续播进入详情页或者无缝进入全屏页面。

原理:解码器动态关联不同的渲染视图(RenderView),比如使用MediaPlayer动态关联SurfaceView,就如同一个电脑主机不断连接不同的显示器。
详见项目代码。

交流

联系方式:junhui_jia@163.com QQ群:600201778

About

PlayerBase将播放器的繁杂功能其业务组件化处理的框架方案

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 100.0%

AltStyle によって変換されたページ (->オリジナル) /