4

Media Foundation を使用してエンコードしているデータを、WMV ファイルに書き込む代わりにネットワーク経由でストリーミングする簡単な方法はありますか?

4

1 に答える 1

3

最初に、ストリーミングする形式 (エンコードされている/含まれている) を知る必要があると思います。

私はh264を考えています。Windows 7 メディア ファンデーションでは、h264 ヘルパー関数を作成します。トポロジを作成する必要があります。ソースはファイルを読み取り、シンクはデコードおよびエンコードされた形式を h264 に変換します。必要なのはソースとシンクだけです。実際にはデコーダーとエンコーダーは必要ありません。トポロジ ビルダーは、その間に何を差し込む必要があるかを把握します。

CreateTranscodeTopology 関数がありますが、エンコードされたデータをファイルに書き込むため、役に立ちません。そのため、独自のトポロジを作成する必要があります。

書く必要があるのは、IMFByteStream を実装するクラスだけです。

シンクは、このバイト ストリームの実装を取得する必要があります。実装の「書き込み」関数は、データを送信するソケットに書き込みます。したがって、ソケットを IMFByteStream 実装またはコールバック関数のコンストラクターに渡すことができます。

SinkWriter は次のような特定のものを呼び出すため、IMFByteStream に実装する必要がある他の関数にいくつかの print ステートメントを配置することもお勧めします。GetCapabilities であるため、少なくとも戻る必要があります。

HRESULT STDMETHODCALLTYPE NetworkOutputStream::GetCapabilities(__RPC__out DWORD        *pdwCapabilities){HRESULT hr=S_OK; 
 printf("GetCapabilities\n");

*pdwCapabilities= (MFBYTESTREAM_IS_READABLE|MFBYTESTREAM_IS_WRITABLE|MFBYTESTREAM_IS_SEEKABLE);

return hr;
}

そうは言っても、クライアント(「HTML5ブラウザ」)にプレーヤーがある場合は、「MFCopy」の例を使用することをお勧めします。

トポロジーの作成は、主に再生などを目的としています。そのため、ムーブが再生される速度をデコードおよびエンコードします。ただし、必要なのはファイルをエンコードして、ワイヤで送信することだけです。MFCopy を見て、独自の IMFByteStream を実装してください。ローカル ファイル システムに書き込むシンクを作成する代わりに、IMFByteStream をシンクに渡します。

于 2012-08-20T19:08:22.670 に答える