用VLC点网库点击按钮开始录制流

时间:2014-06-13 10:07:12

标签: c#-4.0 libvlc

我有一个win表单应用程序,可以从ip camera中传输视频... 我使用的lib已经可以使用.. lib站点 VideoLan DotNet for WinForm,WPF& Silverlight 5

为了制作视频而我这样做:

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();

所以如果视频已播放,我该如何添加选项...

2 个答案:

答案 0 :(得分:0)

我正在使用libVlc,只是偶然发现了你的问题和答案。 我采取了类似的方法,但是当我点击time(libvlc_media_player_get_time(IntPtr p_mi))按钮时,我也抓住了record (start)。然后我用那个时间作为开始time(libvlc_media_player_set_time(IntPtr p_mi, Int64 newTime))来恢复播放并开始录制。

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

这种方法的缺点是恢复比赛有明显的延迟,只有一秒左右,但并不像我希望的那样无缝。我怀疑这是因为必须寻求到指定的时间。

我也发现了libvlc_media_player_record_[start|stop](IntPtr p_mi,...) api的一些引用,但没有官方提及。 我有兴趣了解你是否能找到更好的方法来完成这个以及你是如何做到的。

答案 1 :(得分:0)

看到那里:https://mykb.cipindanci.com/archive/SuperKB/4164/ 对于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_);

该链接演示了两个功能:

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);

停止记录:

return LibVlcAPI.libvlc_media_player_recorder_stop(this.libvlc_media_player_);

libvlc_media_player_recorder_stop和libvlc_media_player_recorder_start仅在VLC x86库中可用,而在x64 dll中不可用。

但是对于文件播放,您必须像BitMask777那样做。