UPNP 功能的實現
UPNP 媒體播放器作爲一個 UPNP 家庭網絡中的媒體播放器,還可對網絡中的多媒體文
件進行播放的功能,同時它也是一個 UPNP 設備,應該支持 UPNP 規定的一些功能,包括設
備發現,設備描述,設備控制等功能。
- 初始化整個 UPNP 協議棧
在 UPNP 媒體播放器中的播放頁面 PlayerActivity 中完成 UPNP 協議棧的初始化,通過調
用 cling 開發庫中的 AndroidUpnpService 接口來實現
public interface AndroidUpnpService {
public UpnpService get();
public UpnpServiceConfiguration getConfiguration();
public Registry getRegistry();
public ControlPoint getControlPoint();
}
- 設備註冊和初始化
在設備註冊前,應先創建一個 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());
}
- 在 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());
}
}