2013-09-16 4 views
2

Я боюсь смешивать два аудиопотока в один выходной поток. MFNode предлагает следующее: AudioMixerMFT но TopoEdit аварии, когда я пытаюсь построить топологию как этот & выполнить его:Несколько входных MFT в Microsoft Media Foundation

enter image description here

Примечание: Я попытался TopoEdit, который поставляется с Windows SDK 7.1 & также один с несколькими исправлениями со стороны автор «Разработка приложений Microsoft® Media Foundation»

Я думал, что это может быть проблема с TopoEdit, поэтому я построил топологию в коде (путем изменения кода из Ch # 9 «Разработка приложений Microsoft® Media Foundation») но он все еще не прошел с помощью «E_UN ОЖИДАЕМЫЙ катастрофический сбой "на mediaEvent->GetStatus(&hrStatus) внутри HRESULT CPlayer::ProcessEvent(CComPtr<IMFMediaEvent>& mediaEvent) в событии начала сеанса.

Теперь я подумал, что это может быть проблема с AudioMixerMFT, поэтому я написал пользовательский MFT с 2 входами, которые действуют как простой проход (только отправляет 1-й вход & игнорирует второй). И я построил топологию в TopoEdit, как и она работала:

enter image description here

Но когда я подключен «Audio 2.wav» в MFT, он разбился. Теперь я попытался использовать этот пользовательский MFT в своем собственном коде &, он снова работал с одним входом, но не с «E_UNEXPECTED« Катастрофический сбой »при применении двух входов.

Не уверен, в чем проблема, я начал сомневаться в поддержке нескольких входных MFT, я столкнулся с сообщением http://social.msdn.microsoft.com/Forums/windowsdesktop/en-US/21596e11-c4e2-480a-b28f-9e2f5fa8820d/mutlinput-and-multioutput (да, это довольно старый), в котором говорится, что он не поддерживается.

Есть ли кто-нибудь, кто смог успешно запустить AudioMixerMFT из MFNode? Любые альтернативы Microsoft Media Foundation? или Любой намек был бы оценен. Спасибо

+0

Двойные входные MFT и DMO могут работать. DirectShow - альтернативный вариант для MF. Двойной ввод DMO не будет работать в DirectShow из коробки, но настраиваемый фильтр DirectShow способен выполнять работу. –

+0

Спасибо @RomanR. Не могли бы вы указать мне несколько образцов MFT с двумя входами, если вы знаете о них. И btw любая догадка о том, что может быть неправильным, проблема с TopoEdit или MFT? –

+0

Нет образца кода, извините. Вы должны уметь видеть проблемы подключения на отладчике (ваш MFT возвращает коды ошибок в 'SetOutputType' или othrewise до возникновения ошибки). Скорее всего, проблема связана с вашим MFT, но вопрос не содержит деталей, чтобы догадаться об этом. Как правило, двойные компоненты ввода сложны для реализации, потому что им приходится синхронизировать потоки, но вы еще не достигли этой точки. –

ответ

1

MFNode - мой проект с открытым исходным кодом.

Если вы прочитали документацию MFNode, вы увидите, что TopoEdit не обрабатывает более одного входного потока в MFT. И да TopoEdit падает. Вы можете исправить ошибку в исходном коде TopoEdit. Это всего лишь нулевой указатель, который не проверяет TopoEdit. Но, к сожалению, это не решает проблему. TopoEdit не может дважды вызвать ProcessInput для двух входных потоков, прежде чем вызывать ProcessOutput.

Вы должны предоставить пользовательский сеанс мультимедиа, чтобы заставить его работать (реализовать IMFMediaSession).

В следующем обновлении проекта MFNode я предоставил плеер для использования всех MFNode, и особенно MFNode Audio Mixer.

EDIT: в tededit.cpp, TopoEdit врезается в CTedEditorVisualObjectEventHandler :: NotifyObjectDeleted:

... CTedTopologyNode * pNode = m_pEditor-> FindNode (pConn-> GetOutputNodeID()); ...

pNode может быть пустым указателем, а TopoEdit не проверяет.

EDIT

Я обновил свой проект. Проверьте MFNodePlayer.Я использую пользовательскую MediaSession для обработки топологии волнового миксера.

Это хорошо работает, но это не идеально по двум причинам. Если вы остановите топо, а затем переиграете, он терпит неудачу (потому что я должен остановить весь источник и, возможно, сбросить часы времени и поточный поток). Во-вторых, существует функция, которая обрабатывает IMFT-преобразование рекурсивным способом. Сложно отлаживать.

Я исправлю позже.

PS: Особая благодарность книге «Разработка приложений Microsoft Media Foundation». Это очень помогает мне создать пользовательский MediaSession.

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

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