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);
 }
Exemplo n.º 4
0
 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);
        }
Exemplo n.º 11
0
        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");
            }
        }
Exemplo n.º 12
0
        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;
        }
Exemplo n.º 13
0
        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);
            }
        }