У меня есть простое приложение WPF. Приложение записывает поток RTSP в файл. Для этого используется библиотека Vlc.DotNet.
Я протестировал приложение на двух компьютерах, и результаты одинаковы для обоих.
Код приложения приведен ниже.
public partial class MainWindow : Window
{
private IPath _pathWrapper;
private IDirectoryInfo _vlcLibDirectory;
private VlcMediaPlayer _videoRecorder;
public MainWindow()
{
InitializeComponent();
}
private void OnButtonClick(object sender, RoutedEventArgs e)
{
if (_videoRecorder != null && _videoRecorder.IsPlaying())
{
_videoRecorder.Stop();
Button.Background = Brushes.Blue;
_videoRecorder = null;
return;
}
string currentDirectory = AppDomain.CurrentDomain.BaseDirectory;
_pathWrapper = new PathWrap();
_vlcLibDirectory = new DirectoryInfoWrap(_pathWrapper.Combine(currentDirectory, "libvlc", IntPtr.Size == 4 ? "win-x86" : "win-x64"));
var options = new string[]
{
"--file-logging",
"--logfile=OnvifVideoRecording.log",
"-vvv"
};
_videoRecorder = new VlcMediaPlayer(_vlcLibDirectory.DirectoryInfo, options);
//string fileDestination = "\\\\\\BuildSrv\\Videos\\A, A, 1\\test.mp4";
string fileDestination = @"D:\Media\Video\A, A, 1\test.mp4";
if (File.Exists(fileDestination))
{
File.Delete(fileDestination);
}
string[] mediaOptions =
{
":sout=#file{dst='" + fileDestination + "'}",
":sout-keep"
};
_videoRecorder.SetMedia("rtsp://192.168.1.110:5504/channel=0,stream=0", mediaOptions);
_videoRecorder.Play();
Button.Background = Brushes.Red;
}
}
Приложение имеет окно. В окне есть кнопка. При первом нажатии этой кнопки начинается запись видеофайла, и кнопка становится красной. Я обычно записываю видеофайлы в течение 10 минут. При повторном нажатии кнопки запись видеофайла прекращается, и кнопка становится синей.
Если я записываю файл в локальный пункт назначения (например, на тот же компьютер, на котором выполняется программа), D: \ Media \ Video \ A, A, 1 \ test.mp4), все в порядке. Запись видеофайла начинается и останавливается быстро, почти сразу.
Проблемы возникают при попытке записи файла на удаленный компьютер (например, \ BuildSrv \ Videos \ A, A, 1 \ test.mp4). Запись видео файла начинается немедленно. Однако _videoRecorder.Stop () занимает приблизительно 30 секунд - 1 минуту. Монитор ресурсов показывает очень высокое использование сети (90% в случае одного компьютера и 100% в случае другого) после повторного нажатия кнопки (запись видео останавливается). Чем длиннее записанный видеофайл, тем больше времени требуется для остановки VlcMediaPlayer.
Почему остановка VlcMediaPlayer занимает так много времени в случае записи потока RTSP на удаленный компьютер? Можно ли как-то решить эту проблему?