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