从IP摄像头进行C#流式传输并保存到UWP Windows 10中的文件
我正在开发一个通用windows 10应用程序,它必须从ACTi ip摄像头录制,并录制到文件。对于预览,我使用了VLC.MediaElement,它工作得非常好,但我需要将这些连续帧录制或保存到视频文件中。任何人都知道如何将其保存到文件中。摄像头使用http协议传输数据流,而不是RTSP或其他任何协议 我不介意使用FFMPEG的VLC,但我不能在UWP应用程序中从cmd.exe启动它 有什么想法吗 我是这样使用VLC.MediaElement的。对于预览,没有问题:从IP摄像头进行C#流式传输并保存到UWP Windows 10中的文件,c#,ffmpeg,camera,uwp,vlc,C#,Ffmpeg,Camera,Uwp,Vlc,我正在开发一个通用windows 10应用程序,它必须从ACTi ip摄像头录制,并录制到文件。对于预览,我使用了VLC.MediaElement,它工作得非常好,但我需要将这些连续帧录制或保存到视频文件中。任何人都知道如何将其保存到文件中。摄像头使用http协议传输数据流,而不是RTSP或其他任何协议 我不介意使用FFMPEG的VLC,但我不能在UWP应用程序中从cmd.exe启动它 有什么想法吗 我是这样使用VLC.MediaElement的。对于预览,没有问题: <vlc:Medi
<vlc:MediaElement Name="VLCPreview" AreTransportControlsEnabled="True" HardwareAcceleration="True" AutoPlay="True" Grid.ColumnSpan="3" HorizontalAlignment="Left" Height="960" VerticalAlignment="Top" Width="1141" Margin="299,0,0,0">
<vlc:MediaElement.TransportControls>
<vlc:MediaTransportControls ControlPanelOpacity="0.8" />
</vlc:MediaElement.TransportControls>
</vlc:MediaElement>
<MediaElement x:Name="mediaElement" AreTransportControlsEnabled="True" AutoPlay="True" Grid.ColumnSpan="3" HorizontalAlignment="Left" Height="204" Margin="38,44,0,0" VerticalAlignment="Top" Width="212"/>
我试图遵循3种策略:
提前感谢,记住这是一个ip摄像头,不是网络摄像头,我不能使用captureElement 您能提供一些关于当前如何获取相机流的代码片段吗?如果您还可以提供一些使用VLC.MediaElement进行预览的代码,这会更好。使用我编写的代码进行编辑。我测试了您的代码,它可以成功地将视频下载到本地文件夹。上面的代码片段遇到了什么问题?能否播放它创建的视频文件?。我不能。另一件事是如何停止录音,有什么想法吗?。它面向录制长视频。使用这些策略是否正确?。谢谢你的帮助!
public async void StartRecording()
{
Windows.Storage.StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
Debug.WriteLine(storageFolder.Path);
Windows.Storage.StorageFile sampleFileVid =
await storageFolder.CreateFileAsync(DateTime.Now.ToString("yyyyMMdd") + "File.avi",
Windows.Storage.CreationCollisionOption.OpenIfExists)
VLCPreview.Source = "http://Admin:123456@192.168.0.21:6021/cgi-bin/cmd/encoder?GET_STREAM";
try
{
HttpClientHandler aHandler = new HttpClientHandler();
aHandler.Credentials = new NetworkCredential("Admin", "123456");
aHandler.ClientCertificateOptions = ClientCertificateOption.Automatic;
HttpClient aClient = new HttpClient(aHandler);
aClient.DefaultRequestHeaders.ExpectContinue = false;
HttpResponseMessage response = await aClient.GetAsync("http://192.168.0.21:6021/cgi-bin/cmd/encoder?GET_STREAM", HttpCompletionOption.ResponseHeadersRead);//urlLinkToOnlineStream
var destinationFile = sampleFileVid;
var fileStream = await destinationFile.OpenAsync(FileAccessMode.ReadWrite);
Stream stream = await response.Content.ReadAsStreamAsync();
IInputStream inputStream = stream.AsInputStream();
ulong totalBytesRead = 0;
while (true)
{
// Read from the web.
IBuffer buffer = new Windows.Storage.Streams.Buffer(1024);
buffer = await inputStream.ReadAsync(buffer, buffer.Capacity, InputStreamOptions.None);
if (buffer.Length == 0)
{
break;
}
totalBytesRead += buffer.Length;
await fileStream.WriteAsync(buffer);
Debug.WriteLine("TotalBytesRead: {0:f}", totalBytesRead);
}
inputStream.Dispose();
fileStream.Dispose();
}
catch (Exception ex)
{
Debug.WriteLine("Excepción de vídeo en StartRecording: ", ex);
}
}