Немного фона, мне была поручена исправление нескольких "маленьких" ошибок и поддержание этого решения для потоковой передачи видео по сети между двумя экземплярами нашего приложения. Решение было написано кем-то, которого больше нет здесь, поэтому в коде есть какая-то тайна, а также некоторые забавные подводные камни. Решение было написано с использованием ffmpeg с кодом С++, написанным для переноса кода, связанного с кодированием/декодированием, а также с некоторым потоковым кодом. Затем этот С++ был обернут SWIG, чтобы он мог взаимодействовать с С# и передавать видеоролики вверх, где они отображаются, используя VideoRendererElement, который живет в элемент управления WPF. Основная причина, по которой кадры передаются, заключается в том, что у нас есть некоторые пользовательские протоколы, которые нам нужны для отправки видеоданных, и они записываются с использованием С#, так как кадры видео пропускаются, мы обертываем их в наши собственные пакеты и отправляем их на проводе, Это решение работает, и мы можем транслировать видео с помощью наших пользовательских протоколов, хотя это что-то вроде кошмара для поддержания и работы.
Мой вопрос - есть ли лучший способ сделать это? Я ищу способы работать на более низком уровне с видеоданными (на С#), чтобы я мог снимать видеокадры и упаковывать их в свои собственные пакеты, отправлять их и получать и восстанавливать видео на другая сторона. ffmpeg, похоже, является общим решением, но я столкнулся с множеством проблем с ним, и проблема GPL/LGPL, о которой я думаю, является проблемой.
Основной поток, который я ищу, video file → encode → wrap в пакете → передача по проводке по протоколу X → получение видеоданных из пакета → декодирование → рендеринг/сохранение на диск