2016-05-11 1 views
4

Я скомпилировал и зарегистрировал DLL, которая включена в образцы DirectShow (Microsoft SDK \ Windows \ v7.1 \ Samples \ multimedia \ directshow \ filters \ async) Я модифицировал его для дешифрования буфера по мере его получения (потому что полученный мной файл зашифрован. Я могу запустить пример в GraphStudioNext, но всякий раз, когда я пытаюсь построить граф на C# с DirectShowLib, он продолжает давать мне ошибки.DirectShow выдает ошибку в моем исходном фильтре (UNSUPPORTED_STREAM), который я использую для дешифрования потока буфера

IBaseFilter xAsync = CreateFilter("C553F2C0-1529-11D0-B4D1-00805F6CBBEA"); 
hr = graphBuilder.AddFilter(xAsync, "xAsync"); 

hr = this.graphBuilder.RenderFile(filename, null); 

она возвращает -2147220891 (VFW_E_UNSUPPORTED_STREAM) (не удается воспроизвести файл:. формат не поддерживается)? есть ли способ обойти это

EDIT: Эта проблема не возникает, если я удалю свой код дешифрования.

+1

Возможно вы используете 32-битный граф студии и 64-битный C# приложение. Или наоборот. – Soonts

+1

Для C#, если вы настроили конфигурацию «Любой процессор», битность зависит от «Предпочитайте 32 бит» в настройках проекта. – Soonts

+0

@Soonts - Спасибо за ответ, два prepossess - graphstudionext.exe * 32 и PlayWnd.vshost.exe * 32 в моем диспетчере задач, поэтому я считаю, что они уже 32-битные :( –

ответ

1

Обнаружили проблему. Мне пришлось строить график с нуля и не отвечать на RenderFile. Мне пришлось вручную подключить считыватель Custom File Source. Причина, по которой он возвращает -2147220891 (VFW_E_UNSUPPORTED_STREAM), заключается в том, что я зашифровал весь файл, включенный в информацию заголовка, на которую система полагается, чтобы определить остальные фильтры для подключения.

Мой график закончил с FileSourceCustom -> GDCL демультиплексор -> FFDShowDecoder -> VMR9

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