Доступ к транспортным пакетам MPEG через .NET - PullRequest
8 голосов
/ 28 апреля 2011

Мне приходится иметь дело с транспортными пакетами MPEG 2 с использованием .NET. Каков наилучший способ сделать это? В настоящее время я рассматриваю возможность использования OpenCV, но пока не уверен, возможно ли это.

Ответы [ 6 ]

7 голосов
/ 30 сентября 2012

ПРИМЕЧАНИЕ. Я предполагаю, что вы используете 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 ++ и навыков программирования, я порекомендую один из следующих вариантов:

  1. НЕТ навыков C / C ++, но очень высокий уровень программированиянавыки Или нужно просто выполнить простую работу с пакетами:
    Прочитайте документы, чтобы реализовать именно то, что вам нужно
  2. Хорошие навыки 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 имеет очень чистый интерфейс, так что вы можете легко вернуть измененные пакеты - вы должны будете также прочитать документы для этого.

Итак, я не уверен, что вы хотели именно такой ответ, но нет простого пути для того, что вы хотите.

0 голосов
/ 30 марта 2018

Вот пример .NET обработка списков воспроизведения HTTP Live Streaming (.m3u8 файлы). Он загружает .ts файлов из списка воспроизведения в память и использует Библиотека NAudio для анализа и извлечения аудиопотока.

0 голосов
/ 12 декабря 2014

http://net7mma.codeplex.com имеет класс для чтения их среди других типов форматов контейнеров mpeg и non mpeg.

Все версии TS также корректно поддерживаются, включая atsc.

(De) Muxing от одного к другому также будет поддерживаться в ближайшее время.

0 голосов
/ 03 мая 2011

Я не уверен, полностью ли я понимаю ваш вопрос, если вы делаете .NET и перехватываете пакеты MPEG, а затем вам необходимо выполнить некоторую обработку, то OpenCV будет в порядке, но будет рекомендовать использовать Aforge.NET Это поможет вам избежать написания операций для OpenCV. Он содержит широкий набор библиотек обработки видео и должен быть полезен для вас.

0 голосов
/ 03 мая 2011

SDP файлы потрясающие.Я не знаю, нужно ли вам обрабатывать это на уровне пакетов, но я обычно пишу сценарий SDP-файла.Все медиаплееры, с которыми я тестировал - Windows Media, VLC, Quicktime - поддерживают их.Затем, если вам нужно встроить мультимедиа в веб-страницу, форму или в запись, это можно легко сделать с помощью API-интерфейса соответствующего проигрывателя.

Файл SDP пройдет контейнер, кодировку и работу в сети.информация, необходимая игроку для захвата самого потока.

Я потратил кучу времени, играя с прямым шоу, пока не понял, что проигрыватель Windows Media - чертовски хорошая реализация, и он создаст все ваши фильтрына основе файла SDP.Это довольно легко.Вот спецификация:

http://www.ietf.org/rfc/rfc4566.txt

VLC также имеет действительно хороший API для такого рода вещей.

0 голосов
/ 29 апреля 2011

Возможно, вам будет полезен традиционный путь разработки фильтра DirectShow, например, с использованием этого компонента.

...