Пример #1
0
        /// <summary>
        /// Post a login answer.
        /// After this call, the instance won't be valid anymore
        /// </summary>
        /// <param name="username">valid non-empty string</param>
        /// <param name="password">valid string</param>
        /// <param name="store">if true stores the credentials</param>
        /// <returns></returns>
        public bool PostLogin(string username, string password, bool store)
        {
            if (_id == IntPtr.Zero)
            {
                throw new VLCException("Calling method on dismissed Dialog instance");
            }

            if (username == null)
            {
                username = string.Empty;
            }
            if (password == null)
            {
                password = string.Empty;
            }

            var usernamePtr = username.ToUtf8();
            var passwordPtr = password.ToUtf8();

            var result = MarshalUtils.PerformInteropAndFree(
                () => Native.LibVLCDialogPostLogin(_id, usernamePtr, passwordPtr, store),
                usernamePtr, passwordPtr) == 0;

            _id = IntPtr.Zero;

            return(result);
        }
Пример #2
0
        /// <summary>
        /// <para>Sets the application name. LibVLC passes this as the user agent string</para>
        /// <para>when a protocol requires it.</para>
        /// </summary>
        /// <param name="name">human-readable application name, e.g. &quot;FooBar player 1.2.3&quot;</param>
        /// <param name="http">HTTP User Agent, e.g. &quot;FooBar/1.2.3 Python/2.6.0&quot;</param>
        /// <remarks>LibVLC 1.1.1 or later</remarks>
        public void SetUserAgent(string name, string http)
        {
            var nameUtf8 = name.ToUtf8();
            var httpUtf8 = http.ToUtf8();

            MarshalUtils.PerformInteropAndFree(() => Native.LibVLCSetUserAgent(NativeReference, nameUtf8, httpUtf8), nameUtf8, httpUtf8);
        }
Пример #3
0
 /// <summary>
 /// Media discoverer constructor
 /// </summary>
 /// <param name="libVLC">libvlc instance this will be attached to</param>
 /// <param name="name">name from one of LibVLC.MediaDiscoverers</param>
 public MediaDiscoverer(LibVLC libVLC, string name)
     : base(() =>
 {
     var nameUtf8 = name.ToUtf8();
     return(MarshalUtils.PerformInteropAndFree(() =>
                                               Native.LibVLCMediaDiscovererNew(libVLC.NativeReference, nameUtf8), nameUtf8));
 }, Native.LibVLCMediaDiscovererRelease)
 {
 }
Пример #4
0
        /// <summary>
        /// <para>Sets some meta-information about the application.</para>
        /// <para>See also libvlc_set_user_agent().</para>
        /// </summary>
        /// <param name="id">Java-style application identifier, e.g. &quot;com.acme.foobar&quot;</param>
        /// <param name="version">application version numbers, e.g. &quot;1.2.3&quot;</param>
        /// <param name="icon">application icon name, e.g. &quot;foobar&quot;</param>
        /// <remarks>LibVLC 2.1.0 or later.</remarks>
        public void SetAppId(string?id, string?version, string?icon)
        {
            var idUtf8      = id.ToUtf8();
            var versionUtf8 = version.ToUtf8();
            var iconUtf8    = icon.ToUtf8();

            MarshalUtils.PerformInteropAndFree(() => Native.LibVLCSetAppId(NativeReference, idUtf8, versionUtf8, iconUtf8),
                                               idUtf8, versionUtf8, iconUtf8);
        }
Пример #5
0
        /// <summary>
        /// Create a media from a MediaInput
        /// requires libvlc 3.0 or higher
        /// </summary>
        /// <param name="libVLC">the libvlc instance</param>
        /// <param name="input">the media to be used by libvlc. LibVLCSharp will NOT dispose or close it.
        /// Use <see cref="StreamMediaInput"/> or implement your own.</param>
        /// <param name="options">the libvlc options</param>
        public Media(LibVLC libVLC, MediaInput input, params string[] options)
            : base(() => CtorFromInput(libVLC, input), Native.LibVLCMediaRelease)
        {
            foreach (var option in options)
            {
                var optionUtf8 = option.ToUtf8();

                MarshalUtils.PerformInteropAndFree(() => Native.LibVLCMediaAddOption(NativeReference, optionUtf8), optionUtf8);
            }
        }
Пример #6
0
        /// <summary>
        /// <para>Set the meta of the media (this function will not save the meta, call</para>
        /// <para>libvlc_media_save_meta in order to save the meta)</para>
        /// </summary>
        /// <param name="metadataType">the <see cref="MetadataType"/>  to write</param>
        /// <param name="metaValue">the media's meta</param>
        public void SetMeta(MetadataType metadataType, string metaValue)
        {
            if (string.IsNullOrEmpty(metaValue))
            {
                throw new ArgumentNullException(metaValue);
            }

            var metaUtf8 = metaValue.ToUtf8();

            MarshalUtils.PerformInteropAndFree(() => Native.LibVLCMediaSetMeta(NativeReference, metadataType, metaUtf8), metaUtf8);
        }
