问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

DirectX 8.0的DirectX 8.0 DirectShow

发布网友 发布时间:2022-05-04 13:47

我来回答

2个回答

懂视网 时间:2022-05-04 18:08

单一视频流 Filter Graph 如图 2 : 图 2 单一视频流的 Filter Graph 注意: 紧靠 Video Renderer 的上一级 Filter 的 Video 输出 Pin ,其 GetMediaType 函数提供的 Media Type 的 VIDEOINFOHEADER 结构要求填写完整,不仅包括图像的宽度、高度、像素位数,

单一视频流

Filter Graph如图2:

图2 单一视频流的Filter Graph

注意:紧靠Video Renderer的上一级Filter的Video输出Pin,其GetMediaType函数提供的Media Type的VIDEOINFOHEADER结构要求填写完整,不仅包括图像的宽度、高度、像素位数,还包括BITMAPINFOHEADER结构的大小(biSize,指定为sizeof(BITMAPINFOHEADER))、平面数(biPlanes,指定为1)。如果需要调色板,BITMAPINFOHEADER数据结构后面还要带上调色板数据;如果是16位的RGB格式,BITMAPINFOHEADER数据结构后面则要带上RGB分量提取的掩码。代码参考如下:

VIDEOINFO mVideoInfo;

ZeroMemory(&mVideoInfo, sizeof(mVideoInfo));

mVideoInfo.AvgTimePerFrame = 333667;

mVideoInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);

mVideoInfo.bmiHeader.biWidth = 352;

mVideoInfo.bmiHeader.biHeight = 240;

mVideoInfo.bmiHeader.biBitCount = 16;

mVideoInfo.bmiHeader.biPlanes = 1;

mVideoInfo.bmiHeader.biCompression = BI_BITFIELDS;

mVideoInfo.bmiHeader.biSizeImage = mVideoInfo.bmiHeader.biWidth *

mVideoInfo.bmiHeader.biHeight * mVideoInfo.bmiHeader.biBitCount / 8;

for (int i = 0; i < 3; i++) // Important for 16 bit RGB!

{

mVideoInfo.dwBitMasks[i] = bits565[i];

}

1. 使用Filter Graph Manager默认的参考时钟

注:如果Filter Graph中没有一个Filter实现IReferenceClock接口,则该Filter Graph默认使用系统时钟作为参考时钟。

1.1 Video Sample不打时间戳、连续送出

现象:视频以最快的速度播放。Video Renderer不发送Quality Control消息。流时间线性增加。

Msiavsrc.ax(tid 920) 2307 : stream time: 120000

Msiavsrc.ax(tid 920) 2309 : stream time: 140000

Msiavsrc.ax(tid 920) 2311 : stream time: 160000

Msiavsrc.ax(tid 920) 2314 : stream time: 190000

Msiavsrc.ax(tid 920) 2316 : stream time: 210000

Msiavsrc.ax(tid 920) 2318 : stream time: 230000

Msiavsrc.ax(tid 920) 2320 : stream time: 250000

……

Msiavsrc.ax(tid 920) 3569 : stream time: 12740000(最后一个Sample)

1.2 Video Sample不打时间戳、间隙送出(模拟网络阻塞情况)

现象:视频播放一顿一顿。Video Renderer不发送Quality Control消息。视频数据流的阻塞不会影响流时间。流时间线性增加,间隙休眠的时间反映在前后两次获得的流时间上。

Msiavsrc.ax(tid 970) 2385 : stream time: 680000

Msiavsrc.ax(tid 970) 2389 : stream time: 720000

Msiavsrc.ax(tid 970) 4390 : Sleep(2000)...(出现视频播放的停顿)

Msiavsrc.ax(tid 970) 4391 : stream time: 20740000(流时间反映出Sleep的2s)

Msiavsrc.ax(tid 970) 4393 : stream time: 20760000

Msiavsrc.ax(tid 970) 4395 : stream time: 20780000

……

Msiavsrc.ax(tid 970) 39826 : stream time: 375090000(最后一个Sample)

1.3 Video Sample打(连续)时间戳、连续送出

现象:视频连续播放。Video Renderer发送Quality Control消息进行反馈控制。流时间线性增加,两次获取的流时间差大致是一帧的显示时间。

Msiavsrc.ax(tid 970) 4105 : stream time: 3600000

Msiavsrc.ax(tid 970) 4106 : Quality control (Famine) received.

Msiavsrc.ax(tid 970) 4139 : stream time: 3940000

Msiavsrc.ax(tid 970) 4140 : Quality control (Famine) received.

Msiavsrc.ax(tid 970) 4171 : stream time: 4260000

Msiavsrc.ax(tid 970) 4172 : Quality control (Famine) received.

Msiavsrc.ax(tid 970) 4205 : stream time: 4600000

