2011-01-16 6 views
2

Я пытаюсь применить профиль CBR к ASF Writer для уменьшения латентности для потоковой передачи видео/аудио.Этот код для применения фильтра 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.. 

Что не так с остроумием h этот код? Я что-то неправильно понял?

К сожалению для меня нет кода в медиа-формате sdk или не доступен в Интернете, чтобы помочь мне применить такой фильтр. Я стараюсь внимательно прочитать документацию, доступную в msdn, но это, безусловно, не так ясно, как хороший пример кода.

Может ли кто-нибудь дать мне подсказку, пожалуйста?

ответ

0

Это выглядит нормально, у меня есть код, близкий к тому, что работает просто отлично - попробуйте установить файл профиля, чтобы использовать стандартные аудио/видео кодеки, чтобы увидеть, работает ли код, чтобы точно определить проблему и/или закомментировать SetParam вызов.

Также убедитесь, что вы сначала добавили AsfFileWriter к графику, затем настройте его и, наконец, подключите график. Вы добавляете его только после его настройки - опять же, это может сработать, это просто не тот порядок, который у меня работает, и определенно работает.

+0

Благодарим вас за брокеров, это было невероятно добавление первого ASF Writer к графику и THEN настройка с правильным профилем , Теперь работает отлично. –

0

Здесь вы расчета размера файла в байтах:

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

Но относиться к нему, как размер в chacacters:

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); 
+1

Спасибо, ты был прав в конце концов! –

 Смежные вопросы

  • Нет связанных вопросов^_^