Как написать движок воспроизведения аудио - видео с использованием C # .Net и DirectX (всесторонний анализ)? - PullRequest
4 голосов
/ 07 января 2012

Предпосылка:

Я работаю в компании, занимающейся вещательными решениями, и мы покупаем SDK для воспроизведения у внешнего поставщика, это снижает нагрузку на видео, рендеринг, воспроизведение и т. Д.предоставляет нам множество функций, таких как генератор символов, наложение изображений, текста, файлов Flash (* .swf), потоковой передачи и т. д. Мы в основном сосредоточены на разработке приложений (а не на разработке технологий).Таким образом, мы делаем простые вызовы API из нашего кода C # в библиотеки DLL SDK, такие как воспроизведение, пауза, seak, оверлей и т. Д., И это облегчает нашу жизнь.

Между тем мы также сталкиваемся с проблемами, поскольку SDK предоставляется третьей стороной в другой стране, и поэтому качество поддержки зависит от них.Кроме того, добавленная ими функция имеет общий характер, и они выпускают новую версию каждые две недели.В их коде много ошибок.Мы также сталкиваемся с проблемами лицензирования, даже если мы купили их полный продукт.


Требования:

  1. Мы хотим оценить возможность написания нашего собственного механизма воспроизведения / рендеринга - изначально с минимальными функциями, но в долгосрочной перспективезапустить, мы бы добавили к нему больше функций, таких как наложение изображения или текста или флэш-SWF-файл, поиск, быстрая перемотка вперед и т. д.
  2. Мы также принимаем входной поток в реальном времени с аппаратных устройств и отправляем видеосигнал на ТВ черезаппаратные устройства и запись прямых трансляций на диск.Мы переключаемся между живым вводом и локально сохраненными видеофайлами.
  3. Нам необходимо воспроизводить все виды видео (быстрое время, mp4, flv и т. Д.), Поэтому мы также будем зависеть от сторонних кодеков.
  4. Мы можем использовать разные аппаратные карты для ввода и вывода, и нам нужно будет перебрать и получить доступную конфигурацию оборудования.
  5. Мы работаем на C #, и у нас есть опытные разработчики на C #, и мы не хотим использовать C ++ для разработки, поскольку у нас в настоящее время нет эксперта по C ++ в нашей компании.

Вопросы:

  1. Какой должен быть наш подход - можем ли мы написать playout с упомянутыми функциями, используя чистый C # и DirectX 11 (это правильный путь или какой-то другой лучший способсуществует)?
  2. Насколько легко или сложно достичь того же (это субъективный вопрос - достаточно субъективного ответа)?
  3. Является ли хорошо написанный код C # медленнее, чем код C ++?(что касается DirectX и воспроизведения мультимедиа, когда мне может потребоваться обеспечить до 30 видеокадров в секунду для стандартов NTSC)?
  4. Каков хороший способ (ресурс) для его запуска (включая концепции и кодирование)?

Это комплексный вопрос, но вы, экспертный совет, сделаете мое руководство и прогресс легким.

Ответы [ 2 ]

1 голос
/ 14 февраля 2012

Я бы рекомендовал работать с MS Expression Encoder SDK - очень, очень прост в использовании, имеет очень полезный пример кода.

Если вы настаиваете на работе с DirectShow, есть порт DirectShow для .NET , который работает довольно хорошо. Вот учебник , показывающий, как с ним работать.

1 голос
/ 13 февраля 2012

Работая над проектом, в котором я построил систему трехмерной телевизионной графики с использованием C # и .NET, я должен сказать, что да, это определенно возможно.

Чтобы ответить на ваши конкретные вопросы,

  1. C # и DX 11 (SlimDX) могут определенно выполнить работу, я сделал это с DX 9 и аппаратным обеспечением, которое было намного менее способным.
  2. Я бы сказал, что если бы вы подошли к проблеме с точки зрения генерации мусора практически без мусора (GC создает графические ошибки) И с использованием подхода, основанного на данных, для анимаций (мы назвали их шаблонами), вы будете см. дорогу, на которую я указываю.
  3. Да, код C # имеет издержки на маршалинг, но можно уменьшить эту стоимость, уменьшив как количество вызовов, которые вы делаете в DX, так и уменьшив объем передаваемых в него данных.
  4. См. Ответ № 2

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...