我正在使用VLCdotNet包在WinForm应用程序上显示流。 它只在显示时效果很好。
然后,我添加了记录流的可能性(将其保存到file.avi) 保存流非常有效。
可悲的是,当我开始录制时,显示屏会冻结。 显示第一帧,然后保持这样。仅此而已。 我无法监控记录的内容,因此很烦人。 就像我说的那样,.avi文件很好,只是显示冻结。
这是代码:
vlcControl1.Stop(); //stop because recording requires to restart the .Play()
vlcControl1.SetMedia(medias[0], new string[] { ":sout=#transcode{vcodec=h264,vb=1024,acodec=mpga,ab=128,channels=2,samplerate=44100}:duplicate{dst=display,dst=std{access=file,mux=avi,dst='C:\stream\videos\name.avi'}}" });
vlcControl1.Play();
我打赌这与sout
命令有关,但我没有看到错误。
我试图更改dst=display
和dst=std
的顺序,将第一个或第二个,第一个或第二个相同的效果。
如果我只回流.Play()
,它会成功显示回来。
vlcControl1.Stop();
vlcControl1.SetMedia(medias[0]);
vlcControl1.Play();
所以我认为它确实来自sout
命令的一些参数。
编辑: 我收到了vlc论坛管理员的一些消息......
Sout = display在vlcControl1中不起作用。
是否有人考虑过任何解决方法或hack
可能会解决这个问题?
答案 0 :(得分:0)
...良好 我决定找一个“解决方法”。
vlcControl2
visible=false
vlcControl1
。我只是使用vlcControl2
作为隐藏的临时组件来记录文件......
//play the stream on screen
vlcControl1.Stop();
vlcControl1.SetMedia(medias[0]);
vlcControl1.Play();
//record it from the hidden control
vlcControl2.Stop();
vlcControl2.SetMedia(medias[0], new string[] { ":sout=#transcode{vcodec=h264,vb=1024,acodec=mpga,ab=128,channels=2,samplerate=44100}:duplicate{dst=nodisplay,dst=std{access=file,mux=avi,dst='C:\stream\videos\name.avi'}}" });
vlcControl2.Play();
//stop recording
vlcControl2.Stop();
//this just because i prefer to clean things
vlcControl2.SetMedia("");
使用这种方法可能根本不干净,因为它加载了两倍的数据......但至少它可以工作......