написать кодек

za
zaym
00Неизвестно
Подскажите с чего начать и где почитать о создании кодеков.
И если не сложно растолкуйте как выбирается кодек для каждого видео файла и можно ли сделать так чтобы видео файл отрывал только какой-то определенный кодек?
Vlafy
ruСосновый Бор
zaym,
Читать вам, наверное, надо много...

Видеофайл не может открывать кодек. Видеофайл - это файл, использующий один из контейнеров (avi, asf, mpeg ts, mpeg ps, mp4, mkv и т.д.) для хранения одного или нескольких потоков видео, звука, титров и т.д. Каждый поток может быть сжат по какому-то алгоритму, информация об этом хранится в заголовке файла.

Когда плеер открывает файл, он считывает форматы потоков и ищет в системе подходящий декодер. Если его нет, то воспроизвести поток не удастся.

Насколько я понял, ваша задача - написать пару кодеровщик и декодеровщик ("кодек" - это сокращение от КОдер-ДЕКодер). В терминах DirectShow - это обычные transform-фильтры. Т.е. вам надо начинать с изучения создания transform-фильтров.
za
zaym
00Неизвестно
да, надо написать пару кодеровщик и декодеровщик.

как писать трансформы я знаю. уже есть средний опыт написания таковых.
меня наверное больше интересует теоретическая часть, например как система поймет что мой трансформ фильтр является именно тем декодером которым надо открывать файл.

Насколько я знаю то DS использует интелижент коннект в котором подбирает фильтры по совместимости медиатипов и если у моего декодера будет такой-же медиатип как и у некого стандартного и мериты будут совпадать, то какой фильр будет выбран?
Vlafy
ruСосновый Бор
zaym : Насколько я знаю то DS использует интелижент коннект в котором подбирает фильтры по совместимости медиатипов и если у моего декодера будет такой-же медиатип как и у некого стандартного и мериты будут совпадать, то какой фильр будет выбран?
Почти, но не совсем. Мерит - это приоритет в выборе. Для DirectShow фильтр и кодек - суть вещи идентичные. Это просто разное название одного и того же. При подборе подходящего фильтра (декодера) граф менеджер сначала ищет среди фильтров с самым большим меритом, потом пониже и т.д. до какого-то значения. Об этом можно найти в SDK. По памяти - есть MERIT_DO_NOT_USE, всё что больше него - участвует в интеллигент-коннекте. Т.е. вы можете своему фильтру присвоить требуемый мерит, чтобы графмэнеджер пробовал его подключать.

Если будете писать свой софт, то мерит не обязательно ставить высоким, можно подключать свой декодер сразу. Тогда только ваш софт сможет воспроизводить такие файлы, а никакой другой софт не сможет.
za
zaym
00Неизвестно
как раз самая основанная проблема в том, что декодер должен подхватываться большинством популярных плееров и при этом всем не должен мешать системе просматривать видое которое было закодировано другими кодеками, а участвовать в рендере только "своих" файлов.
Vlafy
ruСосновый Бор
zaym,
Никакой проблемы тут нет. Ставите ему высокий мерит. При поиске декодера для какого-то медиа-тайпа графмэнеджер будет пытаться подключить ваш фильтр. Вы должны проверить входной медиа-тайп и если он не соответствует вашему, то вернуть соответствующий код ошибки. И всё. Если же медиа-тайп ваш, то возвращайте S_OK и ваш декодер подключится.
za
zaym
00Неизвестно
грейт сеньку
буду пытаться пистать, а там посмотрим по ходу дела
tr
trupoed
ruМуром
народ а что из набора инклюдов SDK нужно подключить для того чтобы сделать хотя бы простейший кодек.

и если не сложно. то опишите для чего нужны если не все то хотя бы некоторые из инклюдов.
Vlafy
ruСосновый Бор
trupoed,
В SDK есть примеры фильтров, там можно посмотреть, что включать. Ещё надо не забыть собрать base classes: ссылка
Ми
Мирослав
ruМосква
Здравствуйте! Нужно написать видеокодек. Ищу того, кто сможет это сделать. Хочу понять стоимость и сроки.