(1) Опция 1: Таймер
Просто используйте таймер для отправки ваших отдельных кадров H264.
timer_delay = (1000/FPS); //if FPS is 30, then sends a frame every 33 milliseconds.
Кадр (единица NAL) имеет начальный код из четырех байтов в виде 00 00 00 00
, поэтому выбирайте все байты из одной последовательности, включая 00 00 00 00
до последнего байта перед другимпоследовательность 00 00 00 00
начинается.Это должны быть * данные вашего кадра для отправки.
примечание:
Я говорю "следует" , потому что H264 иногда разрезает изображения, поэтому, если вы отправляетекадр и получить только половину изображения, что означает, что вы должны отправить две или три последовательности блоков NAL как один целый элемент ( например: в одном байтовом массиве), чтобы увидеть полное изображение.Вы будете учиться с помощью активных экспериментов.
(2) Вариант 2: Трубы
Попробуйте FFmpeg бесплатный инструмент командной строки.На самом деле это также аудио / видео декодер для VLC.Вы можете использовать C # Standard in / out для отправки полученных байтов в FFmpeg (который как процесс выполняется с настройками кодера , например: формат вывода и разрешение и т. Д.).
См. Эту статью в качестве отправной точки:
https://mathewsachin.github.io/blog/2017/07/28/ffmpeg-pipe-csharp.html