Windows 在媒体基金会中使用CONITITA Apple TimeStudio或CONITITY多线程? 在我对媒体基金会的研究中,我遇到了一些看似矛盾的建议,来自两个非常有名的消息来源。p>

Windows 在媒体基金会中使用CONITITA Apple TimeStudio或CONITITY多线程? 在我对媒体基金会的研究中,我遇到了一些看似矛盾的建议,来自两个非常有名的消息来源。p>,windows,multithreading,com,video-streaming,ms-media-foundation,Windows,Multithreading,Com,Video Streaming,Ms Media Foundation,从MSDN: 媒体基础和COM: 在媒体基础上,异步处理和回调由工作队列处理。工作队列始终具有多线程单元(MTA)线程,因此,如果应用程序也在MTA线程上运行,则其实现将更简单。因此,建议使用Conit\u多线程标志调用CoInitializeX 从《微软媒体基金会的发展——Anton Polinger》第24页: 注意MF是一个自由线程系统,这意味着COM接口方法可以 从任意线程调用。因此,调用CoInitializeEx()时,必须初始化 通过传入COINIT,COM与单元线程对象并发_

从MSDN: <强>媒体基础和COM:<强>

在媒体基础上,异步处理和回调由工作队列处理。工作队列始终具有多线程单元(MTA)线程,因此,如果应用程序也在MTA线程上运行,则其实现将更简单。因此,建议使用Conit\u多线程标志调用CoInitializeX

从《微软媒体基金会的发展——Anton Polinger》第24页:

注意MF是一个自由线程系统,这意味着COM接口方法可以 从任意线程调用。因此,调用CoInitializeEx()时,必须初始化 通过传入COINIT,COM与单元线程对象并发_ APARTMENTTHREADED参数。您的对象可能还需要使用同步 原语,如锁,通过并发运行来控制对内部变量的访问 线程

<> P>另外,我在Github中看到了很多使用CONITITA AppTrimthToMultudio.MediaFoundation示例代码。p>
我正在开发一个RTSP客户端,它使用MediaFoundation将多个IP摄像机视频馈送流到Windows显示。我将在我的应用程序中使用多个线程,因此我相信在这个问题上获得明确的答案是非常重要的。有人能解释一下矛盾,并提出正确的处理方法吗?

< P>媒体基础不使用封送处理(也就是说,他们使用直接通信),它的对象是使用“两个”的公寓模型,在运行时有免费的线程封送。 你可以自由选择公寓模式,MTA和STA都会成功。然而,Media Foundation启动的工作者线程总是被初始化为MTA(具体地,因为MF的设计不建议线程对齐,例如在工作队列上,并且在STAS中没有任何意义;由应用程序初始化的控制线程可以是STA)。
也就是说,将控制线程初始化为STA没有错。它对媒体基础API调用没有影响。文档建议MTA初始化的唯一原因是,将所有线程初始化为MTA不会错误地混淆单元,这将特别容易,因为API正在忽略标准COM单元规则的线程之间主动传递COM指针。如果您了解不会受到此行为的影响,STA初始化将非常适合您。由于您已经发现了许多媒体基础示例,并且应用程序正在进行STA初始化。这是官方文件。“自由线程系统”可以被任何线程使用(与MSDN一致),所以我不明白为什么书上说你“必须”初始化STA。