显示 RTSP 媒体流和读取键盘输入/发送 Telnet 命令时出现延迟

问题描述

我正在尝试制作一个程序,该程序能够通过互联网连接到 rtsp 媒体流,在屏幕上显示流,然后通过 telnet 连接发送基于键盘输入的命令以移动相机。

>

目前我使用 python 和 OpenCv 和 Telnet 模块来做到这一点。我有一个非常粗糙的版本,它通过键盘模块的热键读取键盘输入。虽然只要按住一个键就可以工作(例如按住左箭头键将相机向左平移),视频馈送会滞后很多。我尝试使用多处理,这似乎在按住某个键时略微改善了延迟,但并非完全改善。最终我想添加一个 GUI 来在相机之间移动以及使用 Tkinter 之类的东西。

python 是一种可用的语言,还是在开销较少的 c++ 中执行此操作会更聪明?还是我只是效率低下?

from telnetlib import Telnet
import cv2 as cv
from multiprocessing import Process
import sys
import keyboard as kb
#import camera_controls as cam


def pan_left():
    tn.write(b'camera pan left\n')
    tn.read_until(b"OK")
    tn.write(b'camera pan stop\n')
    tn.read_until(b"OK")

def pan_right():
    tn.write(b'camera pan right\n')
    tn.read_until(b"OK")
    tn.write(b'camera pan stop\n')
    tn.read_until(b"OK")

def tilt_up():
    tn.write(b'camera tilt up\n')
    tn.read_until(b"OK")
    tn.write(b'camera tilt stop\n')
    tn.read_until(b"OK")

def tilt_down():
    tn.write(b'camera tilt down\n')
    tn.read_until(b"OK")
    tn.write(b'camera tilt stop\n')
    tn.read_until(b"OK")

def zoom_in():
    tn.write(b'camera zoom out\n')
    tn.read_until(b"OK")
    tn.write(b'camera zoom stop\n')
    tn.read_until(b"OK")

def zoom_out():
    tn.write(b'camera zoom out\n')
    tn.read_until(b"OK")
    tn.write(b'camera zoom stop\n')
    tn.read_until(b"OK")

def home():
    tn.write(b'camera home\n')
    tn.read_until(b"OK")



def stream():
    print("launching stream\n")
    vcap = cv.VideoCapture("media stream ip")

    while( True ):
        ret,frame = vcap.read()
        cv.imshow('VIDEO',frame)
        cv.waitKey(1)

if __name__ == '__main__':
    p = Process( target=stream )
    p.daemon = True
    p.start()
    p.run()


host = 'host ip'
user = 'host username'
password = 'host password'


tn = Telnet(host,23)

tn.read_until(b"login: ")
tn.write(user.encode('ascii') + b'\n')

tn.read_until(b"Password: ")
tn.write(password.encode('ascii') + b'\n')

tn.read_until(b"Welcome admin")


kb.add_hotkey( 'a',pan_left )
kb.add_hotkey( 'd',pan_right )
kb.add_hotkey( 'w',tilt_up )
kb.add_hotkey( 's',tilt_down )
kb.add_hotkey( 'h',home )
kb.add_hotkey( 'q',end_stream )

kb.wait('esc')

tn.write(b'exit')

tn.close()

sys.exit()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)