Как создать видеопоток, когда у меня есть необработанные кадры H264 и временные метки? - PullRequest
1 голос
/ 05 июня 2019

Я получаю из стороннего приложения поток пакетов, содержащих необработанные кадры H264 и временную метку.Я хочу взять необработанные кадры, временную метку и выполнить повторную потоковую передачу, чтобы увидеть видео в плеере, подобном VLC

. Я попытался просто взять необработанные кадры H264 по мере их поступления и передавать их по TCP.сокет, и я на самом деле могу увидеть видео в VLC.Но, разумеется, без отметок времени, видео воспроизводится на максимальной скорости, затем останавливается, ожидая другие кадры, а затем снова запускается на максимальной скорости.Я думаю, мне нужно поместить эти необработанные кадры в контейнер и пометить каждый кадр меткой времени, но я не знаю как.Любая помощь оценена (если в C # даже лучше)

Спасибо

1 Ответ

0 голосов
/ 07 июня 2019

(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

...