Как я могу оптимизировать кодировку файлов MP4 в openRTSP до уровня FFmpeg?
В настоящее время я получаю и сохраняю поток RTSP с камеры с openRTSP с помощью команды, подобной этой:
openRTSP -4 "rtsp://192.168.41.185/rtsp_tunnel?h26x=4&line=1&inst=2" > movie.mp4
Я могу сделать то же самое, используя FFmpeg:
ffmpeg -i "rtsp://192.168.41.185/rtsp_tunnel?h26x=4&line=1&inst=2" -vcodec copy movie.mp4
Видеокадры с камеры имеют разрешение 1280x720 (H.264) со скоростью около 30 кадров в секунду и имеют отметку времени в миллисекундах. Когда я смотрю файл movie.mp4, созданный ffmpeg, он выглядит довольно хорошо, секунды, отмеченные в видеопотоке, выглядят довольно точными, Напротив, если я просматриваю файл movie.mp4, созданный openRTSP, секунды в метке времени видео будут определенно дольше, чем в реальности. Так что одна секунда на видео может длиться две секунды на самом деле. Я провел несколько тестов, и это не проблема производительности сети или обработки сообщений, полученных с камеры. Кажется, причина в том, что сообщения кодируются в этот контейнер MP4.
FFmpeg намного быстрее делает это, чем openRTSP?
Можно ли как-то оптимизировать кодировку MP4 в openRTSP?
1 ответ
Хорошо, это не проблема производительности, а проблема в том, что openRTSP не может определить правильную частоту кадров из потока RTSP. Я записал ровно 60 секунд, и, как и предполагалось, я использовал ffprobe
чтобы получить больше информации о битовом потоке:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'output-00000-00060.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: mp42isom
creation_time : 2018-07-02 03:30:01
Duration: 00:04:00.13, start: 0.000000, bitrate: 46 kb/s
Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuvj420p(pc, bt470bg/bt470bg/iec61966-2-1), 1280x720 [SAR 561:560 DAR 187:105], 45 kb/s, 15 fps, 15 tbr, 600 tbn, 1200 tbc (default)
Metadata:
creation_time : 2018-07-02 03:30:01
handler_name : ?Apple Alias Data Handler
encoder : H.264
Две вещи не так:
- Проблема № 1: Частота кадров не 15 кадров в секунду, но камера настроена на попытку отправки 30 кадров в секунду.
- Проблема № 2: Продолжительность 4:00, но должна быть 1:00
По вопросу № 1: Это может быть моя вина. Я должен был вручную указать частоту кадров, так как openRTSP не получает ее из потока. Я должен был указать опцию -f 30
,
Для вопроса № 2: После предоставления опции -f 30
Я все еще получаю видеофайл с продолжительностью 2 часа вместо 1,00. Я предполагаю, что проблема в том, что камера отправляет свои данные в прогрессивном режиме, а не в чересстрочном режиме. Возможно, по умолчанию openRTSP является чересстрочным режимом. Поэтому, когда я удваиваю частоту кадров до -f 60
все в порядке.
Может быть, кто-то может подтвердить мою догадку?