UPnP - DLNA 协议说明与下载
很多电视以及电视中的播放软件支持DLNA, 可以用来投屏播放
DLNA(DIGITAL LIVING NETWORK ALLIANCE) 是由索尼、英特尔、微软等发起成立的一个非营利性的商业组织
DLNA旨在解决个人PC, 消费电器,移动设备在内的无线网络和有线网络的互联互通,使得数字媒体和内容服务的无限制的共享和增长成为可能。
DLNA的口号是Enjoy your music, photos and videos, anywhere anytime。
2017年DLNA在其官网宣布:本组织的使命已经完成,已于2017年1月5日正式解散,相关的认证将移交给SpireSpark公司
SpireSpark 网站我没找到文档, 在openconnectivity 找到
https://openconnectivity.org/upnp-specs/upnpresources.zip
在其中分类 MediaServer_4 and MediaRenderer_3
其中有测试文件 UPnP-av-TestFiles-20150630 可以看到大概的支持的命令和参数, 详细的可以参考pdf文档
<action>
<name>SetAVTransportURI</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
<argument>
<name>CurrentURI</name>
<direction>in</direction>
<relatedStateVariable>AVTransportURI</relatedStateVariable>
</argument>
<argument>
<name>CurrentURIMetaData</name>
<direction>in</direction>
<relatedStateVariable>AVTransportURIMetaData</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<Optional/>
<name>SetNextAVTransportURI</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
<argument>
<name>NextURI</name>
<direction>in</direction>
<relatedStateVariable>NextAVTransportURI</relatedStateVariable>
</argument>
<argument>
<name>NextURIMetaData</name>
<direction>in</direction>
<relatedStateVariable>NextAVTransportURIMetaData</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<name>GetMediaInfo</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
<argument>
<name>NrTracks</name>
<direction>out</direction>
<relatedStateVariable>NumberOfTracks</relatedStateVariable>
</argument>
<argument>
<name>MediaDuration</name>
<direction>out</direction>
<relatedStateVariable>CurrentMediaDuration</relatedStateVariable>
</argument>
<argument>
<name>CurrentURI</name>
<direction>out</direction>
<relatedStateVariable>AVTransportURI</relatedStateVariable>
</argument>
<argument>
<name>CurrentURIMetaData</name>
<direction>out</direction>
<relatedStateVariable>AVTransportURIMetaData</relatedStateVariable>
</argument>
<argument>
<name>NextURI</name>
<direction>out</direction>
<relatedStateVariable>NextAVTransportURI</relatedStateVariable>
</argument>
<argument>
<name>NextURIMetaData</name>
<direction>out</direction>
<relatedStateVariable>NextAVTransportURIMetaData</relatedStateVariable>
</argument>
<argument>
<name>PlayMedium</name>
<direction>out</direction>
<relatedStateVariable>PlaybackStorageMedium</relatedStateVariable>
</argument>
<argument>
<name>RecordMedium</name>
<direction>out</direction>
<relatedStateVariable>RecordStorageMedium</relatedStateVariable>
</argument>
<argument>
<name>WriteStatus</name>
<direction>out</direction>
<relatedStateVariable>RecordMediumWriteStatus</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<name>GetMediaInfo_Ext</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
<argument>
<name>CurrentType</name>
<direction>out</direction>
<relatedStateVariable>CurrentMediaCategory</relatedStateVariable>
</argument>
<argument>
<name>NrTracks</name>
<direction>out</direction>
<relatedStateVariable>NumberOfTracks</relatedStateVariable>
</argument>
<argument>
<name>MediaDuration</name>
<direction>out</direction>
<relatedStateVariable>CurrentMediaDuration</relatedStateVariable>
</argument>
<argument>
<name>CurrentURI</name>
<direction>out</direction>
<relatedStateVariable>AVTransportURI</relatedStateVariable>
</argument>
<argument>
<name>CurrentURIMetaData</name>
<direction>out</direction>
<relatedStateVariable>AVTransportURIMetaData</relatedStateVariable>
</argument>
<argument>
<name>NextURI</name>
<direction>out</direction>
<relatedStateVariable>NextAVTransportURI</relatedStateVariable>
</argument>
<argument>
<name>NextURIMetaData</name>
<direction>out</direction>
<relatedStateVariable>NextAVTransportURIMetaData</relatedStateVariable>
</argument>
<argument>
<name>PlayMedium</name>
<direction>out</direction>
<relatedStateVariable>PlaybackStorageMedium</relatedStateVariable>
</argument>
<argument>
<name>RecordMedium</name>
<direction>out</direction>
<relatedStateVariable>RecordStorageMedium</relatedStateVariable>
</argument>
<argument>
<name>WriteStatus</name>
<direction>out</direction>
<relatedStateVariable>RecordMediumWriteStatus</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<name>GetTransportInfo</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
<argument>
<name>CurrentTransportState</name>
<direction>out</direction>
<relatedStateVariable>TransportState</relatedStateVariable>
</argument>
<argument>
<name>CurrentTransportStatus</name>
<direction>out</direction>
<relatedStateVariable>TransportStatus</relatedStateVariable>
</argument>
<argument>
<name>CurrentSpeed</name>
<direction>out</direction>
<relatedStateVariable>TransportPlaySpeed</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<name>GetPositionInfo</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
<argument>
<name>Track</name>
<direction>out</direction>
<relatedStateVariable>CurrentTrack</relatedStateVariable>
</argument>
<argument>
<name>TrackDuration</name>
<direction>out</direction>
<relatedStateVariable>CurrentTrackDuration</relatedStateVariable>
</argument>
<argument>
<name>TrackMetaData</name>
<direction>out</direction>
<relatedStateVariable>CurrentTrackMetaData</relatedStateVariable>
</argument>
<argument>
<name>TrackURI</name>
<direction>out</direction>
<relatedStateVariable>CurrentTrackURI</relatedStateVariable>
</argument>
<argument>
<name>RelTime</name>
<direction>out</direction>
<relatedStateVariable>RelativeTimePosition</relatedStateVariable>
</argument>
<argument>
<name>AbsTime</name>
<direction>out</direction>
<relatedStateVariable>AbsoluteTimePosition</relatedStateVariable>
</argument>
<argument>
<name>RelCount</name>
<direction>out</direction>
<relatedStateVariable>RelativeCounterPosition</relatedStateVariable>
</argument>
<argument>
<name>AbsCount</name>
<direction>out</direction>
<relatedStateVariable>AbsoluteCounterPosition</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<name>GetDeviceCapabilities</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
<argument>
<name>PlayMedia</name>
<direction>out</direction>
<relatedStateVariable>PossiblePlaybackStorageMedia</relatedStateVariable>
</argument>
<argument>
<name>RecMedia</name>
<direction>out</direction>
<relatedStateVariable>PossibleRecordStorageMedia</relatedStateVariable>
</argument>
<argument>
<name>RecQualityModes</name>
<direction>out</direction>
<relatedStateVariable>PossibleRecordQualityModes</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<name>GetTransportSettings</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
<argument>
<name>PlayMode</name>
<direction>out</direction>
<relatedStateVariable>CurrentPlayMode</relatedStateVariable>
</argument>
<argument>
<name>RecQualityMode</name>
<direction>out</direction>
<relatedStateVariable>CurrentRecordQualityMode</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<name>Stop</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<name>Play</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
<argument>
<name>Speed</name>
<direction>in</direction>
<relatedStateVariable>TransportPlaySpeed</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<Optional/>
<name>Pause</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<Optional/>
<name>Record</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<name>Seek</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
<argument>
<name>Unit</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_SeekMode</relatedStateVariable>
</argument>
<argument>
<name>Target</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_SeekTarget</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<name>Next</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<name>Previous</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<Optional/>
<name>SetPlayMode</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
<argument>
<name>NewPlayMode</name>
<direction>in</direction>
<relatedStateVariable>CurrentPlayMode</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<Optional/>
<name>SetRecordQualityMode</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
<argument>
<name>NewRecordQualityMode</name>
<direction>in</direction>
<relatedStateVariable>CurrentRecordQualityMode</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<Optional/>
<name>GetCurrentTransportActions</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
<argument>
<name>Actions</name>
<direction>out</direction>
<relatedStateVariable>CurrentTransportActions</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<Optional/>
<name>GetDRMState</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
<argument>
<name>CurrentDRMState</name>
<direction>out</direction>
<relatedStateVariable>DRMState</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<Optional/>
<name>GetStateVariables</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
<argument>
<name>StateVariableList</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_StateVariableList</relatedStateVariable>
</argument>
<argument>
<name>StateVariableValuePairs</name>
<direction>out</direction>
<relatedStateVariable>A_ARG_TYPE_StateVariableValuePairs</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<Optional/>
<name>SetStateVariables</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
<argument>
<name>AVTransportUDN</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_DeviceUDN</relatedStateVariable>
</argument>
<argument>
<name>ServiceType</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_ServiceType</relatedStateVariable>
</argument>
<argument>
<name>ServiceId</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_ServiceID</relatedStateVariable>
</argument>
<argument>
<name>StateVariableValuePairs</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_StateVariableValuePairs</relatedStateVariable>
</argument>
<argument>
<name>StateVariableList</name>
<direction>out</direction>
<relatedStateVariable>A_ARG_TYPE_StateVariableList</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<Optional/>
<name>AdjustSyncOffset</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
<argument>
<name>Adjustment</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_SyncOffsetAdj</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<Optional/>
<name>GetSyncOffset</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
<argument>
<name>CurrentSyncOffset</name>
<direction>out</direction>
<relatedStateVariable>SyncOffset</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<Optional/>
<name>SetSyncOffset</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
<argument>
<name>NewSyncOffset</name>
<direction>in</direction>
<relatedStateVariable>SyncOffset</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<Optional/>
<name>SyncPlay</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
<argument>
<name>Speed</name>
<direction>in</direction>
<relatedStateVariable>TransportPlaySpeed</relatedStateVariable>
</argument>
<argument>
<name>ReferencePositionUnits</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_SeekMode</relatedStateVariable>
</argument>
<argument>
<name>ReferencePosition</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_SeekTarget</relatedStateVariable>
</argument>
<argument>
<name>ReferencePresentationTime</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_PresentationTime</relatedStateVariable>
</argument>
<argument>
<name>ReferenceClockId</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_ClockId</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<Optional/>
<name>SyncPause</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
<argument>
<name>PauseTime</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_PresentationTime</relatedStateVariable>
</argument>
<argument>
<name>ReferenceClockId</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_ClockId</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<Optional/>
<name>SyncStop</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
<argument>
<name>StopTime</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_PresentationTime</relatedStateVariable>
</argument>
<argument>
<name>ReferenceClockId</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_ClockId</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<Optional/>
<name>SetStaticPlaylist</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
<argument>
<name>PlaylistData</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_PlaylistData</relatedStateVariable>
</argument>
<argument>
<name>PlaylistDataLength</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_PlaylistDataLength</relatedStateVariable>
</argument>
<argument>
<name>PlaylistOffset</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_PlaylistOffset</relatedStateVariable>
</argument>
<argument>
<name>PlaylistTotalLength</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_PlaylistTotalLength</relatedStateVariable>
</argument>
<argument>
<name>PlaylistMIMEType</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_PlaylistMIMEType</relatedStateVariable>
</argument>
<argument>
<name>PlaylistExtendedType</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_PlaylistExtendedType</relatedStateVariable>
</argument>
<argument>
<name>PlaylistStartObj</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_PlaylistStartObjID</relatedStateVariable>
</argument>
<argument>
<name>PlaylistStartGroup</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_PlaylistStartGroupID</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<Optional/>
<name>SetStreamingPlaylist</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
<argument>
<name>PlaylistData</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_PlaylistData</relatedStateVariable>
</argument>
<argument>
<name>PlaylistDataLength</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_PlaylistDataLength</relatedStateVariable>
</argument>
<argument>
<name>PlaylistMIMEType</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_PlaylistMIMEType</relatedStateVariable>
</argument>
<argument>
<name>PlaylistExtendedType</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_PlaylistExtendedType</relatedStateVariable>
</argument>
<argument>
<name>PlaylistStep</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_PlaylistStep</relatedStateVariable>
</argument>
</argumentList>
</action>
<action>
<Optional/>
<name>GetPlaylistInfo</name>
<argumentList>
<argument>
<name>InstanceID</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_InstanceID</relatedStateVariable>
</argument>
<argument>
<name>PlaylistType</name>
<direction>in</direction>
<relatedStateVariable>A_ARG_TYPE_PlaylistType</relatedStateVariable>
</argument>
<argument>
<name>PlaylistInfo</name>
<direction>out</direction>
<relatedStateVariable>A_ARG_TYPE_PlaylistInfo</relatedStateVariable>
</argument>
</argumentList>
</action>
</actionList>
<TestCase>
<Id>1</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>ListPresets</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>2</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>SelectPreset</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
<PresetName>FactoryDefaults</PresetName>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>3</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>GetBrightness</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>4</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>SetBrightness</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
<DesiredBrightness>0</DesiredBrightness>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>5</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>GetContrast</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>6</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>SetContrast</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
<DesiredContrast>0</DesiredContrast>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>7</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>GetSharpness</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>8</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>SetSharpness</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
<DesiredContrast>0</DesiredContrast>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>9</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>GetRedVideoGain</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>10</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>SetRedVideoGain</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
<DesiredRedVideoGain>0</DesiredRedVideoGain>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>11</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>GetGreenVideoGain</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>12</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>SetGreenVideoGain</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
<DesiredGreenVideoGain>0</DesiredGreenVideoGain>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>13</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>GetBlueVideoGain</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>14</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>SetBlueVideoGain</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
<DesiredBlueVideoGain>0</DesiredBlueVideoGain>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>15</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>GetRedVideoBlackLevel</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>16</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>SetRedVideoBlackLevel</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
<DesiredRedVideoBlackLevel>0</DesiredRedVideoBlackLevel>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>17</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>GetGreenVideoBlackLevel</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>18</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>SetGreenVideoBlackLevel</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
<DesiredGreenVideoBlackLevel>0</DesiredGreenVideoBlackLevel>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>19</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>GetBlueVideoBlackLevel</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>20</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>SetBlueVideoBlackLevel</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
<DesiredBlueVideoBlackLevel>0</DesiredBlueVideoBlackLevel>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>21</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>GetColorTemperature</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>22</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>SetColorTemperature</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
<DesiredColorTemperature>0</DesiredColorTemperature>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>23</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>GetHorizontalKeystone</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>24</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>SetHorizontalKeystone</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
<DesiredHorizontalKeystone>0</DesiredHorizontalKeystone>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>25</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>GetVerticalKeystone</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>26</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>SetVerticalKeystone</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
<DesiredVerticalKeystone>0</DesiredVerticalKeystone>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>27</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>GetMute</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
<Channel>Master</Channel>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>28</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>SetMute</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
<Channel>Master</Channel>
<DesiredMute>1</DesiredMute>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>29</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>GetVolume</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
<Channel>Master</Channel>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>30</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>SetVolume</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
<Channel>Master</Channel>
<DesiredVolume>0</DesiredVolume>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>31</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>GetVolumeDB</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
<Channel>Master</Channel>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>32</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>SetVolumeDB</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
<Channel>Master</Channel>
<DesiredVolume>0</DesiredVolume>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>33</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>GetVolumeDBRange</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
<Channel>Master</Channel>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>34</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>GetLoudness</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
<Channel>Master</Channel>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>35</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>SetLoudness</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
<Channel>Master</Channel>
<DesiredLoudness>1</DesiredLoudness>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>36</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>GetStateVariables</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
<StateVariableList>*</StateVariableList>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>37</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>SetStateVariables</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
<RenderingControlUDN>any-string</RenderingControlUDN>
<ServiceType>RenderingControl:2</ServiceType>
<ServiceId>RenderingControl</ServiceId>
<StateVariableValuePairs>any-string</StateVariableValuePairs>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>38</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>GetAllowedTransforms</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>39</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>SetTransforms</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
<DesiredTransformValues><TransformSettings xmlns="urn:schemas-upnp-org:av:TransformSettings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:schemas-upnp-org:av:TransformSettings http://www.upnp.org/schemas/av/avs.xsd"> <transform name="HorizontalPan"><value index="0">100</value></transform></TransformSettings></DesiredTransformValues>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>40</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>GetTransforms</ActionName>
<InArgs>
<InstanceID>0</InstanceID>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>41</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>GetAllAvailableTransforms</ActionName>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>42</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>GetAllowedDefaultTransforms</ActionName>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>43</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>GetDefaultTransforms</ActionName>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
<TestCase>
<Id>44</Id>
<Category>Valid Action And Valid InArgs</Category>
<ActionName>SetDefaultTransforms</ActionName>
<InArgs>
<DesiredDefaultTransformSettings><?xml version="1.0" encoding="UTF-8"?><TransformSettings xmlns="urn:schemas-upnp-org:av:TransformSettings" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:schemas-upnp-org:av:TransformSettings http://www.upnp.org/schemas/av/avs.xsd"><transform name="Rotation"><value>90</value></transform></TransformSettings></DesiredDefaultTransformSettings>
</InArgs>
<ExpectedReturnCode>ACTION_AND_INARGS_ARE_VALID</ExpectedReturnCode>
</TestCase>
</TestCaseList>