对于使用directshow其实,没有什么高深的认识,只是用其他架构,搭建一个编解码系统,在使用过程有了些体会;
1.directshow中的push/pull模式:如果有人喜欢一上来就谈“拉或推”模式,基本上可以判断此人看的比动手少。其实在directshow的使用中,你只要用数据流的方式去看待整个架构就可以了,不用关心是拉的,还是推的;具体可以去看其源码。
2.基于ds的解码端,用拉比较好,这只是对于整个数据流使用一个表述,因为解码出数据,下游需要使用,越快越好,拉就更形象了。其实在整个链路中,只需要做一个模仿render的功能filter就ok了,把数据dump给下流数据处理模块。一切就ok了。至于某些文件解析filter,不支持拉也没关系,只要在它下游链路上做一个filter,不停要数据,就ok了。
3.基于ds编码端用推比较好。这些只是设计概念上问题。在源端,只要做一个模仿soucefilter功能的模块,就可以把数据向下推了,然后,在做一个模仿render的模块,对接受的编码数据,可以进行进一步的处理,例如给其他模块,如librstp模块打包,发送等等,就随你便了。
4.在使用ds的过程中,需要注意几点,就是各个filter间的类型与时间系统,还有送数据对齐等问题。在一个项目中由于要送数据给下面的编码器,结果由于音视频数据交织问题,以及送的音频数据的对齐问题,查了很长时间。
今天就写到这里,以后遇到什么问题,在这里添加。