`
幽灵猫
  • 浏览: 14052 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

视频处理控件TVideoGrabber中混合多个视频源(1)

阅读更多

其实一个或是几个作为普通的视频源使用的TVideoGrabber组件,可以进行混合来作为一个TVideoGrabber组件使用,这些普通的 组件可以是视频捕捉设备或是视频剪辑等。同时这个混合的组件独立于源组件,当第一组组件持续的发送给它视频帧时,它可以停止、预览、录制、暂停 等······

但是如何进行混合,好多的朋友就不是很了解,源组件可以用以下的方式显示到混合器组件中:

——作为一个基本的“复制”:在混合模式中的第二个组成部分接收和显示从第一部分组件来的视频。

——在需要的时候,将几个视频源切换成一个单一的来源。

——最为一个镶嵌模式,比如说在同一时间用2x2布局显示4个摄像机。

——交替显示,比如4摄像机一个接一个的显示

——一个马赛克/交替布局,比如16个摄像机用4个交替的2 x2摄像机的马赛克布局显示。

结合马赛克/交替混合

结合马赛克和交替布局,比如通过打组交替成4 X 4的视频窗口显示的4个摄像机来显示16个摄像机。

Mixer_AddToMixer组件参数:

——第1个参数是源组件的UniqueId

——第2个参数在那个时候不使用,只是将它设置为0

——第3个参数是源将会显示在的镶嵌线(对于一个只是交替使用设置为0)

——第4个参数是源将会显示在的马赛克列(对于一个只是交替使用设置为0)

——第5个参数是显示组号(对于一个只是交替使用设置为0)

——第6个参数是显示组持续的毫秒时间(对于一个只有马赛克设置为0)

——第 7参数应设置为TRUE

—— 第8参数应设置为TRUE

基本混合(第二个组件从第一组件接收到视频帧)

在这个模式下,你有第二组组件,可以将第一个组件作为一个视频源使用。

比如第一个组件使用预览,第二组件独立的开始/停止/暂停/恢复录音的第一个组件,并进行连续的预览。

VideoGrabber1.VideoSource = vs_VideoCaptureDevice
VideoGrabber1.StartPreview()
VideoGrabber2.VideoSource = vs_Mixer
VideoGrabber2.Mixer_AddToMixer (VideoGrabber1.UniqueID, 0, 0, 0, 0, 0, true, true);
VideoGrabber2.StartPreview()

 

VideoGrabber2将会作为视频源接收通过VideoGrabber1显示和发送的视频。

选择混合视频尺寸

默认情况下,混合组件将会使用以下视频大小:

——在开启混合组件之前,如果源已经开始,这个混合组件就会使用源尺寸。

——如果源尚未开始,混合组件会开始于320 x240。

在StartRecording StartPreview之前,在混合组件上调用UseNearestVideoSize来选择视频尺寸。

VideoGrabberMixer.VideoSource = vs_Mixer
VideoGrabberMixer.UseNearestVideoSize (640, 480, true)
VideoGrabberMixer.StartPreview()

 

在需要的时候,将几个源转换为一个

类似于用多于一个视频源的基本混合,可以通过调用Mixer_Activation来转换源,比如:

1、开启第1个捕捉设备的预览:

VideoGrabber1.VideoSource = vs_VideoCaptureDevice
VideoGrabber2.VideoDevice = 0
VideoGrabber1.StartPreview()

 

2、开启第2个捕捉设备的预览:

VideoGrabber2.VideoSource = vs_VideoCaptureDevice
VideoGrabber2.VideoDevice = 1
VideoGrabber2.StartPreview()

 

3、开启将会使得预览或记录在混合模式中的第3个组件

VideoGrabber3.VideoSource = vs_Mixer
int MixerId1 = VideoGrabber3.Mixer_AddToMixer (VideoGrabber1.UniqueID, 0, 0, 0, 0, 0, true, true)
int MixerId2 = VideoGrabber3.Mixer_AddToMixer (VideoGrabber2.UniqueID, 0, 0, 0, 0, 0, true, true)
VideoGrabber3.Mixer_Activation (MixerId2, false) // let' start with MixerId1 activated only
VideoGrabber3.StartPreview()

 

4、然后在输入、激活和停用以及其他之间进行切换:

VideoGrabber3.Mixer_Activation (MixerId1, false)
VideoGrabber3.Mixer_Activation (MixerId2, true)
or
VideoGrabber3.Mixer_Activation (MixerId2, false)
VideoGrabber3.Mixer_Activation (MixerId1, true)

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics