/// <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); }
/// <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. "FooBar player 1.2.3"</param> /// <param name="http">HTTP User Agent, e.g. "FooBar/1.2.3 Python/2.6.0"</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); }
/// <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) { }
/// <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. "com.acme.foobar"</param> /// <param name="version">application version numbers, e.g. "1.2.3"</param> /// <param name="icon">application icon name, e.g. "foobar"</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); }
/// <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); } }
/// <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); }
/// <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>"--sout-all". 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); }
/// <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);
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); } } }
/// <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) { }
/// <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)); }
/// <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)); }