Задержка FFMpeg при потоковой передаче потока RTSPPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Задержка FFMpeg при потоковой передаче потока RTSP

Сообщение Anonymous »


Что делает код?
  • Сбор живых кадров с IP-камеры, добавление даты и времени в кадр с помощью OpenCV .
  • Используя cv2.imshow('preview',frame), мы отображаем прямую трансляцию.
  • Теперь тот же кадр(ы) также отправляются на другой RTSP-сервер через порт 8554 с помощью FFMpeg
С помощью кода
< ul>
[*]При использовании VLC поток FFMPEG отображается с указанием даты и времени.

Почему я это делаю ?
  • Чтобы создать собственный поток RTSP с изменениями по каналу камеры.
Определение проблемы:
Задержка/задержка в потоке на VLC через FFMpeg составляет около 3–4 секунд, поскольку по сравнению с исходным предварительным просмотром с использованием OpenCV imshow.
Ниже приведен код:

Код: Выделить всё

import cv2
import subprocess
import threading
import datetime

rtsp_width = 1280
rtsp_height = 720

#system stream
rtsp_url = "rtsp://ip_address:8554/system/cam_preview"

command = ['ffmpeg',
'-fflags', 'nobuffer',
'-flags', 'low_delay',
'-loglevel' , '0',
'-analyzeduration', '0',
'-re',
'-y',
'-init_hw_device', 'cuda:0',
'-hwaccel', 'cuda',
'-hwaccel_output_format', 'cuda',
'-f', 'rawvideo',
'-vcodec', 'rawvideo',
'-pix_fmt', 'bgr24',
'-s', "{}x{}".format(rtsp_width, rtsp_height),
'-r', "15",
'-an',
'-i', '-',
'-g', '15',
'-c:v', 'h264_nvenc',
'-use_wallclock_as_timestamps', '1',
'-f', 'rtsp',
'-rtsp_transport','tcp',
str(rtsp_url)]

print("MAIN > RTSP URL:", str(rtsp_url))

process = subprocess.Popen(command, stdin=subprocess.PIPE)

#camera rtsp url
path = "rtsp://username:password@ip_address/axis-media/media.amp"

cap = cv2.VideoCapture(path)

def read_frames():
global process

while True:
if cap.grab():
ret, frame = cap.retrieve()
if ret:
date_format = '%Y-%m-%d %H:%M:%S'
today_str = datetime.datetime.now().strftime(date_format)
cv2.rectangle(frame, (445,5), (580,20), (0,0,0), -1)
cv2.putText(frame,today_str,(450,15), cv2.FONT_HERSHEY_SIMPLEX, 0.35, (255, 255, 255), 1 )
process.stdin.write(frame.tobytes())
cv2.imshow('preview',frame)
else:
print("Error grabbing frame")
cap.release()
process.kill()
cv2.destroyAllWindows()
break
if cv2.waitKey(1) & 0xFF == ord('q'):
cap.release()
process.kill()
cv2.destroyAllWindows()
break

thread = threading.Thread(target=lambda: read_frames())
thread.start()
На что следует обратить внимание
Пакет cv2 скомпилирован с помощью CUDA ARCH 7.5
Ниже приведены некоторые параметры исследования FFMpeg:

Код: Выделить всё

   '-fflags', 'nobuffer',

'-flags', 'low_delay',

'-tune', 'zerolatency'
Few others, but they did not made any impact over latency, on average about 4 seconds of delay might worth be reducing, for applications like motion-tracking, object-detection.
How to reduce this latency?


Источник: https://stackoverflow.com/questions/781 ... tsp-stream
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»