我有一个申请。我将遇到一种情况,我会收到一大堆编码字节。我必须解码它们并渲染它。对于解码,我使用自定义解码器类。解码后,如何构建一个DirectShow图,它将从解码器接收输入数据?请给出一些指示/样品。
答案 0 :(得分:2)
查看DirectShow SDK中的PushSource示例。此示例显示如何创建可以呈现的源过滤器。完全是关于正确设置过滤器的输出介质类型,以便可以呈现图形的其余部分。该示例还向您展示了如何将媒体样本提供给媒体管道的其余部分。在你的情况下你解码到什么? PushSource样本输出RGB24 IIRC。
另外,听起来你在与接收字节相同的过滤器中进行解码?通常在DirectShow中,您将编写一个源过滤器,该过滤器能够从网络接收字节并以编码格式输出样本。然后,您可以将此过滤器连接到自定义解码器过滤器,然后输出RGB24或DirectShow可以理解的某些原始媒体格式。同样对于音频,你可以输出说,PCM。
编辑: 我使用了相同的方法(CSource,CSourceStream)。这是正确的,DoBufferProcessingLoop调用FillBuffer。我的一般方法是使用生产者 - 消费者模式。网络读取线程使用样本填充队列,在我重写的DoBufferProcessingLoop中,我检查队列是否有任何数据,如果有数据则调用FillBuffer。您当然可以尝试其他方法,例如等待事件(框架可用性)。要查看我使用的方法,您可以在http://sourceforge.net/projects/videoprocessing/下载示例RTSP源过滤器的源代码,看看是否适合您。我要说的最好的事情就是尝试一些东西并随着学习而学习。