UPNP 功能的实现

UPNP 媒体播放器作为一个 UPNP 家庭网络中的媒体播放器,还可对网络中的多媒体文
件进行播放的功能,同时它也是一个 UPNP 设备,应该支持 UPNP 规定的一些功能,包括设
备发现,设备描述,设备控制等功能。

  1. 初始化整个 UPNP 协议栈
    在 UPNP 媒体播放器中的播放页面 PlayerActivity 中完成 UPNP 协议栈的初始化,通过调
    用 cling 开发库中的 AndroidUpnpService 接口来实现
public interface AndroidUpnpService {
 public UpnpService get();
public UpnpServiceConfiguration getConfiguration();
public Registry getRegistry();
public ControlPoint getControlPoint();
}
  1. 设备注册和初始化
    在设备注册前,应先创建一个 UPNP 设备,用 createDevice()函数完成对设备的初始化,
    注册设备描述文档。其中设备描述包括设备的名称,类型、详细信息等。
protected LocalDevice createDevice()
{
 DeviceType type = new UDADeviceType("UpnpPlayer", 1); //设备名称
 DeviceDetailsdetails=newDeviceDetails("UpnpPlayeron"
 ModelUtil.getLocalHostName(false), //设备详细信息
 New ManufacturerDetails("UpnpPlayer", "http://www.njupt.edu.cn")); //设备制造商
 DeviceIdentity identity = new DeviceIdentity(udn);
 return new LocalDevice( identity, type, details,createService());
 }
  1. 在 UPNP 设备中添加所需的 UPNP 服务
    本项目中所实现的媒体播放器包含的服务有:
    连接管理服务和内容传输服务。其中连接管理服务主要用来管理与媒体服务器之间的连接。
public LocalService<?>[] createService()
{
LocalService<?> Service_Connect = localServiceConnect(); //连接管理服务
LocalService<?> Service_Transport = localServiceAvtransport(); //内容传输服务
LocalService<?> [] localService ={ Service_Connect ,Service_Transport };
return localService;
}

当设备和服务都创建好之后,就需要将此设备添加到注册表中以便能够将此设备信息及服
务信息发布到 UPNP 网络中。需要调用 Cling 开发库中的 addDevice()方法:

upnpService.getRegistry().addDevice(UpnpPlayerDevice);

其中 UpnpPlayerDevice 为创建好的媒体播放器设备。
4. 控制点发送命令,媒体播放器接收处理
根据媒体播放器的工作流程可知,当控制点选择好媒体播放器上的多媒体文件后,需要
将媒体文件的 URL 发送给媒体播放器,这时会触发设置媒体播放器的传输地址这一动作,则
会调用内容传输服务中的 SetAVTransportURI()给媒体播放器提供多媒体文件的 URL。

获得 URL 后,调用内容传输服务中的 play()接口开始媒体内容传输动作。
当控制点在网络多媒体服务器上定位了一个多媒体文件时,再通过选择对应的多媒体播
放器则会触发设置传输地址这个动作。在本设计中调用 propertyChange 这个方法去实现。

public void propertyChange(PropertyChangeEvent event)
 {
 if (event.getPropertyName().equals("AVTransportURI"))
 {
 log.info("Turning light: " + event.getNewValue());
 playVideo((String) event.getNewValue());
 }
 }