使用LEADTOOLS DVR组件创建一个188宝金博怎么下载LEADTOOLS多媒体捕获应用程序

执行以下步骤,使用LEADTOOLS MPEG-2传输模块的LEADTOOLS multimed188宝金博怎么下载ia CaptureCtrl和PlayCtrl控件和DVR组件创建和运行多媒体捕获DVR应用程序。

  1. 启动Visual Studio。

  2. 选择文件- >- >项目…菜单上的。

  3. 新项目对话框中,选择Visual c#项目或者VB项目在项目类型列表中,并选择“Windows应用程序在模板列表中。

  4. 输入项目名称为“188宝金博怎么下载多媒体DVR“在项目名称字段,然后单击好吧.类型为项目键入新位置或选择目录(如果需要)浏览按钮,然后单击好吧

  5. 在“解决方案资源管理器窗口,右键单击参考文献"文件夹并选择"添加引用…从上下文菜单。在“添加引用对话框中,选择net选项卡并选择Leadtools。188宝金博怎么下载多媒体并点击好吧.同时,右键单击参考文献"文件夹并选择"添加引用…从上下文菜单。在“添加引用对话框中,选择COM选项卡并选择:

    • LEAD MPEG2传输解复用器库
    • 领导DVR水槽库
    • 铅MPEG-2编码器滤波器库

    注意:以上COM对象必须注册;万一他们不是;用regsvr32。有关更多信息,请参阅DirectShow无注册表激活

    下一个点击好吧

  6. 确保Form1在设计视图中。去工具箱(视图->工具箱),并拖动CaptureCtrl控件和PlayCtrl控件。将其添加到表单后,在控件上设置以下属性:

    财产 价值
    名字 _capturectrl
    上,下,左
    名字 _playctrl
    上,下,右
    自动启动
  7. 转到工具箱(视图->工具箱),并拖动窗体上的TrackBar控件(在播放控件的下面),并设置以下属性:

    财产 价值
    名字 _track
    下,左,右
  8. 转到工具箱(视图->工具箱),将两个Button控件拖到窗体底部,并设置以下属性:

    财产 价值
    名字 _buttonCapture
    文本 捕获
    下,右
    名字 _buttonPlay
    文本
    下,右
  9. 开关Form1编码视图(右键单击Form1在“解决方案资源管理器”中选择视图代码),并在文件开头添加以下行:

    VB
    进口Leadtools。188宝金博怎么下载多媒体进口LMMpgDmxTLib进口LMDVRSinkLib进口LMMPEG2EncoderLib
    c#
    使用Leadtools.188宝金博怎么下载Multimedia;使用LMMpgDmxTLib;使用LMDVRSinkLib;使用LMMPEG2EncoderLib;

  10. 声明以下私有变量:

    VB
    私人常量SLIDER_MAX作为整数= 10000私人_targetFile作为字符串私人_targetFolder作为字符串私人_capturing作为布尔私人_mpegDemux作为LMMpgDmxT私人_dvrSink作为ILMDVRSink私人_firstPTS作为私人_lastPTS作为
    c#
    私人常量intSlider_max = 10000;私人字符串_targetFile;私人字符串_targetFolder;私人保龄球_capturing;私人LMMpgDmxT _mpegDemux;私人ILMDVRSink _dvrSink;私人_firstPTS;私人_lastPTS;

  11. 在Form1 Load事件中添加一个事件处理程序,代码如下:

    VB
    私人Form1_Load (按值传递发送方作为系统。对象,按值传递e作为System.EventArgs)处理MyBase.Load如果_capturectrl.VideoDevices。= 0然后异常(“没有可用的捕获设备”结束如果如果_capturectrl。VideoDevices (“模拟”没有什么然后异常(“没有模拟电视捕捉设备可用”结束如果_capturectrl。VideoDevices (“模拟”).选择=真正的_capturectrl。UseVideoDeviceAudio =真正的_capturing =_targetFolder = Path.Combine(Directory.GetCurrentDirectory(),“DVRFolder”如果Directory.Exists (_targetFolder))然后Directory.CreateDirectory (_targetFolder)结束如果_targetFile =“capture.lbl”_capturectrl。PreviewTap = CapturePreviewTap。源_capturectrl。预览=真正的_capturectrl。PreviewSource = CapturePreview。视频结束
    c#
    私人无效Form1_Load (对象发送者,系统。EventArgs e)如果(_capturectrl.VideoDevices。计数== 0)异常(“没有可用的捕获设备”);如果(_capturectrl。VideoDevices [“模拟”) = =异常(“没有模拟电视捕捉设备可用”);_capturectrl。VideoDevices [“模拟”]。选择=真正的_capturectrl。UseVideoDeviceAudio =真正的_capturing =_targetFolder = Path.Combine(Directory.GetCurrentDirectory(),“DVRFolder”);如果(! Directory.Exists (_targetFolder))Directory.CreateDirectory (_targetFolder);_targetFile =“capture.lbl”_capturectrl。PreviewTap = CapturePreviewTap.Source;_capturectrl。预览=真正的_capturectrl。PreviewSource = CapturePreview.Video;

  12. 添加如下helper方法:

    VB
    私人函数IsStreaming ()作为布尔返回(_capturectrl。视频捕获StreamType = Leadtools.Multimedia.Constants.MEDIATYPE_Stream)结束函数私人函数PTSToSliderPosition (按值传递curPTS作为作为整数昏暗的retVal作为整数= 0如果curPTS <= _firstPTS然后retVal = 0ElseIfcurPTS >= _lastPTS然后retVal = SLIDER_MAX其他的retVal =CInt((curPTS - _firstPTS) * SLIDER_MAX) / (_lastPTS - _firstPTS) + 0.5)结束如果返回retVal结束函数私人函数SliderPositionToPTS (按值传递非营利组织作为整数作为返回_firstPTS +CDbl(nPos) * (_lastPTS - _firstPTS) /CDbl(SLIDER_MAX)结束函数
    c#
    私人保龄球IsStreaming ()返回(_capturectrl。视频捕获StreamType == Constants.MEDIATYPE_Stream);私人intPTSToSliderPosition (curPTS)intretVal = 0;如果(curPTS <= _firstPTS)retVal = 0;其他的如果(curPTS >= _lastPTS)retVal = SLIDER_MAX;其他的retVal = (int)((curPTS - _firstPTS) * SLIDER_MAX) / (_lastPTS - _firstPTS) + 0.5);返回retVal;私人SliderPositionToPTS (int非营利组织)返回_ (1)nPos * (_lastPTS - _firstPTS) / () SLIDER_MAX;

  13. 向_capturectrl Progress事件添加一个事件处理程序,并将其编码如下:

    VB
    私人_capturectrl_Progress (按值传递发送方作为对象按值传递e作为ProgressEventArgs)处理_capturectrl。进步如果_mpegDemux没有什么然后_mpegDemux.RefreshPosition (0)昏暗的curPTS作为= _mpegDemux。CurrentStreamPTS_firstPTS = _mpegDemux。FirstStreamPTS_lastPTS = _mpegDemux。LastStreamPTS如果curPTS < _firstPTS需要说明_playctrl。状态=游戏状态。停顿了一下然后_playctrl.Run ()结束如果结束如果结束
    c#
    私人无效_capturectrl_Progress (对象发送者,progressevenargs e)如果(_mpegDemux ! =_mpegDemux.RefreshPosition (0);curPTS = _mpegDemux.CurrentStreamPTS;_firstPTS = _mpegDemux.FirstStreamPTS;_lastPTS = _mpegDemux.LastStreamPTS;如果(curPTS < _firstPTS && _playctrl。状态== PlayState.Paused)_playctrl.Run ();

  14. 为_playctrl TrackingPositionChanged事件添加一个事件处理程序,并按如下代码编写:

    VB
    私人_playctrl_TrackingPositionChanged (按值传递发送方作为系统。对象,按值传递e作为TrackingPositionChangedEventArgs)处理_playctrl。TrackingPositionChanged如果_mpegDemux没有什么然后_mpegDemux.RefreshPosition (0)昏暗的curPTS作为= _mpegDemux。CurrentStreamPTS_firstPTS = _mpegDemux。FirstStreamPTS_lastPTS = _mpegDemux。LastStreamPTS_track。价值=PTSToSliderPosition (curPTS)结束如果结束
    c#
    私人无效_playctrl_TrackingPositionChanged (对象发件人,TrackingPositionChangedEventArgs e)如果(_mpegDemux ! =_mpegDemux.RefreshPosition (0);curPTS = _mpegDemux.CurrentStreamPTS;_firstPTS = _mpegDemux.FirstStreamPTS;_lastPTS = _mpegDemux.LastStreamPTS;_track。价值=PTSToSliderPosition (curPTS);

  15. 向_track Scroll事件添加一个事件处理程序,并按如下代码编写:

    VB
    私人_track_Scroll (按值传递发送方作为系统。对象,按值传递e作为EventArgs)处理_track。滚动如果_mpegDemux没有什么然后昏暗的ptsPos作为= SliderPositionToPTS (_track.Value)_mpegDemux。CurrentStreamPTS = ptsPos结束如果结束
    c#
    私人无效_track_Scroll (对象发送者,EventArgs如果(_mpegDemux ! =ptsPos = SliderPositionToPTS(_track.Value);_mpegDemux。CurrentStreamPTS = ptsPos;

  16. 在_capturectrl Complete事件中添加一个事件处理程序,并按照如下代码编写它:

    VB
    私人_capturectrl_Complete (按值传递发送方作为系统。对象,按值传递e作为EventArgs)处理_capturectrl。完整的对话框。显示(“捕获完整”_buttonCapture。启用了=真正的结束
    c#
    私人无效_capturectrl_Complete (对象发送者,EventArgs对话框。显示(“捕获完整”);_buttonCapture。启用了=真正的

  17. 在_playctrl StateChanged事件中添加一个事件处理程序,并按照如下代码编写它:

    VB
    私人_playctrl_StateChanged (按值传递发送方作为对象按值传递e作为StateChangedEventArgs)处理_playctrl。statechange如果e.state = PlayState。运行然后_mpegDemux =没有什么_mpegDemux = TryCast(_playctrl.GetSubObject(PlayObject.Splitter), LMMpgDmxT)结束如果结束
    c#
    私人无效_playctrl_StateChanged (对象发送者:StateChangedEventArgs如果(e.state == PlayState.Running)_mpegDemux =_mpegDemux = _playctrl.GetSubObject(PlayObject.Splitter)作为LMMpgDmxT;

  18. 向_buttonCapture Click事件添加一个事件处理程序,并按照如下代码编写它:

    VB
    私人_buttonCapture_Click (按值传递发送方作为系统。对象,按值传递e作为System.EventArgs)处理_buttonCapture。点击试一试如果_capturing =真正的然后_capturectrl.StopCapture ()其他的昏暗的recVideoComp作为字符串字符串空虚昏暗的recAudioComp作为字符串字符串空虚如果IsStreaming ()然后_capturectrl.TargetFormats.DVR。选择=真正的_capturectrl。TargetFormat = TargetFormatType。DVR_capturectrl.VideoCompressors。选择= -1_capturectrl.AudioCompressors。选择= -1其他的_capturectrl.TargetFormats.DVRTransport。选择=真正的recVideoComp = _capturectrl.TargetFormats.DVRTransport.RecommendedVideoCompressorrecAudioComp = _capturectrl.TargetFormats.DVRTransport.RecommendedAudioCompressor_capturectrl。TargetFormat = TargetFormatType。DVRTransport如果recVideoComp < >字符串空虚然后_capturectrl.VideoCompressors (recVideoComp)。选择=真正的结束如果如果recAudioComp < >字符串空虚然后_capturectrl.AudioCompressors (recAudioComp)。选择=真正的结束如果如果_capturectrl.VideoCompressors.Mpeg2。选择=真正的然后昏暗的mpeg2Encoder作为LMMPEG2Encoder = TryCast(_capturerectrl . getsubobject (CaptureObject.VideoCompressor), LMMPEG2Encoder)如果mpeg2Encoder没有什么然后mpeg2Encoder。EncodingThreads = eMpeg2EncodingThreads。MPEG2_THREAD_AUTOmpeg2Encoder。视频Format = eMPEG2VIDEOFORMAT.MPEG2_VF_NTSCMarshal.ReleaseComObject (mpeg2Encoder)结束如果结束如果结束如果_capturectrl。预览=真正的_capturectrl。TargetFile = _targetFile_capturectrl.ReadyCapture (CaptureMode.VideoAndAudioCaptureMode.InhibitRun)_dvrSink = TryCast(_capturerectrl . getsubobject (CaptureObject.Sink), ILMDVRSink)如果_dvrSink没有什么然后昏暗的dBuffSize作为= 102400000100mb昏暗的lFileCount作为整数= 8' 8缓冲文件_dvrSink.StartChangingAttributes ()_dvrSink。FolderCount = 1_dvrSink.FolderName(0) = _targetFolder_dvrSink。SetBufferSize(0, lFileCount, dBuffSize)_dvrSink。StopChangingAttributes (昏暗的bufferFolder作为字符串= _dvrSink。BaseName结束如果_capturectrl.RunCapture ()_buttonCapture。启用了=_capturing =真正的结束如果前女友作为异常MessageBox.Show (ex.Message)结束试一试结束
    c#
    私人无效_buttonCapture_Click (对象发送者,系统。EventArgs e)试一试如果(_capturing = =真正的_capturectrl.StopCapture ();其他的字符串recVideoComp =字符串空虚;字符串recAudioComp =字符串空虚;如果(IsStreaming ())_capturectrl.TargetFormats.DVR。选择=真正的_capturectrl。TargetFormat = targetformatttype . dvr;_capturectrl.VideoCompressors。选择= -1;_capturectrl.AudioCompressors。选择= -1;其他的_capturectrl.TargetFormats.DVRTransport。选择=真正的recVideoComp = _capturectrl.TargetFormats.DVRTransport.RecommendedVideoCompressor;recAudioComp = _capturectrl.TargetFormats.DVRTransport.RecommendedAudioCompressor;_capturectrl。TargetFormat = targetformatttype . dvrtransport;如果(recVideoComp ! =字符串空虚)_capturectrl.VideoCompressors [recVideoComp]。选择=真正的如果(recAudioComp ! =字符串空虚)_capturectrl.AudioCompressors [recAudioComp]。选择=真正的如果(_capturectrl.VideoCompressors.Mpeg2。选择= =真正的mpeg2Encoder = _capturetrl . getsubobject (CaptureObject.VideoCompressor)作为LMMPEG2Encoder;如果(mpeg2Encoder ! =mpeg2Encoder。EncodingThreads = eMpeg2EncodingThreads.MPEG2_THREAD_AUTO;mpeg2Encoder。视频Format = eMPEG2VIDEOFORMAT.MPEG2_VF_NTSC;Marshal.ReleaseComObject (mpeg2Encoder);_capturectrl。预览=真正的_capturectrl。目标文件= _targetFile;_capturectrl.ReadyCapture (CaptureMode.VideoAndAudio|CaptureMode.InhibitRun);_dvrSink = _capturetrl . getsubobject (CaptureObject.Sink)作为ILMDVRSink;如果(_dvrSink ! =dBuffSize = 102400000;// 100 MBintlFileCount = 8;// 8个缓冲文件_dvrSink.StartChangingAttributes ();_dvrSink。FolderCount = 1;_dvrSink。set_FolderName (0, _targetFolder);_dvrSink。SetBufferSize(0, lFileCount, dBuffSize);_dvrSink。StopChangingAttributes ();字符串bufferFolder = _dvrSink.BaseName;_capturectrl.RunCapture ();_buttonCapture。启用了=_capturing =真正的(异常交货)对话框。显示(, ex.Message);

  19. 为_buttonPlay Click事件添加一个事件处理程序,并按如下代码编写:

    VB
    私人_buttonPlay_Click (按值传递发送方作为系统。对象,按值传递e作为System.EventArgs)处理_buttonPlay。点击试一试_mpegDemux =没有什么_playCtrl.ResetSource ()_playCtrl。PreferredMPEG2Splitter = Leadtools.188宝金博怎么下载Multimedia.Constants.Filter_MPEG2_Transport_Demux_playctrl。源File = Path.Combine(_targetFolder, _targetFile)_playctrl。运行前女友作为异常MessageBox.Show (ex.Message)结束试一试结束
    c#
    私人无效_buttonPlay_Click (对象发送者,系统。EventArgs e)试一试_mpegDemux =_playCtrl.ResetSource ();_playCtrl。PreferredMPEG2Splitter = Constants.Filter_MPEG2_Transport_Demux;_playctrl。源File = Path.Combine(_targetFolder, _targetFile);_playctrl.Run ();(异常交货)对话框。显示(, ex.Message);

  20. 构建并运行程序以测试它。

LEADTOOLS多188宝金博怎么下载媒体
188金宝搏的网址客服|支持|联系我们|知识产权公告
©1991 - 2021领德科技有限公司版权所有。