我有一个基于DirectShow编辑服务的遗留软件。它有一个播放器,其目的是合并一些视频文件片段,并使用EVR将其渲染为表格上的DES预览。
它适用于一个源或所有源都是WMV VC-1文件。但是,如果IAMTimelineSrc
中添加了多个IAMTimeline
,那么如果存在WMV VC-1以外的其他来源,则在我尝试搜索时间轴时预览会挂起。我没有收到任何错误或任何错误,音频和视频渲染都停止了。
我以直截了当的方式创建源代码:
首先,我创建一个新的空时间轴节点:
IAMTimeline::CreateEmptyNode
TIMELINE_MAJOR_TYPE
Source
为IAMTimelineObj::SetStartStop
IAMTimelineSrc::SetMediaName
IAMTimelineSrc::SetMediaTimes
(4)
然后设置所需的源属性:
IRenderEngine::SetTimelineObject
IRenderEngine::ConnectFrontEnd
IRenderEngine::GetFilterGraph
然后我用IRenderEngine渲染IAMTimeline:
IAMTimelineGroup::SetPreviewMode(true)
IRenderEngine::GetGroupOutputPin
ICaptureGraphBuilder2::RenderStream
对于每个组(我有2个,一组有视频源,一个有音频源)
WM ASF Reader -> WMVideo Decoder DMO
只要我将WMV VC-1文件用作呈现为IMediaSeeking::SetPositions
的源,这一切都能完美运行。
但是,任何其他格式,即使在Movie Maker中工作正常的DV-AVI,也可能使用DES,会导致IMediaSeeking::SetPositions
的严重问题。我调用dwCurrentFlags
AMSeekingSeekingFlags.AbsolutePositionin
0
,pStop
dwStopFlags
和AMSeekingSeekingFlags.NoPositioning
${filename:replace("Info"):append('.'):append(${fromDate})}
。
通过DES预览寻找可能导致此类问题的原因是什么?我无法相信DES只与WMV VC-1兼容,特别是因为Movie Maker明显支持的格式不仅仅是WMV VC-1。我可能会失踪什么?