Преобразования Media Foundation с двумя входными данными

Можно ли вставить пользовательский AsyncMFT, модифицированный для приема нескольких MFT в качестве входных данных (например, MFTa и MFTb, подключающихся к MFTc), в IMFMediaSession (объект mediasession создается с помощью MFCreateMediaSession)? Я видел ссылки в Интернете, в которых говорится, что требуется пользовательская медиасессия, но это кажется излишним.

Я дошел до того, что mftrace (включая отладку кода) просто сообщает о катастрофическом сбое при запуске MediaSession (сбой сразу после myMediaSession-> Start (NULL, & startPos)). Топология загружается нормально, и оба входных MFT работают нормально, если они не подключены к одному и тому же узлу.


person user7423607    schedule 26.10.2018    source источник
comment
На виндовс 7 нельзя. Я уже отвечал на этот вопрос в stackoverflow. Вам необходимо предоставить пользовательский медиа-сеанс   -  person mofo77    schedule 27.10.2018
comment
К вашему сведению, более ранний ответ mofo77: stackoverflow.com/a/20268687/868014   -  person Roman R.    schedule 27.10.2018
comment
@ mofo77 Можно ли это сделать в Windows 10 без пользовательского мультимедийного сеанса?   -  person user7423607    schedule 28.10.2018
comment
@Roman R.: Вы также имеете в виду MFNode? Насколько я могу судить, на самом деле это соединение source1->MFTa и source2->MFTa, затем MFTa->MFTb и, наконец, MFTb->Sink. Я спрашиваю, может ли IMFMediaSessoin (не настраиваемый) обрабатывать мультиплексированный MFT в топологии (например, MFTa->MFTc и MFTb->MFTc, затем MFTc->Sink), как указано Microsoft docs.microsoft.com/en-us/windows/desktop/medfound/about-mfts   -  person user7423607    schedule 28.10.2018
comment
Я предполагаю, что это возможно, но я сам не пробовал, и у меня нет примера, на который можно было бы сослаться.   -  person Roman R.    schedule 28.10.2018
comment
actually connecting source1->MFTa and source2->MFTa - НЕВОЗМОЖНО!!! MediaSession из MFCreateMediaSession поддерживает один - ТОЛЬКО ОДИН Источник. Я столкнулся с аналогичной проблемой, когда писал код для рендеринга видео из ДВУХ видеофайлов в один видеорендерер - ваш код ДОЛЖЕН объединить два источника ввода в ОДИН источник вывода с помощью MFCreateAggregateSource, а затем используйте только ОДИН агрегированный источник в MediaSession.   -  person Evgeny Pereguda    schedule 28.10.2018
comment
@EvgenyPereguda, вы пытались создать собственный медиа-сеанс, и это все равно не удалось?   -  person user7423607    schedule 29.10.2018
comment
@user7423607 Пользовательский мультимедийный сеанс является частью моего проекта CaptureManager SDK. На мой взгляд, проблема использования MediaSession из MFCreateMediaSession связана с его ограниченным функционалом - проигрыванием видео из файлов. Для более сложного решения необходимо написать собственный медиа-сеанс.   -  person Evgeny Pereguda    schedule 30.10.2018


Ответы (1)


Под windows 7 нельзя.

Прочитайте это: Многовход и мультивыход

Бекки Вайс из Microsoft дает ответы:

Конвейер MFv1 не будет поддерживать MFT с несколькими входами. Бывает так, что медиа-сессия Beta 2 явно не проверяется на соответствие этому.

Я бы сказал, что MFT с несколькими входами — это то, что можно ожидать от будущих версий Media Foundation; но на данный момент у нас пока нет такой поддержки.

Я полагаю, что MFv1 относится к Vista, а MFv2 — к Windows 7.

Ссылки, которые вы предоставляете «О MFT», просто говорят вам, что вы можете написать преобразование с несколькими входами, вот и все. Но проблема не в преобразованиях Media Foundation.

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

Сообщение, которое вы получаете «Катастрофический сбой», было тем же, что и я, используя AudioMixerMFT и собственный медиа-сеанс.

Можно ли это сделать в Windows 10 без сеанса пользовательского мультимедиа?

Я не знаю. Проверьте ссылку форума mdsn выше, кто-то спрашивает об этом вчера.

PS: Если вы решите написать собственный медиа-сеанс для вашего случая, я могу помочь. это было бы хорошим упражнением из-за использования AsyncMFT.

Я переместил проект, который содержит пользовательский медиа-сеанс, сюда: github/mofo7777 (в разделе MFNode > MFNodePlayer).

person mofo77    schedule 28.10.2018