Msiavsrc.ax(tid 970) 4206 : Quality control (Famine) received.

Msiavsrc.ax(tid 970) 4238 : stream time: 4930000

Msiavsrc.ax(tid 970) 4239 : Quality control (Famine) received.

……

Msiavsrc.ax(tid 970) 21922 : stream time: 181770000(最后一个Sample)

1.4 Video Sample打时间戳(中途复位一次,时间戳从0重打)、连续送出

现象:播放较连续。Video Renderer发送Quality Control消息进行反馈控制。时间戳复位后有一个“快镜头”,相邻两次Sample发送的时间差较小(正常时应该是一帧图像的显示时间),说明Video Renderer收到Sample后马上返回,以最快速度处理Sample,使Sample时间戳能够再次赶上流时间。

Msiavsrc.ax(tid 964) 2133 : stream time: 12280000

Msiavsrc.ax(tid 964) 2165 : stream time: 12600000

Msiavsrc.ax(tid 964) 2166 : Reset time stamp...

Msiavsrc.ax(tid 964) 2199 : stream time: 12940000(流时间递增缓慢)

Msiavsrc.ax(tid 964) 2201 : stream time: 12960000

Msiavsrc.ax(tid 964) 2203 : stream time: 12980000

Msiavsrc.ax(tid 964) 2205 : stream time: 13000000

Msiavsrc.ax(tid 964) 2208 : stream time: 13030000

Msiavsrc.ax(tid 964) 2210 : stream time: 13050000

Msiavsrc.ax(tid 964) 2212 : stream time: 13070000

Msiavsrc.ax(tid 964) 2214 : stream time: 13090000

……

Msiavsrc.ax(tid 964) 17748 : stream time: 168430000(最后一个Sample)

1.5 Video Sample打时间戳(时间戳超前流时间一个delta)、连续送出

现象:等待delta后播放连续。Video Renderer发送Quality Control消息进行反馈控制。

Msiavsrc.ax(tid 848) 821 : stream time: 4167195720000(随机值,此Sample送出后被Video Renderer阻塞)

Msiavsrc.ax(tid 848) 5828 : stream time: 49940000(delta在此反映出来)

Msiavsrc.ax(tid 848) 5860 : stream time: 50250000

Msiavsrc.ax(tid 848) 5892 : stream time: 50580000

Msiavsrc.ax(tid 848) 5927 : stream time: 50930000


……

Msiavsrc.ax(tid 848) 22677 : stream time: 218430000(最后一个Sample)

1.6 Video Sample打时间戳(时间戳随机乱序)、连续送出

现象:播放有断续、有快镜头。Video Renderer发送Quality Control消息进行反馈控制。整个播放过程中,如果新Sample的时间戳比流时间超前,则Sample会被Video Renderer阻塞住,直到流时间到达Sample时间后才开始播放;如果新Sample的时间戳比流时间滞后,Sample到达Video Renderer后会被立即播放,因此出现快镜头,直到Sample的时间戳赶上流时间后视频才恢复正常速度。总之,视频流不会影响参考时钟的正常运作。

Msiavsrc.ax(tid 610) 1774 : stream time: 5590000

Msiavsrc.ax(tid 610) 1807 : stream time: 5930000

Msiavsrc.ax(tid 610) 1808 : Add 5 second delta...

Msiavsrc.ax(tid 610) 1841 : stream time: 6270000(此Sample送出后阻塞)

Msiavsrc.ax(tid 610) 6873 : stream time: 56590000(流时间到达Sample上的时间戳后再继续播放)

Msiavsrc.ax(tid 610) 6906 : stream time: 56920000

Msiavsrc.ax(tid 610) 6940 : stream time: 57260000

……

Msiavsrc.ax(tid 610) 7440 : stream time: 62260000

Msiavsrc.ax(tid 610) 7473 : stream time: 62590000

Msiavsrc.ax(tid 610) 7474 : Add -3 second delta...

Msiavsrc.ax(tid 610) 7508 : stream time: 62940000(出现快镜头,Sample以很快的速度发送给Video Renderer)

Msiavsrc.ax(tid 610) 7509 : stream time: 62950000

Msiavsrc.ax(tid 610) 7511 : stream time: 62970000

Msiavsrc.ax(tid 610) 7512 : stream time: 62980000

Msiavsrc.ax(tid 610) 7513 : stream time: 62990000

……

Msiavsrc.ax(tid 610) 7563 : stream time: 63490000

Msiavsrc.ax(tid 610) 7564 : stream time: 63500000

Msiavsrc.ax(tid 610) 7566 : Do not add delta...

Msiavsrc.ax(tid 610) 7566 : stream time: 63520000

Msiavsrc.ax(tid 610) 7567 : stream time: 63530000

