对Cling类库所做的封装
数据结构
BaseDeviceItem
设备基类
1 | public class BaseDeviceItem { |
BaseBindableDeviceItem
有绑定专辑功能的设备,持有一个BaseItemBindableModel
BaseItemBindableModel
绑定专辑模型
1 | // 每个键上绑定的专辑列表 |
CommonDevice
支持喜马拉雅协议的通用设备
1 | public abstract class CommonDeviceItem extends BaseBindableDeviceItem { |
BaseCurrentPlayingModel
保存当前播放的数据结构,如当前页,当前列表,当前曲目数deng
LinkedDeviceModel
- 持有一个BaseDeviceItem
- 管理播放状态:播放、停止
- 管理音量
- 透过它获得设备的AV和RC服务
IDlnaController
1 | public interface IDlnaController { |
BaseDlnaController
DLNA控制器基类,实现IDlnaController
接口,维护了设备列表、模块表、ControlPoint
,功能还需要子类实现
CommonController
实现了通用的功能
1 |
|
tuisongExtra()
里主要订阅了播放列表PQService
和媒体管理MMService
1 |
|
change2Bendi()
里进行了退订
1 |
|
playSound()
通过BaseTuiSongModule
的tuisong()
实现
DlnaControllerFactory
通过这个工厂类生成了控制器
1 | public class DlnaControllerFactory { |
保存了一组控制器的构造器,创建时根据控制器的类型选择合适的构造器构造控制器
IDlnaControllerCreator
控制器构造器接口
1 | public interface IDlnaControllerCreator { |
AbsControllerCreator
一个抽象的实现类,构造函数再DlnaManager
中添加了一个控制器1
2
3
4
5
6
7public abstract class AbsControllerCreator implements IDlnaControllerCreator {
protected Context mContext;
public AbsControllerCreator(Context context) {
DlnaManager.getInstance(context).addControllerCreator(this);
mContext = context;
}
}
CometController
举个Comet
设备的例子
1 | public class CometControllerCreator extends AbsControllerCreator { |
BaseDlnaModule
DLNA功能模块基础类
功能的实现都差不多,通过发送的ActionCallback
不同来区分
- BasePlayModule
- BaseDownloadModule
- BaseDlnaKeyModule
- BaseTuisongModule
- BaseManageTFModule
- BaseBindModule
DlnaManager
DLNA功能的管理器,持有一个CoreController
1 | public class DlnaManager { |
- 设备管理
- 控制器管理
- 播放控制
CoreController
核心控制器,BasePlayManageController
的子类
绑定服务
1 | public void bindService(Context context) { |
初始化,绑定到DmcUpnpService
CoreUpnpServiceListener
1 | public interface CoreUpnpServiceListener { |
监听网络状态和路由状态
DeviceListRegistryListener
实现接口RegistryListener
,这个接口主要用来通知设备的添加、删除和更新
1 | public interface RegistryListener { |
搜索设备
通过startScanThread()
和stopScanThread()
方法
创建ScanThread
搜索设备,最终调用upnpService.getControlPoint().search()
设备管理
通过removeDevice()
和removeAllDevices()
移除设备
最终调用Registry
中的移除设备的方法
按键处理
实现了MyPlaySubscriptionCallback.OnPlayKeyHandler
接口
通过BaseDlnaKeyModule
把GENASubscription
结构转化为KeyEvent
,然后调用OnCoreControllerListener.onKeyAciton()
OnCoreControllerListener
1 | public interface OnCoreControllerListener { |
暴露给DlnaManager
的接口,处理设备添加、设备删除、网络变化和按键事件
播放控制
包括推送到设备、切换到本地、(继续)播放、上一曲、下一曲、暂停、停止
1 | public void tuisongDevice(BaseDeviceItem baseDeviceItem) { |
首先通过tuisongDevice()
确定要操作的设备,获得该设备类型的控制器,然后调用IDlnaController.tuisongExtra()
音量控制
进度条控制
提供了setSeekBar
设置进度条,以及PositionThread
来周期性获得播放进度
BasePlayManageController
- 持有一个
LinkedDeviceModel
,记录正在操作的设备 - 订阅事件相关处理
- 实现了
MyPlaySubscriptionCallback.OnPlayKeyHandler
接口(并没实现,仍需要子类实现)
DmcUpnpService
通过绑定这个服务调用UpnpService
提供的功能,返回AndroidUpnpService
接口
1 | public interface AndroidUpnpService { |
通过createUpnpService()
创建一个UPnP服务,提供配置、路由等信息