public void Play()
        {
            VerifyObjectIsNotDisposed();
            //
            int res = LibVlcInterop.libvlc_media_player_play(descriptor);

            if (res != 0)
            {
                throw new VlcInternalException(LibVlcInterop.libvlc_errmsg());
            }
        }
        public VlcMediaPlayerInternal CreateVlcMediaPlayerInternal()
        {
            IntPtr mediaplayerDescriptor = LibVlcInterop.libvlc_media_player_new(vlclibDescriptor);

            if (mediaplayerDescriptor == IntPtr.Zero)
            {
                throw new VlcInternalException(LibVlcInterop.libvlc_errmsg());
            }
            //
            return(new VlcMediaPlayerInternal(mediaplayerDescriptor));
        }
        public VlcLog CreateVlcLog(ILog log, ILogVerbosityManager logVerbosityManager)
        {
            if (log == null)
            {
                throw new ArgumentNullException("log");
            }
            //
            IntPtr libvlc_log_t = LibVlcInterop.libvlc_log_open(vlclibDescriptor);

            if (libvlc_log_t == IntPtr.Zero)
            {
                throw new VlcInternalException(LibVlcInterop.libvlc_errmsg());
            }
            //
            return(new VlcLog(libvlc_log_t, logVerbosityManager, log));
        }
        public VlcMediaInternal CreateVlcMediaInternal(MediaInput mediaInput)
        {
            if (mediaInput == null)
            {
                throw new ArgumentNullException("mediaInput");
            }
            //
            IntPtr mediaDescriptor = LibVlcInterop.libvlc_media_new_path(vlclibDescriptor, mediaInput.Source);

            if (mediaDescriptor == IntPtr.Zero)
            {
                throw new VlcInternalException(LibVlcInterop.libvlc_errmsg());
            }
            //
            return(new VlcMediaInternal(mediaDescriptor));
        }
        private static IntPtr createInstance(string[] parameters)
        {
            if (parameters == null)
            {
                throw new ArgumentNullException("parameters");
            }
            //
            IntPtr res = LibVlcInterop.libvlc_new(parameters);

            if (IntPtr.Zero == res)
            {
                throw new VlcInternalException(LibVlcInterop.libvlc_errmsg());
            }
            //
            return(res);
        }
        public void TakeSnapshot(string filePath, int width, int height)
        {
            VerifyObjectIsNotDisposed();
            //
            IntPtr filePathPtr = Marshal.StringToHGlobalAnsi(filePath);
            //
            uint uwidth  = Convert.ToUInt32(width);
            uint uheight = Convert.ToUInt32(height);

            //
            try {
                int res = LibVlcInterop.libvlc_video_take_snapshot(descriptor, 0, filePathPtr, uwidth, uheight);
                if (-1 == res)
                {
                    throw new VlcInternalException(LibVlcInterop.libvlc_errmsg());
                }
            } finally {
                Marshal.FreeHGlobal(filePathPtr);
            }
        }
