我有一个简单的 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 需要这么多时间?这个问题能以某种方式解决吗?