Пример #7
0
        /// <summary>Add an option to the media with configurable flags.</summary>
        /// <param name="option">the media option</param>
        /// <param name="flags">the flags for this option</param>
        /// <remarks>
        /// <para>This option will be used to determine how the media_player will</para>
        /// <para>read the media. This allows to use VLC's advanced</para>
        /// <para>reading/streaming options on a per-media basis.</para>
        /// <para>The options are detailed in vlc --long-help, for instance</para>
        /// <para>&quot;--sout-all&quot;. Note that all options are not usable on medias:</para>
        /// <para>specifically, due to architectural issues, video-related options</para>
        /// <para>such as text renderer options cannot be set on a single media. They</para>
        /// <para>must be set on the whole libvlc instance instead.</para>
        /// </remarks>
        public void AddOptionFlag(string option, uint flags)
        {
            if (string.IsNullOrEmpty(option))
            {
                throw new ArgumentNullException(nameof(option));
            }

            var optionUtf8 = option.ToUtf8();

            MarshalUtils.PerformInteropAndFree(() => Native.LibVLCMediaAddOptionFlag(NativeReference, optionUtf8, flags), optionUtf8);
        }
Пример #8
0
 /// <summary>Gets a list of audio output devices for a given audio output module,</summary>
 /// <param name="audioOutputName">
 /// <para>audio output name</para>
 /// <para>(as returned by libvlc_audio_output_list_get())</para>
 /// </param>
 /// <returns>
 /// <para>A NULL-terminated linked list of potential audio output devices.</para>
 /// <para>It must be freed with libvlc_audio_output_device_list_release()</para>
 /// </returns>
 /// <remarks>
 /// <para>libvlc_audio_output_device_set().</para>
 /// <para>Not all audio outputs support this. In particular, an empty (NULL)</para>
 /// <para>list of devices doesnotimply that the specified audio output does</para>
 /// <para>not work.</para>
 /// <para>The list might not be exhaustive.</para>
 /// <para>Some audio output devices in the list might not actually work in</para>
 /// <para>some circumstances. By default, it is recommended to not specify any</para>
 /// <para>explicit audio device.</para>
 /// <para>LibVLC 2.1.0 or later.</para>
 /// </remarks>
 public AudioOutputDevice[] AudioOutputDevices(string audioOutputName) =>
 MarshalUtils.Retrieve(() =>
 {
     var audioOutputNameUtf8 = audioOutputName.ToUtf8();
     return(MarshalUtils.PerformInteropAndFree(() =>
                                               Native.LibVLCAudioOutputDeviceListGet(NativeReference, audioOutputNameUtf8), audioOutputNameUtf8));
 },
                       MarshalUtils.PtrToStructure <AudioOutputDeviceStructure>,
                       s => s.Build(),
                       device => device.Next,
                       Native.LibVLCAudioOutputDeviceListRelease);
Пример #9
0
        Media(Func <IntPtr> create, Action <IntPtr> release, params string[] options)
            : base(create, release)
        {
            if (options == null)
            {
                return;
            }

            foreach (var optionUtf8 in options.ToUtf8())
            {
                if (optionUtf8 != IntPtr.Zero)
                {
                    MarshalUtils.PerformInteropAndFree(() => Native.LibVLCMediaAddOption(NativeReference, optionUtf8), optionUtf8);
                }
            }
        }
Пример #10
0
        /// <summary>
        /// Create a new renderer discoverer with a LibVLC and protocol name depending on host platform
        /// </summary>
        /// <param name="libVLC">libvlc instance this will be connected to</param>
        /// <param name="name">
        /// The service discovery protocol name depending on platform. Use <see cref="LibVLC.RendererList"/> to find the one for your platform,
        /// or let libvlcsharp find it for you
        /// </param>
        public RendererDiscoverer(LibVLC libVLC, string?name = null)
            : base(() =>
        {
            if (string.IsNullOrEmpty(name))
            {
#if APPLE
                name = Bonjour;
#else
                name = Mdns;
#endif
            }

            var nameUtf8 = name.ToUtf8();
            return(MarshalUtils.PerformInteropAndFree(() =>
                                                      Native.LibVLCRendererDiscovererNew(libVLC.NativeReference, nameUtf8), nameUtf8));
        }, Native.LibVLCRendererDiscovererRelease)
        {
        }
Пример #11
0
        /// <summary>Add a slave to the current media.</summary>
        /// <param name="type">subtitle or audio</param>
        /// <param name="priority">from 0 (low priority) to 4 (high priority)</param>
        /// <param name="uri">Uri of the slave (should contain a valid scheme).</param>
        /// <returns>0 on success, -1 on error.</returns>
        /// <remarks>
        /// <para>A slave is an external input source that may contains an additional subtitle</para>
        /// <para>track (like a .srt) or an additional audio track (like a .ac3).</para>
        /// <para>This function must be called before the media is parsed (via</para>
        /// <para>libvlc_media_parse_with_options()) or before the media is played (via</para>
        /// <para>libvlc_media_player_play())</para>
        /// <para>LibVLC 3.0.0 and later.</para>
        /// </remarks>
        public bool AddSlave(MediaSlaveType type, uint priority, string uri)
        {
            var uriUtf8 = uri.ToUtf8();

            return(MarshalUtils.PerformInteropAndFree(() => Native.LibVLCMediaAddSlaves(NativeReference, type, priority, uriUtf8) != 0, uriUtf8));
        }
Пример #12
0
        /// <summary>
        /// Try to start a user interface for the libvlc instance.
        /// </summary>
        /// <param name="name">interface name, or null for default</param>
        /// <returns>True if successful, false otherwise</returns>
        public bool AddInterface(string?name)
        {
            var namePtr = name.ToUtf8();

            return(MarshalUtils.PerformInteropAndFree(() => Native.LibVLCAddInterface(NativeReference, namePtr) == 0, namePtr));
        }