1

Я передаю необработанные кадры YUV444 640x480 в ffmpeg изнутри программы на C++, используя стандартный вывод (формат конвейера: труба <-Y <-U <-V целых кадров каждый). ffmpeg кодирует их, используя h.264, и передает видео по UDP на мой IP-адрес.

Когда я не выполняю потоковую передачу и не сохраняю видео на записывающем устройстве в виде файла -mp4 с помощью ffmpeg, все работает - но когда я выполняю потоковую передачу по сети и пытаюсь получить ее в VLC, поток принимается и запускается таймер воспроизведения под экраном видео , но изображение черное, видео не отображается. Также на моем аудиовыходе есть несколько трескучих звуков. Необработанное видео не имеет звуковой дорожки.

Мои настройки ffmpeg следующие:

ffmpeg -y -loglevel verbose -f rawvideo -r 25 -c:v rawvideo -pix_fmt yuv444p -s 640x480 -i - -c:v libx264 -preset superfast -framerate 25 -f mpegts udp://192.168.150.1:20001

в VLC (GUI) я просто использую "открытый сетевой поток" с udp://@:20001. Порт открыт, я проверил его с помощью простого фиктивного отправителя /получателя. Почти одинаковые аргументы для записи видео приводят к идеальному воспроизведению видео при записи в файл и его загрузке:

ffmpeg -y -loglevel verbose -f rawvideo -r 25 -c:v rawvideo -pix_fmt yuv444p -s 640x480 -i - -c:v libx264 -preset superfast -framerate 25 video.mp4

Если я пытаюсь транслировать одно и то же записанное видео, используя

ffmpeg -i video.mp4 -v 0 -vcodec mpeg4 -f mpegts udp://192.168.150:20001

Я снова получаю черный экран, как указано выше.

Выходные данные журнала VLC идентифицируют мой поток как mp3, так что, возможно, виновато распознавание типа потока. Но почему?

Вот вывод консоли ffmpeg и журнал VLC.

Что я делаю неправильно?

PS: перенес этот вопрос сюда из Переполнения стека, потому что он не получал никаких ответов, старый оставшийся без ответа дубликат удаляется.

1 ответ1

1

Хотя основная проблема не была решена, подсказки @Gyans помогли мне решить мою проблему. Использование других плееров (PotPlayer) или более старой версии VLC заставило работать потоковое отображение, и это все, что мне было нужно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .