DLNA代码实现

1,771 阅读2分钟

通过上篇文章已经介绍了DLNA的相关知识。接下来介绍一下开源库的使用。 在DLNA开发中有以下几个常用的开源库

1.Cling

github.com/4thline/cli…

Cling 类库是由 Java 实现的 DLNA/UPnP 协议栈,市面上很多支持 DLNA 功能的 App 都是使用的此库。

2.Platinumkit

www.plutinosoft.com/platinum/

(1)由C++编写
(2)支持Windows, Mac OSX, Linux, iPhone, Android
(3)代码非常漂亮,属于自注释型,结合UPnP协议文档很容易看懂
(4)示例比较丰富,实现了多种UPnP的Device示例,包括:MediaRenderer,MediaServer,Media Control Point,Light Control 等等。

在android中需要自己实现对应jni库,乐播投屏使用的是该框架。

3.cyberlink

www.cybergarage.org/oss/

github.com/CharonChui/…

第一个链接是官网文档,第二个链接是 开源的在android中使用的开源库,但是很久都没有再维护。

1.Cling 的总体设计

Cling库包含两个核心模块

  • Cling Core
    

核心类库,基于 UDA1.0,实现了定义服务,设备发现,通过 ControlPoint 发送指令等 UPnP 的基本功能。

  • Cling Support
    

顾名思义该包为 Cling 中一些功能的扩展,如:avtransport,lastchange 等。

Cling 作为 UPnP 协议栈,其主旨即是在设备的发现,控制等过程中对不同的协议及内容进行处理。UPnP 协议栈由多个层组成,Cling 只关心底层的 TCP/IP 协议以及包含 SSDP(设备发现),SOAP(设备控制),GENA(设备事件)协议的层。

1.1 总体流程图

image.png

1.2 类图关系

image.png

由类图可知,Cling 的一切都是从 UpnpService 开始的,其中包含了 ControlPoint,ProtocolFactory,Registry,Router 四个核心模块,以及一个配置信息类 UpnpServiceConfiguration。下面就从Cling 源码当中UpnpService 逐步分析。

1.3 创建本地设备

image.png

/**
 * 创建本地根设备
 *
 * @param friendName             显示的名称
 * @param uniCode                唯一码
 * @param avTransportServiceImpl 指令服务实现
 * @param audioRenderServiceImpl 声音控制服务实现
 * @return 返回本地设备 LocalDevice
 * @throws ValidationException 创建本地设备时 抛出的异常
 */
public static LocalDevice createRendererDevice(String friendName, String uniCode, AVTransportServiceImpl avTransportServiceImpl, AudioRenderServiceImpl audioRenderServiceImpl) throws ValidationException {
    DeviceIdentity deviceIdentity = new DeviceIdentity(createUniqueSystemIdentifier(uniCode));
    UDADeviceType deviceType = new UDADeviceType(TYPE_MEDIA_PLAYER, VERSION);
    DeviceDetails details = new DeviceDetails(friendName, new ManufacturerDetails(android.os.Build.MANUFACTURER), new ModelDetails(android.os.Build.MODEL, DMS_DESC, MODEL_NUM));
    return new LocalDevice(deviceIdentity, deviceType, details, generateLocalServices(avTransportServiceImpl, audioRenderServiceImpl));
}

1.4 创建Upnp服务

image.png

1.5 发布设备

image.png

2 通讯过程协议 详见 协议