2011-01-16 4 views
2

ASF WriterにCBRプロファイルを適用して、ビデオ/オーディオストリーミングのレイテンシを減らそうとしています。CBRフィルタをASFライタに適用するこのコードは機能しません。なぜですか?

これは私が今までやったです:このコードを使用したメディアエンコーダを使用して

  1. 、私は デフォルトCBRプロファイルを生成
  2. プロファイルを保存したPRXファイルには

ASFにプロファイルを適用するにはWriter:

// Initialize a new Profile Manager 
IWMProfileManager* pIPM = 0; 
WMCreateProfileManager(&pIPM); 

FILE * file = fopen("lowprofile.prx", "rb"); 

fseek(file, 0, SEEK_END); 
long length = ftell(file); 
fseek(file, 0, SEEK_SET); 

wchar_t * buffer = new wchar_t[length]; 
size_t numRead = fread(buffer, sizeof(wchar_t), length, file); 
buffer[numRead] = NULL; 
fclose(file); 

IWMProfile* pProxProfile = 0; 
hr = pIPM->LoadProfileByData(buffer, &pProxProfile); 

// Set the profile for the writer 
CComQIPtr<IConfigAsfWriter2> pConfigWriter; 
pConfigWriter = m_pWMASFWritter; 

hr = pConfigWriter->SetParam(AM_CONFIGASFWRITER_PARAM_DONTCOMPRESS, TRUE, 0); 

hr = pConfigWriter->ConfigureFilterUsingProfile(pProxProfile); // THIS LINE FAILS, hr = E_FAIL 

hr=m_pGraph->AddFilter(m_pWMASFWritter,L"ASF Writter"); 
if(FAILED(hr)) 
    return FALSE; 

//etc.. 

何が問題なの?このコードは?私は何かを誤解しましたか?

私のために申し訳ありませんが、私はこのようなフィルタを適用するのに役立つメディアフォーマットsdkやインターネット上のコードはありません。私はmsdnで利用可能なドキュメントを注意深く読み込もうとしていますが、確かに良いコードサンプルほど明確ではありません。

誰かが私にヒントをくれますか?

答えて

0

これはうまくいきました。標準のオーディオ/ビデオコーデックを使用するようにプロファイルファイルを設定して、問題が特定されているかどうかを確認してください。SetParamコール。

また、グラフにAsfFileWriterを追加してから、グラフを構成してからグラフを接続してください。あなたは現在、それを設定した後にのみ追加します - それはうまくいくかもしれません。私が実行している命令ではなく、間違いなく動作します。

fseek(file, 0, SEEK_END); 
long length = ftell(file); 
fseek(file, 0, SEEK_SET); 

をしかし、その後、あなたはchacactersでのサイズとして扱い::ここで

+0

Brokenglassありがとうございました。最初のASF Writerをグラフに追加した後、適切なプロファイルで構成していました。今はうまくいく。 –

0

あなたはバイト単位でファイルサイズを計算している

long length = ftell(file)/sizeof(wchar_t); 

wchar_t * buffer = new wchar_t[length]; 
size_t numRead = fread(buffer, sizeof(wchar_t), length, file); 
buffer[numRead] = NULL; 

あなたは、次の修正プログラムを使用することができます

+1

ありがとうございました。 –

関連する問題