2

我正在尝试将 CBR 配置文件应用于 ASF Writer 以减少视频/音频流的延迟。

这是我到目前为止所做的:

  1. 使用 Media Encoder,我生成了一个默认的 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 上提供的文档,但它肯定不如一个好的代码示例那么清晰。

有人可以给我一个提示吗?

4

2 回答 2

0

看起来不错,我的代码接近正常工作 - 尝试将配置文件设置为使用标准音频/视频编解码器以查看代码是否工作,然后只是查明问题和/或注释掉SetParam呼叫。

还要确保首先将 AsfFileWriter 添加到图形中,然后对其进行配置,最后连接图形。您目前仅在配置后添加它 - 再次,这可能有效,这不是我运行的顺序并且绝对有效。

于 2011-01-17T17:35:13.817 回答
0

在这里,您以字节为单位计算文件大小:

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;

您可以使用以下修复:

long length = ftell(file) / sizeof(wchar_t);
于 2011-01-17T22:54:00.200 回答