// not implemented
 private static UPnPError OnPrevious(DvAction action, IList <object> inParams, out IList <object> outParams, CallContext context)
 {
     TraceLogger.DebugLogParams(inParams);
     outParams = action.OutArguments.Select(outArgument => outArgument.RelatedStateVar.Value).ToList();
     return(null);
 }
示例#2
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;
        }
示例#3
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);
            }
        }