メディア財団の私の研究では、私は2つの非常に評判の良い情報源から一見矛盾したアドバイスを受けました。 メディア財団とCOM:MSDNからMedia FoundationでCOINIT_APARTMENTTHREADEDまたはCOINIT_MULTITHREADEDを使用しますか?
メディア財団で https://msdn.microsoft.com/en-us/library/windows/desktop/ee892371(v=vs.85).aspx
、非同期処理とコールバックは、作業キューによって処理されます。作業キューには常にマルチスレッドアパートメント(MTA)スレッドがあるため、アプリケーションはMTAスレッドでも実行されると、より簡単な実装になります。そのため、COINIT_MULTITHREADEDフラグを指定してCoInitializeExを呼び出すことをお勧めします。
その後ブックの「Microsoftメディアファンデーションアプリケーション開発 - アントンPolingerでは」から24ページ:
注MFは、COMインターフェイスメソッドから 呼び出すことができることを意味し、フリースレッドシステムであり、任意のスレッド。したがって、CoInitializeEx()を呼び出すときは、COINIT_ APARTMENTTHREADEDパラメータを渡して、アパートメントスレッドのオブジェクトの同時実行性を持つ COMを初期化する必要があります。また、オブジェクトは、 スレッドを同時に実行して内部変数へのアクセスを制御するために、ロックなどのプリミティブ プリミティブを使用する必要があります。
さらに、GitHubにはCOINIT_APARTMENTTHREADEDを使用するMedia Foundationサンプルコードがたくさんあります。
私は、Media Foundationを使用して複数のIPカメラビデオフィードをWindowsにストリーム配信するRTSPクライアントを開発しています。私は私のアプリで複数のスレッドを使用しているので、私は非常にこの問題についての決定的な答えを得ることが重要と考えている。誰かが矛盾を説明し、進める正しい方法を助言してくれますか?
MSDNは、別段の証明がない限り、真実を提供します。それは公式の文書です。 「フリースレッドシステム」は、すべてのスレッド(MSDNと一貫性があります)で使用できるため、「STAを初期化する」必要があるとは言いません。 –