Я передаю необработанные кадры YUV444 640x480 в ffmpeg из программы на C++ с помощью stdout (формат канала: pipe<-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) я просто использую "open network stream" с udp://@:20001. Порт открыт, я проверил его с помощью простого фиктивного отправителя/получателя. Почти те же аргументы cli для записи видео приводят к идеально воспроизводимому видео при записи в файл и его загрузке:
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: Перенес этот вопрос сюда со Stack Overflow, поскольку на него не было ответов, старый неотвеченный дубликат удален.
решение1
Хотя основная проблема не была решена, подсказки @Gyans помогли мне решить мою проблему. Использование других плееров (PotPlayer) или более старой версии VLC заставило потоковое отображение работать, и это все, что мне было нужно.