繁体   English   中英

DirectShow快速视频播放

[英]DirectShow Jerky Video Playback at Speed

我正在使用DirectShow / VMR9在我的应用程序中播放MPEG 4视频。 我使用IMediaSeeking SetRate设置视频的速度。 播放我创建的视频时,其播放速度最高可达4倍,在此之上,视频变得非常生涩。 使用Windows媒体播放器以高于4倍的速度播放同一文件并不容易。 任何人都可以阐明为什么Windows Media Player可以快速播放我的文件但我的DirectShow过滤器无法显示的原因。

我的图形拓扑是Recording.avi-> AVI Splitter-> Mpeg4s解码器DMO-> Ds.NET Grabber->色彩空间转换器->视频混合渲染器9。

如果您需要任何进一步的信息,请告诉我。

更新资料

我卸下了采集卡(因此也取下了csc),并且播放速度最高不超过8倍,这已经足够了,但是我确实需要采集卡。 当我添加采集卡时,CSC结束了。 我想尽可能删除CSC,以查看是否在保留采集卡的同时有所改善。 以下是我的带有中间格式(带和不带过滤器)的图表。 我尝试将抓取器的媒体子类型设置为NV12(例如非抓取器图),但是出现错误“找不到中间过滤器的组合来建立连接”。 我包括用于配置采集卡的代码。

没有csc,是否可以使它正常工作?

也不确定它是否相关,但我不了解在没有抓取器的情况下视频尺寸如何在图形上更改。

与抓斗

Recording.avi -----(AVI)----- AVI分离器-----(MP4V-704 * 576 – 24bits)----- Mpeg4s解码器DMO -----(RGB24 704 * 576 )----- Ds.NET抓取器-(RGB24 704 * 576)-----色彩空间转换器-----((ARGB32 704 * 576)-----视频混合渲染器9

没有抓斗

Recording.avi -----(AVI)----- AVI分离器-----(MP4V-704 * 576 – 24bits)----- Mpeg4s解码器DMO -----(NV12 768 * 576 12位)-----视频混合渲染器9。

 private void ConfigureSampleGrabber(ISampleGrabber sampleGrabber)
 {
        AMMediaType media;
        int hr;

        // Set the media type to Video/RBG24
        media = new AMMediaType();
        media.majorType = MediaType.Video;
        media.subType = MediaSubType.ARGB32; // tried NV12 here, gives error.
        media.formatType = FormatType.VideoInfo;
        hr = sampleGrabber.SetMediaType(media);
        DsError.ThrowExceptionForHR(hr);

        DsUtils.FreeAMMediaType(media);
        media = null;

        // Configure the samplegrabber
        hr = sampleGrabber.SetBufferSamples(true);
        DsError.ThrowExceptionForHR(hr);
    }

CPU使用率详细信息

酷睿i3-3300MHz –具有超线程4GB RAM

4倍速度

CPU1〜45%

CPU2〜0%

CPU3〜33%

CPU4〜0%

8倍速度

CPU1〜40%

CPU2〜25%(但非常尖刻0-50%)

CPU3〜40%

CPU4〜0%

核心i3-3300MHz –在BIOS中禁用了超线程。

4倍速度

CPU1〜45%

CPU2〜33%

8倍速(16倍速时,结果相同)

CPU1〜66%

CPU2〜45%

一个典型的原因是,在此回放速率下,您的解码线程在100%CPU上运行并且无法解码更多帧,您开始看到不规则的帧呈现和/或掉帧。

在哪里看:

  • 使用任务管理器或其他应用程序检查您的CPU,以查看其中一个内核是否已用完并且不再进入空闲状态
  • 检查VMR属性以查看帧是否丢失或抖动太高

在此处输入图片说明

为了播放视频,MediaPlayer正在使用MediaFoundation。 对于大多数视频,播放是通过硬件加速的。 如果在DirectShow的解码器和渲染器之间有一些过滤器,则DirectShow中没有硬件加速。 在没有DS.Net Grabber和色彩空间转换器的情况下重试(=> csc还是一个巨大的性能杀手)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM