gpt4 book ai didi

opencv读取错误:[h264 @ 0x8f915e0] error while decoding MB 53 20,字节流-7

转载 作者:太空宇宙 更新时间:2023-11-03 21:10:45 33 4
gpt4 key购买 nike

我的配置:

  ubuntu 16.04
opencv 3.3.1
gcc version 5.4.0 20160609
ffmpeg version 3.4.2-1~16.04.york0

我构建了 opencv:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D PYTHON_EXECUTABLE=$(which python) -D OPENCV_EXTRA_MODULES_PATH=/home/xxx/opencv_contrib/modules -D WITH_QT=ON -D WITH_OPENGL=ON -D WITH_IPP=ON -D WITH_OPENNI2=ON -D WITH_V4L=ON -D WITH_FFMPEG=ON -D WITH_GSTREAMER=OFF -D WITH_OPENMP=ON -D WITH_VTK=ON -D BUILD_opencv_java=OFF -D BUILD_opencv_python3=OFF -D WITH_CUDA=ON -D ENABLE_FAST_MATH=1 -D WITH_NVCUVID=ON -D CUDA_FAST_MATH=ON -D BUILD_opencv_cnn_3dobj=OFF -D FORCE_VTK=ON  -D WITH_CUBLAS=ON -D CUDA_NVCC_FLAGS="-D_FORCE_INLINES" -D WITH_GDAL=ON -D WITH_XINE=ON -D BUILD_EXAMPLES=OFF -D BUILD_DOCS=ON -D BUILD_PERF_TESTS=OFF -D BUILD_TESTS=OFF  -D BUILD_opencv_dnn=OFF -D BUILD_PROTOBUF=OFF -D opencv_dnn_BUILD_TORCH_IMPORTER=OFF -D opencv_dnn_PERF_CAFFE=OFF -D opencv_dnn_PERF_CLCAFFE=OFF -DBUILD_opencv_dnn_modern=OFF -D CUDA_ARCH_BIN=6.1 ..

并使用这些python代码来读取和显示:

import cv2
from com.xxx.cv.core.Image import Image

capture=cv2.VideoCapture("rtsp://192.168.10.184:554/mpeg4?username=xxx&password=yyy")
while True:
grabbed,content=capture.read()
if grabbed:
Image(content).show()
doSomething()
else:
print "nothing grabbed.."

每次读取大约 50 帧后,它会给出如下错误:

[h264 @ 0x8f915e0] error while decoding MB 53 20, bytestream -7

然后再抓不到东西了,奇怪的是:

1,comment doSomething() or
2,keep doSomething() and recording the stream from same IPCamera,then run
code against recorded video

这两种情况,代码都可以正常工作,谁能告诉我如何解决这个问题?提前致谢!

最佳答案

先来看一个简单的读取RTSP的示例程序

import cv2
cap=cv2.VideoCapture("rtsp://admin:admin_123@172.0.0.0")

ret,frame = cap.read()
while ret:
ret,frame = cap.read()
cv2.imshow("frame",frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
cap.release()

帧值是每一帧的图像。但是如果在while代码块中加入对每一帧的识别操作,比如加入Tensorflow识别里面的小动物,就会报这样的错误,while循环也会因为这个异常而中断。

[h264 @ 0x55abeda05080] left block unavailable for requested intra mode
[h264 @ 0x55abeda05080] error while decoding MB 0 14, bytestream 104435

原来FFMPEG Lib不支持rtsp协议(protocol)中的H264视频,所以解决办法是写两个不同的线程分别处理每一帧的图像,然后再另外一个线程处理每一帧的图像。

思路是这样的:使用队列,采用先进先出的策略,在一个线程开始接收数据,在另一个线程逐帧处理数据

解决方案代码如下:

import cv2
import queue
import time
import threading
q=queue.Queue()

def Receive():
print("start Reveive")
cap = cv2.VideoCapture("rtsp://admin:admin_123@172.0.0.0")
ret, frame = cap.read()
q.put(frame)
while ret:
ret, frame = cap.read()
q.put(frame)


def Display():
print("Start Displaying")
while True:
if q.empty() !=True:
frame=q.get()
cv2.imshow("frame1", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break

if __name__=='__main__':
p1=threading.Thread(target=Receive)
p2 = threading.Thread(target=Display)
p1.start()
p2.start()

Receive作为接收数据的线程,Display作为一个简单的过程显示。

关于opencv读取错误:[h264 @ 0x8f915e0] error while decoding MB 53 20,字节流-7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49233433/

33 4 0
文章推荐: c# - HtmlAgility :no contents appeared (C#, UWP)
文章推荐: c# - 如何将设置保存到项目设置选项卡?
文章推荐: c# - 来自正文空值
文章推荐: Javascript 可以将背景颜色更改为某些
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com