使用pyav访问网络视频流

背景

深度学习项目中使用python-opencv获取视网络频流出错,找替代方案.要求能得到numpy格式的图片,供opencv和深度模型使用。

方案选型

据我所知道的方法,在python中访问网络视频流(rtsp 或者http视频流)有以下工具:opencv、pyav、imageio和python-vlc.

imageio和python-vlc的资料少,没找到完美的例子,放弃。
opencv是最简单的,网上也有很多例子,推荐使用。

**但是**opencv在我的docker里运行有错误,所以选择pyav。

libav是部分ffmpeg开发人员出走后另外成立的项目,功能和ffmpeg基本一致。pyav是对libav的python语言binding。

libav的官网:https://libav.org/

libav播放rtsp的例子:https://github.com/mikeboers/PyAV/issues/300

代码

参考例子,自己写的代码如下:

import av
import cv2

#video = av.open('rtsp://admin:[email protected]:554', 'r')
video = av.open('http://10.11.20.104:8554/48/64', 'r')
print("format:" + video.dumps_format())
print('after open')
index = 0
try:
    for frame in video.decode():
        # Do something with `frame`
        index += 1
        print("frame:{}".format(index))

        img = frame.to_nd_array(format='bgr24')
        #cv2.imshow("Test", img)
        cv2.imwrite("Test{}.jpg".format(index), img)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
except Exception as e:
    print('fate erro:{}'.format(e))

cv2.destroyAllWindows()

安装pyav请参考 https://mikeboers.github.io/PyAV/installation.html#dependencies

你可能感兴趣的:(DL/ML/AI,图像处理,opencv,python,这就是opencv)