视频直播 接收端Source filter的基本思路

来源:互联网 发布:动图软件 编辑:程序博客网 时间:2024/05/21 13:57
写接收端的soucefilter相对来说比较简单,最重要的函数都在它的输出pin(基类为CSourceStream)上,这些函数包括
1)GetMediaType():
    过程中最先调用的函数,如果此时你的输出pin的媒体类型信息还没有初始化,你还需要写一个诸如SetupMediaType这样的函数来初始化媒体信息(媒体信息可能还要从网络的发送端获得),然后在GetMediaType函数中调用这个初始化媒体信息的函数,这样才能返回正确的媒体信息,为下面的连接过程作准备。
2)CheckMediaType():
    就是检查哪些媒体类型是可以被接收的,这个函数比较简单,一般都设置为S_OK。
3)DecideBufferSize():
    过程中最后一个重要函数,要根据实际情况,获得要发送的所有的sample的datalength的最大值,然后把buffersize设为这个最大值。对于视频,如果视频源是RGB24的话,我是设置为width * height * 3,如果视频源是YUY2,则width * height * 2.
4)FillBuffer():
    接完成后,在FilterGraph运行时要涉及到的最重要的函数,写Source Filter的主要工作也是在这里,通过这个函数不断的获得数据并把数据推给下一个Filter。有时候在graphedit中调试时,自己编写的filter运行不正确时原因有可能是graph没有构建完整,比如Source Filter如果只和一个Xvid Decoder连接上,但是Xvid Decoder不VMR Video Renderer连接,则整个图就跑不起来,此时FillBuffer总是被调用一次就停止了。所以,写程序有时也靠点运气,卡壳的时候撞得好就好,不好得话卡你十天半月的,郁闷死,所以测试的时候一定要把整个链路跑通。
在DX的架构中,source filter是视频直播 、点播 的基础,如果掌握了这个,你就掌握了一半。
我在www.go-softs.com中提供一些视频直播 、点播的程序,并提供了客户端 的开发接口,各位有需要的话了可以过去看看。
0 0
原创粉丝点击