Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.221.141.44] |
|
Сообщ.
#1
,
|
|
|
добрый вечер!
Не могли бы Вы подсказать, в чем отличия типов медиа в DirectShow (для SetFormatType) 1) MEDIATYPE_Audio от 2) MEDIATYPE_Stream ? Для (1) предполагаю работать с MEDIASUBTYPE_PCM - с ним более-менее понятно, а для чего используется MEDIATYPE_Stream и какие для него SUBTYPE'ы используются и каким должен быть формат буфера ? Если имеет значение: планируется, что один комп будет записывать данные с микрофона и направлять в сеть, а другой комп - получать из сети, загружать в source-фильтр DirectShow, а с него и выводить в динамик. Вопрос актуален для реализации фильтра на 2-ом компе - какой тип выходного потока заявить в source-фильтре и (если не PCM), в каком формате он должен предоставить выходные данные ? |
Сообщ.
#2
,
|
|
|
Цитата Lun2 @ Для (1) предполагаю работать с MEDIASUBTYPE_PCM - с ним более-менее понятно, а для чего используется MEDIATYPE_Stream и какие для него SUBTYPE'ы используются и каким должен быть формат буфера ? https://docs.microsoft.com/en-us/windows/wi...stream-subtypes Stream используется когда нет данных о размере кадров, например. Тогда, в теории, декодер берёт на себя распознавание кадров по паттернам в потоковых данных |
Сообщ.
#3
,
|
|
|
B.V., спасибо за информацию!
Еще прошу подсказать, если можно, по созданию фильтра-источника звуковых данных. На этапе согласования медиатипов установлен (SetMediaType) тип = MEDIATYPE_Stream/MEDIASUBTYPE_PCM, в структуре WAVEFORMATEX мой фильтр получил данные о звуке: pvi->wBitsPerSample; pvi->nSamplesPerSec; pvi->nChannels; Далее фильтр (точнее, его выходной pin) начинает генерировать аудио с указанными параметрами и заполнять выборку MediaSample в методе FillBuffer. Вопросы: 1) Если при выполнении метода FillBuffer выяснится, что какие-то параметры из 3-х перечисленных изменились, то какие действия необходимо предпринять ? Насколько я понимаю, pin должен заполнять буфер данными того формата, который согласован ранее, а вот как поменять это согласование именно из FillBuffer ? 2) FillBuffer проставлять timestamp (через SetTime). А что случится если начало timestamp окажется в прошлом, например, текущее время = 10, а в timestamp: от 5 до 12 - он, что, кусок 5-10 выкинет, а кусок 11-12 пойдет дальше (у меня - на динамик) ? 3) Насколько я понял, аллокатору памяти (IAllocator...) можно поручить захватить несколько буферов - для чего это может потребоваться - данные поступают на вход быстрее, чем продвигаются по графу ? 4) Предполагается, что звук будет передаваться из сети в мой фильтр, а из него - на динамик. Имеет ли какое-то преимущество способ накопления данных. Например: способ1 - как только получают пакет данных со звуком, сразу отдаю в фильтр (много маленьких пакетов) или способ2 - вне методов графа, фильтров, накапливаться большой пакет данных и его направлять в фильтр (мало больших пакетов). Маленькие - это несколько кбайт, большие это десятки кбайт. ? |