C# 4.0 使用VLC网络库单击按钮开始录制流

C# 4.0 使用VLC网络库单击按钮开始录制流,c#-4.0,libvlc,C# 4.0,Libvlc,我有一个win-form应用程序,可以从ip摄像头中流式传输视频。。。 我使用一个已经可用的库。。 库位 适用于WinForm、WPF和Silverlight 5的VideoLan网络 为了扫描视频,我执行以下操作: string path = "rtsp://****:****@192.168.5.223/profile2/media.smp"; LocationMedia media = new LocationMedia(path); vlcControl1.Media = media;

我有一个win-form应用程序,可以从ip摄像头中流式传输视频。。。 我使用一个已经可用的库。。 库位 适用于WinForm、WPF和Silverlight 5的VideoLan网络

为了扫描视频,我执行以下操作:

string path = "rtsp://****:****@192.168.5.223/profile2/media.smp";
LocationMedia media = new LocationMedia(path);
vlcControl1.Media = media;
vlcControl1.Play();
我现在想要的是通过点击按钮将流保存到文件中,我的意思是,视频正在播放,然后我按下按钮录制视频

我怎么做

启动视频时,我可以这样做来保存

 string path = ....
 LocationMedia media = new LocationMedia(path);        media.AddOption(":sout=#transcode{vcodec=theo,vb=800,scale=1,acodec=flac,ab=128,channels=2,samplerate=44100}:std{access=file,mux=ogg,dst=C:\\Users\\hsilva\\Desktop\\123.mp4}");
 vlcControl1.Media = media;
 vlcControl1.Play();

那么,如果视频已经在播放,我如何添加选项…

我正在使用libVlc,刚刚偶然发现了您的问题和答案。 我采取了类似的方法,但当我点击
录制(开始)
按钮时,我也抓住了
时间(libvlc\u media\u player\u get\u time(IntPtr p\u mi))
。然后,我将该时间用作开始
时间(libvlc\u media\u player\u set\u time(IntPtr p\u mi,Int64 newTime))
以恢复播放并开始录制

在我的实现中,再次单击录制按钮停止录制,获取并设置时间,然后继续在屏幕上播放视频

这种方法的缺点是明显延迟了比赛的恢复,只有一秒钟左右,但并不像我希望的那样天衣无缝。我怀疑这是因为必须在指定的时间内进行搜索

我还找到了一些关于
libvlc\u media\u player\u record\u[start | stop](IntPtr p\u mi,…)
api的参考资料,但没有任何官方资料。 我很想知道您是否能够找到更好的方法来完成此任务,以及您是如何做到的。

请参见: 对于RTSP实时流媒体,只需按照以下操作:

IntPtr p_md = LibVlcAPI.libvlc_media_player_get_media(this.libvlc_media_player_);
LibVlcAPI.libvlc_media_add_option(p_md, pMrl);
LibVlcAPI.libvlc_media_player_set_media(libvlc_media_player_, p_md);
LibVlcAPI.libvlc_media_player_play(libvlc_media_player_);
并拨打以下电话停止录音:

IntPtr p_md = LibVlcAPI.libvlc_media_player_get_media(this.libvlc_media_player_);
LibVlcAPI.libvlc_media_player_set_media(libvlc_media_player_, p_md);
LibVlcAPI.libvlc_media_player_play(libvlc_media_player_);
return LibVlcAPI.libvlc_media_player_recorder_stop(this.libvlc_media_player_);
还有两个功能:

LibVlcAPI.libvlc_media_player_recorder_start(this.libvlc_media_player_, pMrl);
IntPtr pMrl = IntPtr.Zero;
byte[] bytes = Encoding.UTF8.GetBytes(FILE_PATH);
pMrl = Marshal.AllocHGlobal(bytes.Length + 1);
Marshal.Copy(bytes, 0, pMrl, bytes.Length);
Marshal.WriteByte(pMrl, bytes.Length, 0);
return LibVlcAPI.libvlc_media_player_recorder_start(this.libvlc_media_player_, pMrl);
停止录制:

IntPtr p_md = LibVlcAPI.libvlc_media_player_get_media(this.libvlc_media_player_);
LibVlcAPI.libvlc_media_player_set_media(libvlc_media_player_, p_md);
LibVlcAPI.libvlc_media_player_play(libvlc_media_player_);
return LibVlcAPI.libvlc_media_player_recorder_stop(this.libvlc_media_player_);
libvlc_媒体_播放器_刻录机_停止和libvlc_媒体_播放器_刻录机_启动仅在VLC x86 libs中可用,不适用于x64 DLL


但是对于文件播放,您必须像BitMask777一样进行操作。

因此,我所做的是停止正在播放的视频,然后使用sout选项启动新视频。但我目前正在尝试查找完成此代码的完整代码,然后将其发布在此处。非常感谢。我提出了相同的过程,先停止,然后开始,使用#复制指令,这样预览也会呈现出来。有点笨重,但总比没有好。抱歉耽搁了。我可以帮很多忙。当我写这段代码时,想法是一样的,总比什么都没有好。我知道我有点晚了,但是你能用
sout选项发布一些代码吗?或者我可以找到启动/停止记录流的工作代码示例的任何链接?这是很久以前的事了,但是上面的示例中有sout选项。我将尝试查找代码。