Привет, эксперты. Продолжаю пляски с бубном вокруг библиотек ffmpeg.
По задумке, код должен делать примерно следующее (если вдруг кто-то будет пробовать запустить):
- Кодировать входной видеофайл в видеофайл h264 (%programname% -i %вход% -o %выход.mp4%);
- Кодировать видео с USB-вебкамеры в видеофайл h264 (%programname% -i /dev/video0 -o %выход.mp4% -w);
- Кодировать видео с IP-камеры в видеофайл h264 (%programname% -i %неважно% -o %выход.mp4% -n).
И вроде все почти работает, кроме последнего.
Столкнулся со следующими проблемами:
- Маленькая проблема: по дефолту ffmpeg работает с камерой по UDP. И непрерывно сыпет ошибками такого рода при обработке фреймов:
[rtsp @ 0x2ba1080] max delay reached. need to consume packet [rtsp @ 0x2ba1080] RTP: missed 1324 packets [h264 @ 0x2ba4020] error while decoding MB 29 34, bytestream -13 [h264 @ 0x2ba4020] concealing 4100 DC, 4100 AC, 4100 MV errors in I frame [libx264 @ 0x2dc12c0] invalid DTS: PTS is less than DTS frame #48 encoded [h264 @ 0x2d30ac0] pts (21599) < dts (35999) in stream 0 .frame #49 decoded [libx264 @ 0x2dc12c0] invalid DTS: PTS is less than DTS frame #49 encoded [h264 @ 0x2d30ac0] pts (10799) < dts (17999) in stream 0 .frame #50 decoded [libx264 @ 0x2dc12c0] invalid DTS: PTS is less than DTS frame #50 encoded [h264 @ 0x2d30ac0] pts (7199) < dts (21599) in stream 0 .[rtsp @ 0x2ba1080] max delay reached. need to consume packet [rtsp @ 0x2ba1080] RTP: missed 19 packets
Нашел вариант переключения в режим tcp. Только вот tcp сильно тяжелее, чем udp в плане нагрузки на сеть, поэтому хотелось бы побороть ошибки при использовании udp. Что можно подкрутить для этого?
- Большая проблема: видео с IP-камеры какое-то ускоренное, раза в 2-3 по субъективным ощущениям. Я сперва грешил на настройки кодирования, но сделал параллельно сброс разжатого видео в файл, так там оно тоже ускоренное. Напрашивается вывод про корявые настройки декодирования, но опять же, непонятно, что крутить? С USB-вебки скорость воспроизведения итогового файла нормальная, если попробовать перекодировать кусок mp4-файла, там тоже со скоростью проблем нет.
Настройки на камере, разрешение fullHD, частота кадров 25/сек, видео отдает по ссылке вида rtsp://%url%.
- Полученные mp4-файлы не воспроизводятся штатными средствами ОС, только через ffplay. Еще ffprobe не может определить битрейт и длительность получаемых файлов. И в них не работает перемотка.
Если у кого есть информация, как работать с ffmpeg в качестве библиотек, буду признателен за ссылки.
Описаний функций на сайте разработчика, примеров в исходниках, к сожалению, мне не хватает, чтобы разобраться, как пользоваться библиотеками ffmpeg.