private static UPnPError OnGetDeviceCapabilities(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { TraceLogger.DebugLogParams(inParams); outParams = action.OutArguments.Select(outArgument => outArgument.RelatedStateVar.Value).ToList(); TraceLogger.WriteLine(action.OutArguments[0].RelatedStateVar.DefaultValue); return(null); }
protected static void OnEventSeek() { TraceLogger.WriteLine("OnEventSeek()"); if (Seek != null) { TraceLogger.WriteLine("Call Seek()"); Seek(); } }
private static UPnPError OnGetMediaInfo(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { TraceLogger.DebugLogParams(inParams); outParams = action.OutArguments.Select(outArgument => outArgument.RelatedStateVar.Value).ToList(); foreach (var outArgument in action.OutArguments) { TraceLogger.WriteLine("- " + outArgument.Name + " - " + outArgument.RelatedStateVar.Value); } return(null); }
private void VolumeChanged() { TraceLogger.WriteLine("Player Message volume changed"); _controlServiceImpl.ChangeStateVariables(new List <string> { "Volume" }, new List <object> { (UInt16)ServiceRegistration.Get <IPlayerManager>().Volume }); }
private static UPnPError OnGetTransportInfo(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { TraceLogger.DebugLogParams(inParams); outParams = action.OutArguments.Select(outArgument => outArgument.RelatedStateVar.Value).ToList(); TraceLogger.WriteLine("OUTPUT:"); foreach (var outParam in outParams) { TraceLogger.WriteLine(outParam); } return(null); }
private static void ChangeStateVariables(List <string> varNames, IList <object> inParams, DvAction action) { List <string> changedValues = new List <string>(); for (int i = 0; i < varNames.Count; i++) { TraceLogger.WriteLine("Name: " + varNames[i] + " Value: " + inParams[i]); action.ParentService.StateVariables[varNames[i]].Value = inParams[i]; changedValues.Add(inParams[i].ToString()); } LastChangeXML(varNames, changedValues, action.ParentService.StateVariables); }
public void ChangeStateVariables(List <string> varNames, IList <object> inParams) { List <string> changedValues = new List <string>(); for (int i = 0; i < varNames.Count; i++) { TraceLogger.WriteLine("Name: " + varNames[i] + " Value: " + inParams[i]); StateVariables[varNames[i]].Value = inParams[i]; changedValues.Add(inParams[i].ToString()); } LastChangeXML(varNames, changedValues, StateVariables); }
private static UPnPError OnGetCurrentTransportActions(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 static UPnPError OnPause(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context) { TraceLogger.DebugLogParams(inParams); if (action.ParentService.StateVariables["TransportState"].Value.ToString() == "PLAYING") { TraceLogger.WriteLine("TransPortState is PLAYING"); ChangeStateVariable("TransportState", "PAUSED_PLAYBACK", action); OnEventPause(); // FireEfent } else { TraceLogger.WriteLine("TransportState is not Playing"); } outParams = action.OutArguments.Select(outArgument => outArgument.RelatedStateVar.Value).ToList(); 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); }
public void UpdateProgress <TE>(ref string elapsedTime, ref string duration) where TE : IPlayer, IMediaPlaybackControl { var playerCtx = GetPlayerContext <TE>(); if (playerCtx != null) { var player = GetPlayer <TE>(); if (player.State == PlayerState.Ended) { Logger.Debug("Playback ended"); Stop(); return; } elapsedTime = player.CurrentTime.ToString(@"hh\:mm\:ss"); duration = player.Duration.ToString(@"hh\:mm\:ss"); } else { TraceLogger.WriteLine("PlayerContext null"); } }
private void OnPlay() { TraceLogger.WriteLine("Event Fired! - Play -- "); VolumeChanged(); var avTransportUri = _transportServiceImpl.StateVariables["AVTransportURI"].Value.ToString(); var avTransportUriMetadata = _transportServiceImpl.StateVariables["AVTransportURIMetaData"].Value.ToString(); switch (_playerType) { case ContentType.Audio: if (_isPaused) { ChangeUPnPAVTransportServiceStateToPlaying(); ResumePlayer <UPnPRendererAudioPlayer>(); break; } StopPlayer <UPnPRendererAudioPlayer>(); var audioItem = UPnPMediaItemFactory.CreateAudioItem(avTransportUri); audioItem.AddMetaDataToMediaItem(avTransportUriMetadata); PlayItemsModel.CheckQueryPlayAction(audioItem); break; case ContentType.Image: var imageItem = UPnPMediaItemFactory.CreateImageItem(avTransportUri); imageItem.AddMetaDataToMediaItem(avTransportUriMetadata); var ic = GetPlayerContext <UPnPRendererImagePlayer>(); if (ic != null) { ic.DoPlay(imageItem); } else { PlayItemsModel.CheckQueryPlayAction(imageItem); } break; case ContentType.Video: if (_isPaused) { Logger.Debug("Resume!!"); ChangeUPnPAVTransportServiceStateToPlaying(); ResumePlayer <UPnPRendererVideoPlayer>(); break; } Logger.Debug("NO Resume!!"); StopPlayer <UPnPRendererVideoPlayer>(); var videoItem = UPnPMediaItemFactory.CreateVideoItem(avTransportUri); videoItem.AddMetaDataToMediaItem(avTransportUriMetadata); PlayItemsModel.CheckQueryPlayAction(videoItem); break; case ContentType.Unknown: Logger.Warn("Can't play because of unknown player type"); return; // we don't want to start the timer } _timer.Enabled = true; _timer.AutoReset = true; }
public static string GetMimeFromUrl(string url, string metaData = null) { // if we have metaData, use that! if (metaData != null) { using (XmlReader reader = XmlReader.Create(new StringReader(metaData))) { reader.ReadToFollowing("upnp:class"); string output = reader.ReadElementContentAsString(); if (output.IndexOf("videoItem", StringComparison.OrdinalIgnoreCase) >= 0) { Logger.Debug("found mime from MetaData: Video"); return("video/*"); } if (output.IndexOf("audioItem", StringComparison.OrdinalIgnoreCase) >= 0) { Logger.Debug("found mime from MetaData: Audio"); return("audio/*"); } if (output.IndexOf("imageItem", StringComparison.OrdinalIgnoreCase) >= 0) { Logger.Debug("found mime from MetaData: Image"); return("image/*"); } Logger.Debug("couldn't find mime from MetaData"); } } //we don't have any meta Data or couldn't find something WebRequest request = WebRequest.Create(url) as HttpWebRequest; byte[] buffer = new byte[256]; // Try to get the mime type from the registry, works only if the server sends a file extension Uri uri = new Uri(url); string fileName = uri.Segments.Last(); var mime = GetMimeFromRegistry(fileName); TraceLogger.WriteLine("Mime from registry: " + GetMimeFromRegistry(fileName)); if (mime == "application/octet-stream") { using (WebResponse response = request.GetResponse()) { using (Stream stream = response.GetResponseStream()) { int count = stream.Read(buffer, 0, 256); TraceLogger.WriteLine("Bufer: " + BitConverter.ToString(buffer)); TraceLogger.WriteLine(response.ContentType); TraceLogger.WriteLine("Sytem Mimemapping" + MimeMapping.GetMimeMapping(url)); try { UInt32 mimetype; FindMimeFromData(0, null, buffer, 256, null, 0, out mimetype, 0); IntPtr mimeTypePtr = new IntPtr(mimetype); mime = Marshal.PtrToStringUni(mimeTypePtr); Marshal.FreeCoTaskMem(mimeTypePtr); TraceLogger.WriteLine("MimeType from urlmon.dll: " + mime); // if we get application/octet-stream => unknown mime type if (mime == "application/octet-stream") { TraceLogger.WriteLine("urlmon.dll couldn't find mime type"); mime = response.ContentType; TraceLogger.WriteLine("MimeType from response.ContentType: " + mime); if (mime == "application/octet-stream") { TraceLogger.WriteLine("response.ContentType couldn't find mime type"); mime = MimeMapping.GetMimeMapping(url); TraceLogger.WriteLine("MimeType from GetMimeMapping: " + mime); if (mime == "application/octet-stream") { throw new Exception("no mime type found"); } } } return(mime); } catch (Exception) { return("unknown/unknown"); } } } } else { return(mime); } }