diff --git a/src/LibVLCSharp/Media.cs b/src/LibVLCSharp/Media.cs
index 202f8e7ab..ccbebcb11 100644
--- a/src/LibVLCSharp/Media.cs
+++ b/src/LibVLCSharp/Media.cs
@@ -41,7 +41,7 @@ internal struct Native
[DllImport(Constants.LibraryName, CallingConvention = CallingConvention.Cdecl,
EntryPoint = "libvlc_media_new_callbacks")]
internal static extern IntPtr LibVLCMediaNewCallbacks(IntPtr libVLC, InternalOpenMedia openCb, InternalReadMedia readCb,
- InternalSeekMedia seekCb, InternalCloseMedia closeCb, IntPtr opaque);
+ InternalSeekMedia? seekCb, InternalCloseMedia closeCb, IntPtr opaque);
[DllImport(Constants.LibraryName, CallingConvention = CallingConvention.Cdecl,
EntryPoint = "libvlc_media_add_option")]
@@ -295,7 +295,7 @@ static IntPtr CtorFromInput(LibVLC libVLC, MediaInput input)
return Native.LibVLCMediaNewCallbacks(libVLC.NativeReference,
OpenMediaCallbackHandle,
ReadMediaCallbackHandle,
- SeekMediaCallbackHandle,
+ input.CanSeek ? SeekMediaCallbackHandle : null,
CloseMediaCallbackHandle,
GCHandle.ToIntPtr(input.GcHandle));
}
diff --git a/src/LibVLCSharp/MediaInput.cs b/src/LibVLCSharp/MediaInput.cs
index 3a94e6422..44b3ba237 100644
--- a/src/LibVLCSharp/MediaInput.cs
+++ b/src/LibVLCSharp/MediaInput.cs
@@ -23,6 +23,11 @@ protected MediaInput()
GcHandle = GCHandle.Alloc(this);
}
+ ///
+ /// A value indicating whether this Media input can be seeked in.
+ ///
+ public bool CanSeek { get; protected set; } = true;
+
///
/// LibVLC calls this method when it wants to open the media
///
diff --git a/src/LibVLCSharp/StreamMediaInput.cs b/src/LibVLCSharp/StreamMediaInput.cs
index 6f30b2f09..0587e9a5b 100644
--- a/src/LibVLCSharp/StreamMediaInput.cs
+++ b/src/LibVLCSharp/StreamMediaInput.cs
@@ -21,6 +21,7 @@ public class StreamMediaInput : MediaInput
public StreamMediaInput(Stream stream)
{
_stream = stream ?? throw new ArgumentNullException(nameof(stream));
+ CanSeek = stream.CanSeek;
}
///