ПРИМЕЧАНИЕ. Я предполагаю, что вы используете Windows, поскольку хотите настроить таргетинг на .NET.
Я делал это в прошлом.Насколько я знаю, не существует полного доступного исходного кода .NET для использования.
РЕДАКТИРОВАТЬ: OpenCV не поможет вам в вашей задаче.Вы можете использовать OpenCV для отображения видео (он использует FFMPEG для внутреннего использования), но у вас не будет доступа к пакетам.Также взломать библиотеку FFMPEG, поставляемую с OpenCV, нелегко, поскольку в Windows она будет предварительно скомпилирована.
Путь к работе на самом деле зависит от ваших потребностей.Однако, если вам нужно работать на уровне пакетов, вам придется изучить спецификацию MPEG2 TS.Википедия - хорошее место для начала, но в конечном итоге вам придется прочитать саму спецификацию iso13818-1 и, возможно, iso13818-2.Вы можете найти его копии в сети - просто Google.Вы можете найти некоторые эталонные реализации в C / C ++ VLC, FFMPEG, libmpeg gstreamer (в плохих плагинах), однако я могу заверить вас, что их трудно читать и не очень хорошо документировали.Кроме того, написание полного и надежного мультиплексора или демультиплексора MPEG TS - сложная задача, требующая утомительного изучения документации.В .NET написан инструмент .NET под названием «Анализатор пакетов транспортного потока MPEG-2», который выглядит как полная реализация, однако код не находится в свободном доступе - возможно, автор может быть готов продать его вам.Вы можете получить к нему доступ с http://www.pjdaniel.org.uk/mpeg/
В зависимости от вашего C / C ++ и навыков программирования, я порекомендую один из следующих вариантов:
- НЕТ навыков C / C ++, но очень высокий уровень программированиянавыки Или нужно просто выполнить простую работу с пакетами:
Прочитайте документы, чтобы реализовать именно то, что вам нужно - Хорошие навыки C / C ++ и терпение для компиляции FFMPEG с MinGW и чтения кода других людей:
Возьмите FFMPEG (libavcodec) и посмотрите на реализацию MpegTS, запишите в нее свои хуки и экспортируйте простые функции C, которые вы можете взаимодействовать с .NET
Я бы порекомендовал второй вариант, если вам не нужно делать ремуксингили другие виды серьезных манипуляций с самим битовым потоком
Вы должны заметить, что, учитывая сложность протокола TS, манипулировать им проще с помощью C / C ++ (что я и сделал в конце после запуска с C #)и инеропировать его с .NET.
Я должен был написать свой собственный демультиплексор и мультиплексор для определенного проекта, который имел оченьконкретные потребностиЭто была непростая задача (все это заняло у меня около 300 часов для правильной реализации), и в итоге результат оказался не таким надежным, как коммерческий муксер или демультиплексор от Elecard или MainConcept - однако готовые продукты не будут делать то, что нужнонам нужно.Я написал их на C ++ - использовал DirectShow (на C ++) для написания исходного фильтра, декодировал с использованием Elecard (который работал лучше, чем MainConcept в то время) и написал свой собственный Renderer для отображения реального видео.Вся цепочка DirectShow контролировалась из C # с помощью взаимодействия.
После того, как вы выбрали свой путь, вам следует принять некоторые другие решения в зависимости от того, что вы делаете с пакетами.Если вы хотите отправить их в декодер или мультиплексор, вы можете использовать DirectShow для этого.Вы должны будете поместить все, что вы делаете, в фильтр источника, фильтр преобразования или фильтр назначения в зависимости от того, где вы получаете данные.Если вы хотите внедрить свой фильтр в .NET, вы можете использовать «Чистые фильтры .NET DirectShow в C #» по форме Максима Картавенкова http://www.codeproject.com/Articles/421167/Pure-NET-DirectShow-Filters-in-Csharp. (или купить Elecard .NET SDK, если вам нужна коммерческая поддержка).Есть несколько справочных фильтров, которые помогут вам начать работу, хотя вам также придется прочитать документацию по DirectShow.Если вы просто посмотрите на пакеты, возможно, измените их и напишите их обратно, то, возможно, вы сможете написать свою собственную чистую реализацию для этого или взломать реализацию libavcodec для mpegts, это не так сложно, просто часы веселья, чтобы понять, что происходит - Очень поучительно, хотя. libavcodec имеет очень чистый интерфейс, так что вы можете легко вернуть измененные пакеты - вы должны будете также прочитать документы для этого.
Итак, я не уверен, что вы хотели именно такой ответ, но нет простого пути для того, что вы хотите.