private UPnPError OnGetChannelGroups(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { outParams = new List <object>(); IChannelAndGroupInfo channelAndGroupInfo = ServiceRegistration.Get <ITvProvider>() as IChannelAndGroupInfo; if (channelAndGroupInfo == null) { return(new UPnPError(500, "IChannelAndGroupInfo service not available")); } IList <IChannelGroup> groups; bool result = channelAndGroupInfo.GetChannelGroups(out groups); outParams = new List <object> { result, groups }; return(null); }
static UPnPError OnUpdateUserProfileImage(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { Guid profileId = MarshallingHelper.DeserializeGuid((string)inParams[0]); string profileImage = (string)inParams[1]; byte[] image = null; if (!string.IsNullOrEmpty(profileImage)) { image = Convert.FromBase64String(profileImage); } bool success = ServiceRegistration.Get <IUserProfileDataManagement>().SetProfileImageAsync(profileId, image).Result; outParams = new List <object> { success }; return(null); }
private UPnPError OnIsCurrentlyRecording(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { outParams = new List <object>(); IScheduleControlAsync scheduleControl = ServiceRegistration.Get <ITvProvider>() as IScheduleControlAsync; if (scheduleControl == null) { return(new UPnPError(500, "IProgramInfo or IScheduleControl service not available")); } string fileName = (string)inParams[0]; AsyncResult <ISchedule> result = scheduleControl.IsCurrentlyRecordingAsync(fileName).Result; outParams = new List <object> { result.Success, result.Result }; return(null); }
private UPnPError OnDeInit(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { outParams = new List <object>(); ITimeshiftControlEx timeshiftControl = ServiceRegistration.Get <ITvProvider>() as ITimeshiftControlEx; if (timeshiftControl == null) { return(new UPnPError(500, "ITimeshiftControl service not available")); } // We use the client's RemoteAdress as unique "user name", so we do not need to pass this argument from clients via UPnP. timeshiftControl.StopTimeshift(BuildUserName(context), 0); timeshiftControl.StopTimeshift(BuildUserName(context), 1); outParams = new List <object> { true }; return(null); }
private UPnPError OnGetSchedules(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { outParams = new List <object>(); IProgramInfoAsync programInfo = ServiceRegistration.Get <ITvProvider>() as IProgramInfoAsync; IScheduleControlAsync scheduleControl = ServiceRegistration.Get <ITvProvider>() as IScheduleControlAsync; if (programInfo == null || scheduleControl == null) { return(new UPnPError(500, "IProgramInfo or IScheduleControl service not available")); } AsyncResult <IList <ISchedule> > result = scheduleControl.GetSchedulesAsync().Result; outParams = new List <object> { result.Success, result.Result }; return(null); }
static UPnPError OnExpandResourcePathFromString(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { Guid resourceProviderId = MarshallingHelper.DeserializeGuid((string)inParams[0]); string pathStr = (string)inParams[1]; IMediaAccessor mediaAccessor = ServiceRegistration.Get <IMediaAccessor>(); ResourcePath result = null; IResourceProvider rp; if (mediaAccessor.LocalResourceProviders.TryGetValue(resourceProviderId, out rp) && rp is IBaseResourceProvider) { result = ((IBaseResourceProvider)rp).ExpandResourcePathFromString(pathStr); } outParams = new List <object> { result == null ? null : result.Serialize() }; return(null); }
private static UPnPError OnStop(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { TraceLogger.DebugLogParams(inParams); ChangeStateVariables(new List <string> { "TransportState" }, new List <object> { "STOPPED" }, action); OnEventStop(); // FireEfent outParams = action.OutArguments.Select(outArgument => outArgument.RelatedStateVar.Value).ToList(); return(null); }
// User playlist data static UPnPError OnGetUserPlaylistData(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { Guid profileId = MarshallingHelper.DeserializeGuid((string)inParams[0]); Guid playlistId = MarshallingHelper.DeserializeGuid((string)inParams[1]); string key = (string)inParams[2]; string data; bool success; if (!(success = ServiceRegistration.Get <IUserProfileDataManagement>().GetUserPlaylistData(profileId, playlistId, key, out data))) { data = null; } outParams = new List <object> { data, success }; return(null); }
private static UPnPError OnSetVolume(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { TraceLogger.DebugLogParams(inParams); ChangeStateVariable("Volume", inParams[2], action); // we don't want to fire an event yet //action.ParentService.StateVariables["Volume"].Value = inParams[2]; OnEvenSetVolumeEventArgs eventArgs = new OnEvenSetVolumeEventArgs(); eventArgs.Volume = inParams[2]; OnEventVolume(eventArgs); // Fire Event outParams = action.OutArguments.Select(outArgument => outArgument.RelatedStateVar.Value).ToList(); return(null); }
static UPnPError OnSetUserMediaItemData(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { Guid profileId = MarshallingHelper.DeserializeGuid((string)inParams[0]); Guid mediaItemId = MarshallingHelper.DeserializeGuid((string)inParams[1]); string key = (string)inParams[2]; string data = (string)inParams[3]; bool success = ServiceRegistration.Get <IUserProfileDataManagement>().SetUserMediaItemDataAsync(profileId, mediaItemId, key, data).Result; if (success) { ServiceRegistration.Get <IMediaLibrary>().UserDataUpdated(profileId, mediaItemId, key, data); } outParams = new List <object> { success }; return(null); }
static UPnPError OnGetFilesData(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { outParams = null; ResourcePath path = ResourcePath.Deserialize((string)inParams[0]); if (path == null) { return(new UPnPError(600, "Invalid resource path")); } if (!IsAllowedToAccess(path)) { return(new UPnPError(600, "Access is not allowed to this resource path")); } IResourceAccessor ra; if (!path.TryCreateLocalResourceAccessor(out ra)) { return(new UPnPError(600, "The given path is not accessible")); } using (ra) { ICollection <IFileSystemResourceAccessor> res = FileSystemResourceNavigator.GetFiles(ra, false); IList <ResourcePathMetadata> result = null; if (res != null) { result = new List <ResourcePathMetadata>(); foreach (IFileSystemResourceAccessor fileAccessor in res) { using (fileAccessor) result.Add(new ResourcePathMetadata { ResourceName = fileAccessor.ResourceName, HumanReadablePath = fileAccessor.ResourcePathName, ResourcePath = fileAccessor.CanonicalLocalResourcePath }); } } outParams = new List <object> { result }; } return(null); }
private static UPnPError OnSetAVTransportURI(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { TraceLogger.DebugLogParams(inParams); ChangeStateVariables(new List <string> { "AVTransportURI", "AVTransportURIMetaData", "PlaybackStorageMedium" }, new List <object> { inParams[1], inParams[2], "NETWORK" // we always play from a network resource }, action); // From the Documentation: // If the current transport state is “NO MEDIA PRESENT” the transport state changes to “STOPPED”. // In all other cases, this action does not change the transport state of the specified instance. if (action.ParentService.StateVariables["TransportState"].Value.ToString() == "NO_MEDIA_PRESENT") { TraceLogger.WriteLine("Change State to STOPPED"); ChangeStateVariables(new List <string> { "TransportState" }, new List <object> { "STOPPED" }, action); } outParams = action.OutArguments.Select(outArgument => outArgument.RelatedStateVar.Value).ToList(); OnEventSetAVTransportURIEventArgs eventArgs = new OnEventSetAVTransportURIEventArgs { CurrentURI = inParams[1] as string, CurrentURIMetaData = inParams[2] as string }; OnEventSetAVTransportURI(eventArgs); TraceLogger.WriteLine("OnSetAVTransportURI RETURN"); return(null); }
private UPnPError OnGetProgramsForSchedule(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { outParams = new List <object>(); IScheduleControl scheduleControl = ServiceRegistration.Get <ITvProvider>() as IScheduleControl; if (scheduleControl == null) { return(new UPnPError(500, "IProgramInfo or IScheduleControl service not available")); } ISchedule schedule = (ISchedule)inParams[0]; IList <IProgram> programs; bool result = scheduleControl.GetProgramsForSchedule(schedule, out programs); outParams = new List <object> { result, programs }; return(null); }
private UPnPError OnGetSchedules(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { outParams = new List <object>(); IProgramInfo programInfo = ServiceRegistration.Get <ITvProvider>() as IProgramInfo; IScheduleControl scheduleControl = ServiceRegistration.Get <ITvProvider>() as IScheduleControl; if (programInfo == null || scheduleControl == null) { return(new UPnPError(500, "IProgramInfo or IScheduleControl service not available")); } IList <ISchedule> schedules; bool result = scheduleControl.GetSchedules(out schedules); outParams = new List <object> { result, schedules }; return(null); }
private UPnPError OnGetProgramsForSchedule(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { outParams = new List <object>(); IScheduleControlAsync scheduleControl = ServiceRegistration.Get <ITvProvider>() as IScheduleControlAsync; if (scheduleControl == null) { return(new UPnPError(500, "IProgramInfo or IScheduleControl service not available")); } ISchedule schedule = (ISchedule)inParams[0]; AsyncResult <IList <IProgram> > result = scheduleControl.GetProgramsForScheduleAsync(schedule).Result; outParams = new List <object> { result.Success, result.Result }; return(null); }
private UPnPError OnRemoveSchedule(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { outParams = new List <object>(); IProgramInfoAsync programInfo = ServiceRegistration.Get <ITvProvider>() as IProgramInfoAsync; IScheduleControlAsync scheduleControl = ServiceRegistration.Get <ITvProvider>() as IScheduleControlAsync; if (programInfo == null || scheduleControl == null) { return(new UPnPError(500, "IProgramInfo or IScheduleControl service not available")); } ISchedule schedule = (ISchedule)inParams[0]; bool result = scheduleControl.RemoveScheduleAsync(schedule).Result; outParams = new List <object> { result }; return(null); }
private UPnPError OnIsCurrentlyRecording(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { outParams = new List <object>(); IScheduleControl scheduleControl = ServiceRegistration.Get <ITvProvider>() as IScheduleControl; if (scheduleControl == null) { return(new UPnPError(500, "IProgramInfo or IScheduleControl service not available")); } string fileName = (string)inParams[0]; ISchedule schedule; bool result = scheduleControl.IsCurrentlyRecording(fileName, out schedule); outParams = new List <object> { result, schedule }; return(null); }
private static UPnPError OnGetBlueVideoBlackLevel(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { TraceLogger.DebugLogParams(inParams); foreach (var inArgument in action.InArguments) { TraceLogger.WriteLine("In Argument: " + inArgument.Name); switch (inArgument.Name) { case "InstanceID": inArgument.RelatedStateVar.Value = inParams[0]; break; } } outParams = action.OutArguments.Select(outArgument => outArgument.RelatedStateVar.Value).ToList(); return(null); }
private UPnPError OnRemoveSchedule(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { outParams = new List <object>(); IProgramInfo programInfo = ServiceRegistration.Get <ITvProvider>() as IProgramInfo; IScheduleControl scheduleControl = ServiceRegistration.Get <ITvProvider>() as IScheduleControl; if (programInfo == null || scheduleControl == null) { return(new UPnPError(500, "IProgramInfo or IScheduleControl service not available")); } int programId = (int)inParams[0]; IProgram program; bool result = programInfo.GetProgram(programId, out program) && scheduleControl.RemoveSchedule(program); outParams = new List <object> { result }; return(null); }
protected static string CreateResultDocument(DvAction action, IList <OutParameter> outParameters, bool forceSimpleValues) { StringBuilder result = new StringBuilder(2000); using (StringWriterWithEncoding stringWriter = new StringWriterWithEncoding(result, UPnPConsts.UTF8_NO_BOM)) using (XmlWriter writer = XmlWriter.Create(stringWriter, UPnPConfiguration.DEFAULT_XML_WRITER_SETTINGS)) { SoapHelper.WriteSoapEnvelopeStart(writer, true); writer.WriteStartElement("u", action.Name + "Response", action.ParentService.ServiceTypeVersion_URN); foreach (OutParameter parameter in outParameters) { writer.WriteStartElement(parameter.Argument.Name); parameter.Argument.SoapSerializeArgument(parameter.Value, forceSimpleValues, writer); writer.WriteEndElement(); // parameter.Argument.Name } writer.WriteEndElement(); // u:[action.Name]Response SoapHelper.WriteSoapEnvelopeEndAndClose(writer); } return(result.ToString()); }
private UPnPError OnGetNowNextProgram(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { outParams = new List <object>(); IProgramInfoAsync programInfo = ServiceRegistration.Get <ITvProvider>() as IProgramInfoAsync; if (programInfo == null) { return(new UPnPError(500, "IProgramInfo service not available")); } int channelId = (int)inParams[0]; AsyncResult <IProgram[]> result = programInfo.GetNowNextProgramAsync(new Channel { ChannelId = channelId }).Result; outParams = new List <object> { result.Success, result.Result[0], result.Result[1] }; return(null); }
private UPnPError OnStopTimeshift(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { outParams = new List <object>(); ITimeshiftControlEx timeshiftControl = ServiceRegistration.Get <ITvProvider>() as ITimeshiftControlEx; if (timeshiftControl == null) { return(new UPnPError(500, "ITimeshiftControl service not available")); } int slotIndex = (int)inParams[0]; // We use the client's RemoteAdress as unique "user name", so we do not need to pass this argument from clients via UPnP. bool result = timeshiftControl.StopTimeshiftAsync(BuildUserName(context), slotIndex).Result; outParams = new List <object> { result }; return(null); }
private UPnPError OnGetChannels(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { outParams = new List <object>(); IChannelAndGroupInfoAsync channelAndGroupInfo = ServiceRegistration.Get <ITvProvider>() as IChannelAndGroupInfoAsync; if (channelAndGroupInfo == null) { return(new UPnPError(500, "IChannelAndGroupInfo service not available")); } int channelGroupId = (int)inParams[0]; AsyncResult <IList <IChannel> > result = channelAndGroupInfo.GetChannelsAsync(new ChannelGroup { ChannelGroupId = channelGroupId }).Result; outParams = new List <object> { result.Success, result.Result }; return(null); }
private UPnPError OnGetRecordingStatus(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { outParams = new List <object>(); IProgramInfo programInfo = ServiceRegistration.Get <ITvProvider>() as IProgramInfo; IScheduleControl scheduleControl = ServiceRegistration.Get <ITvProvider>() as IScheduleControl; if (programInfo == null || scheduleControl == null) { return(new UPnPError(500, "IProgramInfo or IScheduleControl service not available")); } int programId = (int)inParams[0]; IProgram program; RecordingStatus recordingStatus = RecordingStatus.None; bool result = programInfo.GetProgram(programId, out program) && scheduleControl.GetRecordingStatus(program, out recordingStatus); outParams = new List <object> { result, recordingStatus.ToString() }; return(null); }
static UPnPError OnGetUserSelectedAdditionalDataList(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { Guid profileId = MarshallingHelper.DeserializeGuid((string)inParams[0]); string[] keys = MarshallingHelper.ParseCsvStringCollection((string)inParams[1]).ToArray(); bool sortByKey = (bool)inParams[2]; SortDirection sortOrder = (SortDirection)(int)inParams[3]; uint? offset = (uint?)inParams[4]; uint? limit = (uint?)inParams[5]; var result = ServiceRegistration.Get <IUserProfileDataManagement>().GetUserSelectedAdditionalDataListAsync(profileId, keys, sortByKey, sortOrder, offset, limit).Result; var data = result.Success ? MarshallingHelper.SerializeTuple3EnumerationToCsv(result.Result.Select(t => new Tuple <string, string, string>(t.Item1, t.Item2.ToString(), t.Item3))) : null; outParams = new List <object> { data, result.Success }; return(null); }
private UPnPError OnGetProgramsByTitle(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { outParams = new List <object>(); IProgramInfoAsync programInfo = ServiceRegistration.Get <ITvProvider>() as IProgramInfoAsync; if (programInfo == null) { return(new UPnPError(500, "IProgramInfo service not available")); } string title = (string)inParams[0]; DateTime timeFrom = (DateTime)inParams[1]; DateTime timeTo = (DateTime)inParams[2]; AsyncResult <IList <IProgram> > result = programInfo.GetProgramsAsync(title, timeFrom, timeTo).Result; outParams = new List <object> { result.Success, result.Result }; return(null); }
private UPnPError OnRemoveScheduleForProgram(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { outParams = new List <object>(); IProgramInfoAsync programInfo = ServiceRegistration.Get <ITvProvider>() as IProgramInfoAsync; IScheduleControlAsync scheduleControl = ServiceRegistration.Get <ITvProvider>() as IScheduleControlAsync; if (programInfo == null || scheduleControl == null) { return(new UPnPError(500, "IProgramInfo or IScheduleControl service not available")); } int programId = (int)inParams[0]; ScheduleRecordingType recordingType = (ScheduleRecordingType)inParams[1]; IProgram program; var result = programInfo.GetProgram(programId, out program) && scheduleControl.RemoveScheduleForProgramAsync(program, recordingType).Result; outParams = new List <object> { result }; return(null); }
static UPnPError OnDoesResourceExist(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { outParams = null; ResourcePath path = ResourcePath.Deserialize((string)inParams[0]); if (!IsAllowedToAccess(path)) { return(new UPnPError(600, "Access is not allowed to this resource path")); } IResourceAccessor ra; bool result = path.TryCreateLocalResourceAccessor(out ra); if (result) { ra.Dispose(); } outParams = new List <object> { result }; return(null); }
private static UPnPError OnGetProtocolInfo(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { string source = ""; //string sink = "http-get:*:audio/vnd.dlna.adts:DLNA.ORG_PN=AAC_ADTS,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVSPML_MP3,http-get:*:audio/vnd.dlna.adts:DLNA.ORG_PN=AAC_ADTS_192,http-get:*:audio/vnd.dlna.adts:DLNA.ORG_PN=AAC_ADTS_320,http-get:*:audio/mp4:DLNA.ORG_PN=AAC_ISO,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVSPML_BASE,http-get:*:audio/3gpp:DLNA.ORG_PN=AAC_ISO,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVSPLL_BASE,http-get:*:audio/mp4:DLNA.ORG_PN=AAC_ISO_192,http-get:*:audio/3gpp:DLNA.ORG_PN=AAC_ISO_192,http-get:*:audio/mp4:DLNA.ORG_PN=AAC_ISO_320,http-get:*:audio/3gpp:DLNA.ORG_PN=AAC_ISO_320,http-get:*:audio/vnd.dlna.adts:DLNA.ORG_PN=AAC_MULT5_ADTS,http-get:*:audio/mp4:DLNA.ORG_PN=AAC_MULT5_ISO,http-get:*:audio/3gpp:DLNA.ORG_PN=AAC_MULT5_ISO,http-get:*:video/3gpp:DLNA.ORG_PN=AVC_3GPP_BL_QCIF15_AAC,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVMED_PRO,http-get:*:video/3gpp:DLNA.ORG_PN=AVC_3GPP_BL_QCIF15_HEAAC,http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_BL_CIF15_AAC,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVMED_FULL,http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_BL_CIF15_AAC_350,http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_BL_CIF15_AAC_520,http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_BL_CIF15_HEAAC,http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_BL_CIF15_HEAAC_350,http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_BL_CIF30_AAC_940,http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_BL_CIF30_AAC_MULT5,http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_BL_CIF30_HEAAC_L2,http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_BL_CIF30_MPEG1_L3,http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_BL_L12_CIF15_HEAAC,http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_BL_L12_CIF15_HEAACv2,http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_BL_L12_CIF15_HEAACv2_350,http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_BL_L1B_QCIF15_HEAAC,http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_BL_L1B_QCIF15_HEAACv2,http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_BL_L2_CIF30_AAC,http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_BL_L31_HD_AAC,http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_BL_L32_HD_AAC,http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_BL_L3L_SD_AAC,http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_BL_L3L_SD_HEAAC,http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_BL_L3_SD_AAC,http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_MP_SD_AAC_LC,http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_MP_SD_AAC_MULT5,http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_MP_SD_HEAAC_L2,http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_MP_SD_HEAAC_L4,http-get:*:video/mp4:DLNA.ORG_PN=AVC_MP4_MP_SD_MPEG1_L3,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_BL_CIF15_AAC,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVMED_BASE,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_BL_CIF15_AAC_540,http-get:*:video/mpeg:DLNA.ORG_PN=AVC_TS_BL_CIF15_AAC_540_ISO,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVHM_BASE,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_BL_CIF15_AAC_540_T,http-get:*:video/mpeg:DLNA.ORG_PN=AVC_TS_BL_CIF15_AAC_ISO,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_BL_CIF15_AAC_T,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_BL_CIF30_AAC_940,http-get:*:video/mpeg:DLNA.ORG_PN=AVC_TS_BL_CIF30_AAC_940_ISO,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_BL_CIF30_AAC_940_T,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_BL_CIF30_AAC_MULT5,http-get:*:video/mpeg:DLNA.ORG_PN=AVC_TS_BL_CIF30_AAC_MULT5_ISO,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_BL_CIF30_AAC_MULT5_T,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_BL_CIF30_AC3,http-get:*:video/mpeg:DLNA.ORG_PN=AVC_TS_BL_CIF30_AC3_ISO,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_BL_CIF30_AC3_T,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_BL_CIF30_MPEG1_L3,http-get:*:video/mpeg:DLNA.ORG_PN=AVC_TS_BL_CIF30_MPEG1_L3_ISO,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_BL_CIF30_MPEG1_L3_T,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_JP_AAC_T,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_MP_HD_AAC_MULT5,http-get:*:video/mpeg:DLNA.ORG_PN=AVC_TS_MP_HD_AAC_MULT5_ISO,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_MP_HD_AAC_MULT5_T,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_MP_HD_AC3,http-get:*:video/mpeg:DLNA.ORG_PN=AVC_TS_MP_HD_AC3_ISO,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_MP_HD_AC3_T,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_MP_HD_MPEG1_L3,http-get:*:video/mpeg:DLNA.ORG_PN=AVC_TS_MP_HD_MPEG1_L3_ISO,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_MP_HD_MPEG1_L3_T,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_MP_SD_AAC_MULT5,http-get:*:video/mpeg:DLNA.ORG_PN=AVC_TS_MP_SD_AAC_MULT5_ISO,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_MP_SD_AAC_MULT5_T,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_MP_SD_AC3,http-get:*:video/mpeg:DLNA.ORG_PN=AVC_TS_MP_SD_AC3_ISO,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_MP_SD_AC3_T,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_MP_SD_MPEG1_L3,http-get:*:video/mpeg:DLNA.ORG_PN=AVC_TS_MP_SD_MPEG1_L3_ISO,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=AVC_TS_MP_SD_MPEG1_L3_T,http-get:*:audio/mp4:DLNA.ORG_PN=HEAACv2_L2,http-get:*:audio/3gpp:DLNA.ORG_PN=HEAACv2_L2,http-get:*:audio/mp4:DLNA.ORG_PN=HEAACv2_L2_128,http-get:*:audio/3gpp:DLNA.ORG_PN=HEAACv2_L2_128,http-get:*:audio/mp4:DLNA.ORG_PN=HEAACv2_L2_320,http-get:*:audio/3gpp:DLNA.ORG_PN=HEAACv2_L2_320,http-get:*:audio/mp4:DLNA.ORG_PN=HEAACv2_L3,http-get:*:audio/3gpp:DLNA.ORG_PN=HEAACv2_L3,http-get:*:audio/mp4:DLNA.ORG_PN=HEAACv2_L4,http-get:*:audio/3gpp:DLNA.ORG_PN=HEAACv2_L4,http-get:*:audio/mp4:DLNA.ORG_PN=HEAACv2_MULT5,http-get:*:audio/3gpp:DLNA.ORG_PN=HEAACv2_MULT5,http-get:*:audio/mp4:DLNA.ORG_PN=HEAAC_L2_ISO,http-get:*:audio/3gpp:DLNA.ORG_PN=HEAAC_L2_ISO,http-get:*:audio/mp4:DLNA.ORG_PN=HEAAC_L2_ISO_128,http-get:*:audio/3gpp:DLNA.ORG_PN=HEAAC_L2_ISO_128,http-get:*:audio/mp4:DLNA.ORG_PN=HEAAC_L2_ISO_320,http-get:*:audio/3gpp:DLNA.ORG_PN=HEAAC_L2_ISO_320,http-get:*:audio/mp4:DLNA.ORG_PN=HEAAC_L3_ISO,http-get:*:audio/3gpp:DLNA.ORG_PN=HEAAC_L3_ISO,http-get:*:audio/mp4:DLNA.ORG_PN=HEAAC_MULT5_ISO,http-get:*:audio/3gpp:DLNA.ORG_PN=HEAAC_MULT5_ISO,http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_LRG,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVHIGH_PRO,http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_LRG_ICO,http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_MED,http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_SM,http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_SM_ICO,http-get:*:image/jpeg:DLNA.ORG_PN=JPEG_TN,http-get:*:audio/L16:DLNA.ORG_PN=LPCM,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMVHIGH_FULL,http-get:*:audio/L16:DLNA.ORG_PN=LPCM_low,http-get:*:audio/mpeg:DLNA.ORG_PN=MP3,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMDRM_WMVSPML_MP3,http-get:*:audio/mpeg:DLNA.ORG_PN=MP3X,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG1,http-get:*:video/3gpp:DLNA.ORG_PN=MPEG4_P2_3GPP_SP_L0B_AAC,http-get:*:video/mp4:DLNA.ORG_PN=MPEG4_P2_MP4_ASP_AAC,http-get:*:video/mp4:DLNA.ORG_PN=MPEG4_P2_MP4_ASP_HEAAC,http-get:*:video/mp4:DLNA.ORG_PN=MPEG4_P2_MP4_ASP_HEAAC_MULT5,http-get:*:video/mp4:DLNA.ORG_PN=MPEG4_P2_MP4_SP_AAC,http-get:*:video/mp4:DLNA.ORG_PN=MPEG4_P2_MP4_SP_HEAAC,http-get:*:video/mp4:DLNA.ORG_PN=MPEG4_P2_MP4_SP_L2_AAC,http-get:*:video/mp4:DLNA.ORG_PN=MPEG4_P2_MP4_SP_VGA_AAC,http-get:*:video/mp4:DLNA.ORG_PN=MPEG4_P2_MP4_SP_VGA_HEAAC,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG4_P2_TS_SP_AC3,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG4_P2_TS_SP_AC3_ISO,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG4_P2_TS_SP_AC3_T,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG4_P2_TS_SP_MPEG1_L3,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG4_P2_TS_SP_MPEG1_L3_ISO,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG4_P2_TS_SP_MPEG1_L3_T,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG4_P2_TS_SP_MPEG2_L2,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG4_P2_TS_SP_MPEG2_L2_ISO,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG4_P2_TS_SP_MPEG2_L2_T,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_PS_NTSC,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_PS_NTSC_XAC3,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_PS_PAL,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_PS_PAL_XAC3,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_HD_KO,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_TS_HD_KO_ISO,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_HD_KO_T,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_HD_KO_XAC3,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_TS_HD_KO_XAC3_ISO,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_HD_KO_XAC3_T,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_HD_NA,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_TS_HD_NA_ISO,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_HD_NA_T,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_HD_NA_XAC3,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_TS_HD_NA_XAC3_ISO,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_HD_NA_XAC3_T,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_JP_T,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_MP_LL_AAC,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_TS_MP_LL_AAC_ISO,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_MP_LL_AAC_T,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_SD_EU,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_TS_SD_EU_ISO,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_SD_EU_T,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_SD_KO,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_TS_SD_KO_ISO,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_SD_KO_T,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_SD_KO_XAC3,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_TS_SD_KO_XAC3_ISO,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_SD_KO_XAC3_T,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_SD_NA,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_TS_SD_NA_ISO,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_SD_NA_T,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_SD_NA_XAC3,http-get:*:video/mpeg:DLNA.ORG_PN=MPEG_TS_SD_NA_XAC3_ISO,http-get:*:video/vnd.dlna.mpeg-tts:DLNA.ORG_PN=MPEG_TS_SD_NA_XAC3_T,http-get:*:image/png:DLNA.ORG_PN=PNG_LRG,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMDRM_WMVSPML_BASE,http-get:*:image/png:DLNA.ORG_PN=PNG_LRG_ICO,http-get:*:image/png:DLNA.ORG_PN=PNG_TN,http-get:*:video/x-ms-asf:DLNA.ORG_PN=VC1_ASF_AP_L1_WMA,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMDRM_WMVSPLL_BASE,http-get:*:video/x-ms-asf:DLNA.ORG_PN=VC1_ASF_AP_L2_WMA,http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMABASE,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMDRM_WMVMED_PRO,http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMAFULL,http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMALSL,http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMALSL_MULT5,http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMAPRO,http-get:*:video/x-ms-asf:DLNA.ORG_PN=WMDRM_VC1_ASF_AP_L1_WMA,http-get:*:video/x-ms-asf:DLNA.ORG_PN=WMDRM_VC1_ASF_AP_L2_WMA,http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMDRM_WMABASE,http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMDRM_WMAFULL,http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMDRM_WMALSL,http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMDRM_WMALSL_MULT5,http-get:*:audio/x-ms-wma:DLNA.ORG_PN=WMDRM_WMAPRO,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMDRM_WMVHIGH_FULL,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMDRM_WMVMED_FULL,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMDRM_WMVHIGH_PRO,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMDRM_WMVHM_BASE,http-get:*:video/x-ms-wmv:DLNA.ORG_PN=WMDRM_WMVMED_BASE,http-get:*:video/x-ms-wmv:*,http-get:*:audio/x-ms-wma:*,http-get:*:video/x-ms-asf:*,http-get:*:image/png:*,http-get:*:audio/mpeg:*,http-get:*:audio/L16:*,http-get:*:image/jpeg:*,http-get:*:video/mpeg:*,http-get:*:video/vnd.dlna.mpeg-tts:*,http-get:*:video/mp4:*,http-get:*:video/3gpp:*,http-get:*:audio/3gpp:*,http-get:*:audio/mp4:*,http-get:*:audio/vnd.dlna.adts:*,http-get:*:application/vnd.ms-search:*,http-get:*:application/vnd.ms-wpl:*,http-get:*:application/x-ms-wmd:*,http-get:*:application/x-ms-wmz:*,http-get:*:application/x-shockwave-flash:*,http-get:*:audio/3gpp2:*,http-get:*:audio/aiff:*,http-get:*:audio/basic:*,http-get:*:audio/l8:*,http-get:*:audio/mid:*,http-get:*:audio/wav:*,http-get:*:audio/x-mpegurl:*,http-get:*:audio/x-ms-wax:*,http-get:*:image/bmp:*,http-get:*:image/gif:*,http-get:*:image/vnd.ms-photo:*,http-get:*:video/3gpp2:*,http-get:*:video/avi:*,http-get:*:video/quicktime:*,http-get:*:video/x-ms-wm:*,http-get:*:video/x-ms-wmx:*,http-get:*:video/x-ms-wvx:*,http-get:*:video/x-msvideo:*,http-get:*:video/x-flv:*,http-get:*:video/x-ogm:*,http-get:*:audio/x-wavpack:*,rtsp-rtp-udp:*:audio/L16:*,rtsp-rtp-udp:*:audio/L8:*,rtsp-rtp-udp:*:audio/mpeg:*,rtsp-rtp-udp:*:audio/x-ms-wma:*,rtsp-rtp-udp:*:video/x-ms-wmv:*,rtsp-rtp-udp:*:audio/x-asf-pf:*"; string sink = "http-get:*:audio/mpegurl:*," + "http-get:*:audio/mp3:*," + "http-get:*:audio/mpeg:*," + "http-get:*:audio/x-ms-wma:*," + "http-get:*:audio/wma:*," + "http-get:*:audio/mpeg3:*," + "http-get:*:video/x-ms-wmv:*," + "http-get:*:video/x-ms-asf:*," + "http-get:*:video/x-ms-avi:*," + "http-get:*:video/mpeg:*," + "http-get:*:image/*:*"; outParams = new List <object> { source, sink }; return(null); }
private UPnPError OnGetNowNextProgram(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { outParams = new List <object>(); IProgramInfo programInfo = ServiceRegistration.Get <ITvProvider>() as IProgramInfo; if (programInfo == null) { return(new UPnPError(500, "IProgramInfo service not available")); } int channelId = (int)inParams[0]; IProgram programNow; IProgram programNext; bool result = programInfo.GetNowNextProgram(new Channel { ChannelId = channelId }, out programNow, out programNext); outParams = new List <object> { result, programNow, programNext }; return(null); }