RTSPの遅延時間
RTSP自体がリアルタイムとうたっているのになんのことだが、
VANTRUE Element 1 Lite Hackで、
RTSPをOpenCVで受け取ったとき、なぜか500msぐらいとか(ばらつきがある)遅延して、
かつ
[h264 @ 0000026727ff1d00] error while decoding MB 18 10, bytestream -12
とか言って、取得できなくなっていた。
何か他の方法でRTSPを受信できないかと調べていたら
PyAVでも受信できることが分かった。
こちらを試したら、RTSPの名の通り、リアルタイムに受信でき(100msぐらいの遅延)、エラーが起きても次を受信続ける。まさに一石二鳥!
ただし、ログレベルを変えないと、めっちゃワーニング出るので注意。
error while decoding MB *, bytestream *
で調べても、
そんな情報出てこないので、VANTRUEが悪いんだろうけど、RTSPをOpenCVで受信して、問題出る人はPyAVを試してみるのをすすめます。
コード
import logging
import av
import cv2
logging.basicConfig()
logging.getLogger('libav').setLevel(logging.ERROR)
container = av.open('rtsp://192.168.1.254/xxx.mov')
for frame in container.decode(video=0):
try:
img = frame.to_ndarray(format='bgr24')
cv2.imshow('VIDEO', img)
cv2.waitKey(1)
except KeyboardInterrupt:
print("KeyboardInterrupt")
break
cv2.destroyAllWindows()