如何在C#中为axWindowsMediaPlayer组件的视频编程添加标记?
在Visual Studio 2019 C#中为axWindowsMediaPlayer添加标记并响应MarkerHit事件
核心实现逻辑
要动态添加视频标记并触发对应操作,需借助IWMPMedia3接口操作标记,结合PlayStateChange事件确保媒体加载完成后再添加标记,最后通过MarkerHit事件响应标记触发。
代码实现步骤
控件与引用准备
确保已在Visual Studio窗体中添加axWindowsMediaPlayer控件,并自动引用WMPLib和AxWMPLib程序集。声明媒体操作对象
在窗体类中声明用于标记操作的媒体对象:private WMPlib.IWMPMedia3 _currentMedia;媒体就绪时添加标记
订阅axWindowsMediaPlayer的PlayStateChange事件,在媒体进入就绪状态后添加自定义标记:private void axWindowsMediaPlayer1_PlayStateChange(object sender, AxWMPLib._WMPOCXEvents_PlayStateChangeEvent e) { // 媒体就绪状态(wmppsReady)时执行标记添加 if (e.newState == (int)WMPLib.WMPPlayState.wmppsReady) { _currentMedia = axWindowsMediaPlayer1.currentMedia as WMPlib.IWMPMedia3; if (_currentMedia == null) return; // 清除现有标记(可选,避免与媒体自带标记冲突) for (int i = _currentMedia.markerCount; i >= 1; i--) { _currentMedia.removeMarker(i); } // 添加标记:参数1为标记索引(从1开始),参数2为时间(单位:秒) _currentMedia.setMarker(1, 1.23); // 对应00:01.23 _currentMedia.setMarker(2, 1.54); // 对应00:01.54 _currentMedia.setMarker(3, 2.14); // 对应00:02.14 } }响应标记触发执行操作
订阅axWindowsMediaPlayer的MarkerHit事件,根据标记索引执行对应业务逻辑:private void axWindowsMediaPlayer1_MarkerHit(object sender, AxWMPLib._WMPOCXEvents_MarkerHitEvent e) { switch (e.markerNum) { case 1: // 替换为00:01.23标记点的自定义操作 MessageBox.Show("触发标记点:00:01.23"); break; case 2: MessageBox.Show("触发标记点:00:01.54"); break; case 3: MessageBox.Show("触发标记点:00:02.14"); break; } }
关键注意事项
- 标记索引从1开始,
setMarker和removeMarker方法均遵循此规则。 - 时间参数需转换为秒,例如
01:30.50对应90.5秒。 - 必须等待媒体进入
wmppsReady状态后再操作标记,否则currentMedia可能为空或未初始化。 IWMPMedia3是扩展接口,需将currentMedia强制转换为该类型才能使用标记操作方法。
内容的提问来源于stack exchange,提问作者Jose Diaz
相关产品推荐
相关产品推荐