示例#7
0
 public void Parse()
 {
     VerifyObjectIsNotDisposed();
     //
     lock (staticLock) {
         if (!IsParsed())
         {
             LibVlcInterop.libvlc_media_parse(this.descriptor);
         }
         //
         if (tracksInfo == null)
         {
             parseState            = new ParseState();
             parseState.waitHandle = new EventWaitHandle(false,
                                                         EventResetMode.AutoReset);
             try {
                 IntPtr player = LibVlcInterop.libvlc_media_player_new_from_media(this.descriptor);
                 if (player == IntPtr.Zero)
                 {
                     throw new VlcInternalException(String.Format("Can't create an instance of player when parsing. LibVlc tells: {0}",
                                                                  LibVlcInterop.libvlc_errmsg()));
                 }
                 IntPtr playerEvents = LibVlcInterop.libvlc_media_player_event_manager(player);
                 if (playerEvents == IntPtr.Zero)
                 {
                     throw new VlcInternalException(String.Format("Can't get event manager of player when parsing. LibVlc tells: {0}",
                                                                  LibVlcInterop.libvlc_errmsg()));
                 }
                 //
                 try {
                     parseState.eventHandler = new LibVlcInterop.VlcEventHandlerDelegate(onTrackInfoEndReached);
                     IntPtr function = Marshal.GetFunctionPointerForDelegate(parseState.eventHandler);
                     //
                     int res = LibVlcInterop.libvlc_event_attach(playerEvents, libvlc_event_type_e.libvlc_MediaPlayerEndReached,
                                                                 function,
                                                                 IntPtr.Zero);
                     if (res != 0)
                     {
                         throw new VlcInternalException(String.Format("Unable to attach event {0}",
                                                                      libvlc_event_type_e.libvlc_MediaPlayerEndReached.ToString()));
                     }
                     //
                     LibVlcInterop.libvlc_media_add_option(descriptor, "sout=#description");
                     LibVlcInterop.libvlc_media_player_play(player);
                     //
                     if (parseState.waitHandle.WaitOne(parseTimeout))
                     {
                         //
                         LibVlcInterop.libvlc_media_player_release(player);
                         player = IntPtr.Zero;
                         //
                         tracksInfo = LibVlcInterop.libvlc_media_get_tracks_info(descriptor);
                         //
                         if (logger.IsInfoEnabled)
                         {
                             StringBuilder builder = new StringBuilder();
                             builder.Append("Parsed tracks info: ");
                             //
                             foreach (libvlc_media_track_info_t track in tracksInfo)
                             {
                                 builder.AppendLine("");
                                 if (track.i_type == libvlc_track_t.libvlc_track_audio)
                                 {
                                     builder.AppendLine("Type: audio");
                                     builder.AppendLine("Channels: " + track.i_channels);
                                     builder.AppendLine("Rate: " + track.i_rate);
                                 }
                                 else if (track.i_type == libvlc_track_t.libvlc_track_text)
                                 {
                                     builder.AppendLine("Type: text");
                                 }
                                 else if (track.i_type == libvlc_track_t.libvlc_track_video)
                                 {
                                     builder.AppendLine("Type: video");
                                 }
                                 else
                                 {
                                     builder.AppendLine("Type: unknown");
                                 }
                                 builder.AppendLine("Description: " + LibVlcInterop.vlc_fourcc_GetDescription(0, track.i_codec));
                             }
                             //
                             builder.AppendLine("Total tracks: " + tracksInfo.Length);
                             logger.Info(builder.ToString());
                         }
                     }
                     else
                     {
                         throw new VlcTimeoutException("Can't get tracks information.");
                     }
                 } finally {
                     if (player != IntPtr.Zero)
                     {
                         LibVlcInterop.libvlc_media_player_release(player);
                     }
                 }
             } catch (Exception exc) {
                 if (logger.IsErrorEnabled)
                 {
                     logger.Error("An error occured during parse.", exc);
                 }
                 throw;
             } finally {
                 parseState.waitHandle.Close();
                 parseState = null;
             }
         }
     }
 }
示例#8
0
        public void UpdateMessages()
        {
            VerifyObjectIsNotDisposed();
            //
            IntPtr iterator = LibVlcInterop.libvlc_log_get_iterator(descriptor);

            if (IntPtr.Zero == iterator)
            {
                throw new VlcInternalException(LibVlcInterop.libvlc_errmsg());
            }
            //
            try {
                while (0 != LibVlcInterop.libvlc_log_iterator_has_next(iterator))
                {
                    //
                    libvlc_log_message_t messageBuffer = new libvlc_log_message_t();
                    messageBuffer.sizeof_msg = Convert.ToUInt32(Marshal.SizeOf(typeof(libvlc_log_message_t)));
                    IntPtr ptrStructRes = LibVlcInterop.libvlc_log_iterator_next(iterator, ref messageBuffer);
                    if (IntPtr.Zero == ptrStructRes)
                    {
                        throw new VlcInternalException(LibVlcInterop.libvlc_errmsg());
                    }
                    //
                    libvlc_log_message_t msgRes = (libvlc_log_message_t)Marshal.PtrToStructure(ptrStructRes, typeof(libvlc_log_message_t));
                    string text = String.Format("{0} {1} {2} : {3}", msgRes.Type, msgRes.Name, msgRes.Header, msgRes.Message);
                    //
                    switch (msgRes.Severity)
                    {
                    case libvlc_log_message_t_severity.INFO: {
                        // INFO
                        logger.Info(text);
                        break;
                    }

                    case libvlc_log_message_t_severity.ERR: {
                        // ERR
                        logger.Error(text);
                        break;
                    }

                    case libvlc_log_message_t_severity.WARN: {
                        // WARN
                        logger.Warn(text);
                        break;
                    }

                    case libvlc_log_message_t_severity.DBG: {
                        // DBG
                        logger.Debug(text);
                        break;
                    }

                    default: {
                        logger.Trace("Unknown severity : " + text);
                        break;
                    }
                    }
                }
            } finally {
                LibVlcInterop.libvlc_log_iterator_free(iterator);
            }
        }
 /// <summary>
 /// Default constructor. This constructor automaticly calls
 /// <see cref="LibVlcInterop.libvlc_errmsg"/> method.
 /// </summary>
 public VlcInternalException() : base(LibVlcInterop.libvlc_errmsg())
 {
 }