Msiavsrc.ax(tid 610) 7568 : stream time: 63540000

Msiavsrc.ax(tid 610) 7570 : stream time: 63560000

……

Msiavsrc.ax(tid 610) 7719 : stream time: 65050000

Msiavsrc.ax(tid 610) 7721 : stream time: 65070000

Msiavsrc.ax(tid 610) 7722 : stream time: 65080000

Msiavsrc.ax(tid 610) 7746 : stream time: 65320000(Sample时间戳终于赶上了流时间)

Msiavsrc.ax(tid 610) 7779 : stream time: 65650000

……

Msiavsrc.ax(tid 610) 19390 : stream time: 181760000(最后一个Sample)

1.7 Video Sample打(连续)时间戳、间隙送出(模拟网络阻塞情况)

现象:视频播放一顿一顿。Video Renderer发送Quality Control消息进行反馈控制。无数据时,流时间仍然在走;于是紧接着下一个Sample到达Video Renderer时已经“迟到”,所以会出现快镜头。

Msiavsrc.ax(tid 678) 1667 : stream time: 8940000

Msiavsrc.ax(tid 678) 1700 : stream time: 9270000

Msiavsrc.ax(tid 678) 3701 : Sleep(2000)...(此时阻塞显示上一个Sample的图像)

Msiavsrc.ax(tid 678) 3702 : stream time: 29290000(出现快镜头)

Msiavsrc.ax(tid 678) 3704 : stream time: 29310000

Msiavsrc.ax(tid 678) 3706 : stream time: 29330000

……

Msiavsrc.ax(tid 678) 3762 : stream time: 29890000

Msiavsrc.ax(tid 678) 3766 : stream time: 29930000

Msiavsrc.ax(tid 678) 5767 : Sleep(2000)... (此时阻塞显示上一个Sample的图像)

Msiavsrc.ax(tid 678) 5768 : stream time: 49950000(出现快镜头)

Msiavsrc.ax(tid 678) 5770 : stream time: 49970000

Msiavsrc.ax(tid 678) 5772 : stream time: 49990000

……

Msiavsrc.ax(tid 678) 38788 : stream time: 380150000(最后一个Sample)

2. Filter Graph不使用参考时钟

现象:不管Video Sample打不打时间戳,也不管时间戳打得是否正确,视频都是以最快的速度播放。并且Video Renderer不发送Quality Control消息。如果Video Sample送出过程中有间隙性停顿,视频也会出现间隙性的停顿。

3. Filter Graph中残留(处于未连接状态)一个Audio Renderer

注:默认情况下,Audio Renderer会被选中为Filter Graph的参考时钟。

Filter Graph如图3:

图3 残留一个Audio Renderer的单一视频流Filter Graph

测试结果均与以系统时钟作为Filter Graph的参考时钟的情况类似。

小结:

v 在任何时候,Video Sample上的时间戳都不会影响Filter Graph的流时间。

v 如果Video Sample上没有时间戳,则Video Renderer以最快速度处理Sample数据;如果有时间戳,则根据时间戳以及当前的流时间来安排Sample内容(视频图像)的显示。若Sample上的时间戳超前流时间,Video Renderer将该Sample阻塞,直到流时间到达Sample时间戳后再开始播放;若Sample上的时间戳滞后于流时间,Video Renderer将Sample内容立即显示后返回,以最快速度处理Sample,以使Sample时间戳尽快追赶流时间。

v 视频流播放过程中有一个Quality Control机制;Quality Control消息发送者是Video Renderer,反馈给数据发送线程,以加快或减慢数据发送速度,试图提高服务质量。

v

如果您能从上述数据中得到更多重要的结论,请告诉我luqiming@263.net。

热心网友 时间:2022-05-04 15:16

