Ejemplo n.º 1
0
        public void ParseError(out GLib.GException error, out string debug)
        {
            if (Type != MessageType.Error)
            {
                throw new ArgumentException();
            }

            IntPtr err;
            IntPtr dbg;

            gst_message_parse_error(Handle, out err, out dbg);

            if (dbg != IntPtr.Zero)
            {
                debug = GLib.Marshaller.Utf8PtrToString(dbg);
            }
            else
            {
                debug = null;
            }

            if (err == IntPtr.Zero)
            {
                throw new Exception();
            }

            error = new GLib.GException(err);
        }
Ejemplo n.º 2
0
        private void HandleError(GLib.GException ex)
        {
            TrackInfo failed_track = CurrentTrack;

            Close(true);

            var error_message = String.IsNullOrEmpty(ex.Message) ? Catalog.GetString("Unknown Error") : ex.Message;

            if (ex.Domain == Gst.Global.ResourceErrorQuark())
            {
                ResourceError domain_code = (ResourceError)ex.Code;
                if (failed_track != null)
                {
                    switch (domain_code)
                    {
                    case ResourceError.NotFound:
                        failed_track.SavePlaybackError(StreamPlaybackError.ResourceNotFound);
                        break;

                    default:
                        break;
                    }
                }
                Log.Error(String.Format("GStreamer resource error: {0}", domain_code), false);
            }
            else if (ex.Domain == Gst.Global.StreamErrorQuark())
            {
                StreamError domain_code = (StreamError)ex.Code;
                if (failed_track != null)
                {
                    switch (domain_code)
                    {
                    case StreamError.CodecNotFound:
                        failed_track.SavePlaybackError(StreamPlaybackError.CodecNotFound);
                        break;

                    default:
                        break;
                    }
                }

                Log.Error(String.Format("GStreamer stream error: {0}", domain_code), false);
            }
            else if (ex.Domain == Gst.Global.CoreErrorQuark())
            {
                CoreError domain_code = (CoreError)ex.Code;
                if (failed_track != null)
                {
                    switch (domain_code)
                    {
                    case CoreError.MissingPlugin:
                        failed_track.SavePlaybackError(StreamPlaybackError.CodecNotFound);
                        break;

                    default:
                        break;
                    }
                }

                if (domain_code != CoreError.MissingPlugin)
                {
                    Log.Error(String.Format("GStreamer core error: {0}", domain_code), false);
                }
            }
            else if (ex.Domain == Gst.Global.LibraryErrorQuark())
            {
                Log.Error(String.Format("GStreamer library error: {0}", ex.Code), false);
            }

            OnEventChanged(new PlayerEventErrorArgs(error_message));
        }
        /// <summary>
        /// This function is called every time the discoverer has information regarding one of the URIs we provided.
        /// </summary>
        static void OnDiscoveredCb(object o, DiscoveredArgs args)
        {
            var discoverer = o as Discoverer;
            var info       = args.Info;
            var uri        = info.Uri;
            var result     = info.Result;

            switch (result)
            {
            case DiscovererResult.UriInvalid:
                $"Invalid uri {uri}".PrintErr();
                break;

            case DiscovererResult.Error:
                var err = new GLib.GException(args.Error);
                $"Discoverer error {err.Message}".PrintErr();
                break;

            case DiscovererResult.Timeout:
                Console.WriteLine("Timeout");
                break;

            case DiscovererResult.Busy:
                Console.WriteLine("Busy");
                break;

            case DiscovererResult.MissingPlugins:
                var s = info.Misc;
                if (s != null)
                {
                    Console.WriteLine($"Missing plugins {s}");
                }
                break;

            case DiscovererResult.Ok:
                Console.WriteLine($"Discovered {uri}");
                break;
            }
            if (result != DiscovererResult.Ok)
            {
                "This URI cannot be played".PrintErr();
                return;
            }

            // If we got no error, show the retrieved information
            var duration = new TimeSpan((long)info.Duration);

            Console.WriteLine($"Duration {duration}");

            var tags = info.Tags;

            if (tags != null)
            {
                Console.WriteLine("Tags: ");
                tags.Foreach(PrintTagForeach);
            }

            Console.WriteLine("Seekable: {0}", info.Seekable ? "yes" : "no");
            DiscovererStreamInfo sinfo = info.StreamInfo;

            if (sinfo == null)
            {
                return;
            }
            Console.WriteLine("Stream information: ");
            PrintTopology(sinfo, 1);
            Console.WriteLine();
        }
Ejemplo n.º 4
0
        //This function is called every time the discoverer has information regarding one of the URIs we provided.
        static void HandleDiscovered(object disc, DiscoveredArgs args)
        {
            var info       = args.Info;
            var uri        = info.Uri;
            var result     = info.Result;
            var discoverer = (Discoverer)disc;

            switch (result)
            {
            case DiscovererResult.UriInvalid:
                Console.WriteLine("Invalid URI '{0}'", uri);
                break;

            case DiscovererResult.Error:
                var err = new GLib.GException(args.Error);
                Console.WriteLine("Discoverer error: {0}", err.Message);
                break;

            case DiscovererResult.Timeout:
                Console.WriteLine("Timeout");
                break;

            case DiscovererResult.Busy:
                Console.WriteLine("Busy");
                break;

            case DiscovererResult.MissingPlugins: {
                var s = info.Misc;

                if (s != null)
                {
                    Console.WriteLine("Missing plugins: {0}", s);
                }
                break;
            }

            case DiscovererResult.Ok:
                Console.WriteLine("Discovered '{0}'", uri);
                break;
            }

            if (result != DiscovererResult.Ok)
            {
                Console.WriteLine("This URI cannot be played");
                return;
            }

            // If we got no error, show the retrieved information
            Console.WriteLine("\nDuration: {0}", new TimeSpan((long)info.Duration));

            var tags = info.Tags;

            if (tags != null)
            {
                Console.WriteLine("Tags:");
                tags.Foreach((TagForeachFunc) delegate(TagList list, string tag) {
                    PrintTagForeach(list, tag, 1);
                });
            }

            Console.WriteLine("Seekable: {0}", (info.Seekable ? "yes" : "no"));

            Console.WriteLine();

            var sinfo = info.StreamInfo;

            if (sinfo == null)
            {
                return;
            }

            Console.WriteLine("Stream information:");

            PrintTopology(sinfo, 1);

            Console.WriteLine();
        }
Ejemplo n.º 5
0
 private static void OnError(GstVideoStream sender, GLib.GException error, string debug)
 {
     Console.WriteLine($"{Environment.NewLine}ERROR: {error.Message} ({debug})");
 }