我有一个简单的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所需的时间就越多。
在将RTSP流记录到远程计算机的情况下,为什么停止VlcMediaPlayer会花费那么多时间?这个问题可以解决吗?