此版本中的 DirectShow 也进行了大幅度修改。DirectX 8.0 中添加的部分新特性包括:
新的过滤图形特性Windows Media™ 格式支持视频编辑支持新的 DVD 支持新的 MPEG-2 传输和程序流支持对广播驱动程序体系结构的支持DirectX 媒体对象过滤图形管理器支持一些新的特性,包括动态图形生成和实时来源合成。使用动态图形生成,您现在可以在图形运行过程中对过滤图形进行修改。而以前,要添加或删除过滤器,应用程序必须停止该图形,因而打断数据流。DirectShow 现在还支持实时来源合成——例如,可以将实时音频流与实时视频流合成。
两个新的过滤器使 DirectShow 应用程序可以读取或写入 Microsoft Windows Media 格式的文件。ASF Reader 过滤器用于读取和分析 Windows Media 格式的文件;ASF File Writer 过滤器用于写入 Windows Media 格式的文件,并能够执行必要的复合和压缩操作。DirectShow 和 Windows Media SDK 现在提供了完整的解决方案,用于编写应用程序来创建和播放 Windows Media 格式流。
新的 DirectShow 编辑服务 (DES) API 支持视频编辑。DES 建立在核心的 DirectShow 体系结构之上,提供了一组专门为操作视频编辑工程而设计的接口。DirectShow 的框架更适合于创建视频编辑应用程序,作为应用程序开发人员,您将从中获益匪浅。DES 取代了剪切表,同时剪切表将不再受到支持。
两个新的接口 IDVDControl2 和 IDVDInfo2 极大地扩展了 DVD 导航器的功能。DVD 导航器现在实现了完整的 DVD Annex-J 命令集,既可以播放卡拉 OK,也可以播放影碟。新的 MSWebDVD ActiveX&reg; 控件使这项功能可在基于脚本的应用程序中使用。
新的过滤器 MPEG-2 Demultiplexer 提供了在推模式下(从实时来源接收数据)对 MPEG-2 传输流和程序流的支持。该过滤器与过滤图形中的新实时来源合成支持配合,可以提供优异的 MPEG-2 增强支持。
Microsoft 广播驱动程序体系结构 (BDA) 是新一代数/模电视调制设备的规范。在 DirectX 8.0 中,DirectShow 通过一组新的内核模式设备过滤器和“BDA 调制模型”来支持 BDA 兼容设备。“BDA 调制模型”是一组对象的集合,提供了对各种类型的数字和模拟网络进行调制的方法。
DirectX 媒体对象 (DMO) 提供了编写数据流组件的新方法。与 DirectShow 过滤器相似,DMO 接受输入数据,并将其用于生成输出数据。但是,DMO API 比相应的 DirectShow API 简单得多。因此,DMO 比 DirectShow 过滤器更容易创建、测试和使用。DMO 与 DirectShow 完全兼容。只要您需要使用 DirectShow 提供的服务,例如图形同步、智能连接、数据流的自动处理和线程管理,您都可以使用 DMO。但是,DMO 不需要使用过滤图形,因此应用程序无需 DirectShow 就可以使用 DMO。
DirectX 8.0 版本的 DirectShow 包含更多的功能,但限于篇幅,这里就不再多说。请记着试用新增和改进的 DirectShow。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
Hive笔记 Hive-元数据 英语low是什么意思 Low low 的是什么意思? 如何打开电脑设置的打印机电脑打印设置在哪里打开 使用电脑打印机怎么设置打印机和电脑怎样连接该如何设置 win10打印机设置在哪里 win10打印机设置方法介绍 怎么在电脑上设置打印机在电脑上怎么找打印机设置 怎样为电脑设置打印机电脑里打印机设置在哪 电脑打印机在哪里设置电脑上的打印机在哪里 发下来的教师资格证有显示学历吗? 小米11手机到手了,有老铁推荐一款耐用点的膜吗? 小米10的原装膜在哪可以买到 除了官网哪里有小米原装贴膜买? 小米11的抗菌膜有卖的吗 华为手机设置指纹开锁但是任何人的指纹都可以开是怎么回事? _百度问一问 为什么我舍置指纹解锁别人能打开我的手机屏幕锁? 手机带指纹别人能打开吗? 农业银行定期存款可以网上查询余额吗? 我的iqoo1代指纹解锁为什么别人能打开? 还有哪些类似寒武再临,2013这样的末日剧情长篇耽美小说? 有什么好看的末世小说,耽美言情都行,类似重生末世之门,末日乐园这种类型的小说,不要小白文,有剧情, 南通属于哪个省份呢? 最近突然迷上了剧情比较猎奇的耽美文,哪位亲给我推荐几本啊~ 要求:一、必须是耽美 求赏赐耽美末世文!!!要完结的!!! 求推荐好看的末世丧尸耽美异能的小说,谢谢。 怎么用WPS计算圆面积,怎么输入圆周率的符号结果显示就为#NAME? 海怪联盟的小说简介 - 信息提示 教师资格证认定是上传原始学历还是自考学历 教师资格证报考需要填写毕业证信息么 那个校园产品营销策划方案有哪些? 请问这个文件图标表示什么文件? windows安全 输入网络密码 windows 输入网络密码连接到 ‘输入网络密码’是怎么回事? 共享输入网络密码 输入网络密码是什么意思 win7网络邻居的访问,输入网络密码怎么解决,怎么利用 电脑老是出现要求输入网络密码 添加网络打印机为什么要输入网络密码 jpg格式的图片如何导入sketchup制作组件 su 如何导入图片 会声会影9.提示使用directshow 视频引擎失败。无法播放视频流。没有音频硬件,或硬件不响应。 冰箱不通电有哪些原因 冰箱一会有电一会没电是怎么回事 陌生人怎么通过我的添加我为好友的? 别人添加我的怎么添加不了在线解决 怎么样才能让别人加我?