Как я могу оптимизировать кодировку файлов MP4 в openRTSP до уровня FFmpeg? - PullRequest
0 голосов
/ 02 июля 2018

В настоящее время я получаю и сохраняю поток 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 Ответ

0 голосов
/ 02 июля 2018

Хорошо, это не проблема производительности, а скорее проблема в том, что 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, все в порядке.

Может быть, кто-то может подтвердить мою догадку?

...