当前位置: 首页 > 面试题库 >

如何通过OpenCV处理VLC UDP流

卫才
2023-03-14
问题内容

我能够通过VLC命令行接收/查看UDP h264数据包(即VLC –network-caching 0 –demux h264 udp:// …)

我正计划通过OpenCV算法处理那些帧。但是,我似乎找不到找到将VLC帧发送到我的Python OpenCV脚本的方法。

是否可以在单独的脚本中通过Numpy传递要处理的VLC流输出?

之前,我曾尝试使用其VideoCapturehtml" target="_blank">函数直接将视频流传输到OpenCV,但是由于某些原因,视频停顿并停止在失真的黑色图像上。目前看来,合并VLC似乎是唯一的解决方案(尽管我不确定为什么VLC可以替代其他方法)。

谢谢。

编辑:

以下是终端上的错误消息的摘要。前几帧似乎有问题,但我不知道为什么该流在VLC上有效。从客户端,我首先发送了默认关键帧数据,然后发送了视频供稿h264数据。

[h264 @ 0x7f9c50020200] top block unavailable for requested intra mode -1
[h264 @ 0x7f9c50020200] error while decoding MB 7 0, bytestream 7208
[h264 @ 0x7f9c50020200] top block unavailable for requested intra mode -1
[h264 @ 0x7f9c50020200] error while decoding MB 8 9, bytestream 7381

问题答案:

您可以使用ffmpeg进行流式传输。

首先在终端中测试ffmpeg流。在Linux中,我们用来v4l2从相机抓取帧。

服务器

ffmpeg -f v4l2 -i /dev/video0 -preset ultrafast -vcodec libx264 -tune zerolatency -b 900k -f h264 udp://127.0.0.1:5000

客户

ffplay udp://127.0.0.1:5000

如果您能够在客户端上查看流,那么我们可以使用OpenCV进行图像处理。OpenCV必须具有ffmepg支持。请参阅此链接以获取ffmpeg支持检查。

    cap = cv2.VideoCapture('udp://127.0.0.1:5000',cv2.CAP_FFMPEG)
    if not cap.isOpened():
        print('VideoCapture not opened')
        exit(-1)

    while True:
        ret, frame = cap.read()

        if not ret:
            print('frame empty')
            break

        cv2.imshow('image', frame)

        if cv2.waitKey(1)&0XFF == ord('q'):
            break

    cap.release()
    cv2.destroyAllWindows()


 类似资料:
  • 本文向大家介绍java通过jni调用opencv处理图像的方法,包括了java通过jni调用opencv处理图像的方法的使用技巧和注意事项,需要的朋友参考一下 1. 建立java文件 2. 切换到工程src文件夹 javac getImageFeature.java javah getImageFeature 生成 getImageFeature.h 文件 3. VS2013建立dll工程 添加g

  • 问题内容: 我正在考虑将WCF用于一个项目,该项目需要人们能够将大文件(64MB-1GB)上传到我的服务器。我将如何使用WCF处理此问题,可能还具有恢复上传的功能。 为了处理更大的客户群,我想通过WCF测试JSON。这将如何影响文件上传?可以通过JSON完成,还是需要将上传部分切换到REST? 问题答案: 如果要上传大文件,则肯定需要查看WCF流模式。 基本上,您可以更改绑定上的传输模式;默认情况

  • 问题内容: 问题: GhostDriver API尚不支持警报处理。目前有一种可接受的解决方法,即将您自己的javascript注入将处理警报并为您存储其文本的页面。 我在通过python webdriver绑定使用此解决方法时遇到了麻烦。这可能与我的新手对javascript的理解有关。 这是我尝试利用的变通方法的示例:https : //github.com/detro/ghostdriver

  • 我得到错误 -opencv- 我的康达清单 #anaconda许可证1.1 py36_1 雪花石膏0.7.9 py36_0 anaconda 4.3.0 np111py36_0 anaconda客户端1.6.0 py36_0 anaconda navigator 1.4.3 py36_0 appdirs 1.4.0 appnope 0.1.0.0 py36_0 应用脚本1.0.1 py36_0 a

  • 本文向大家介绍JAVA基础--如何通过异常处理错误,包括了JAVA基础--如何通过异常处理错误的使用技巧和注意事项,需要的朋友参考一下 《Thinking in Java》上对这章的讲解不少,可见重要性,学习和总结一些主要的记录下来。 一、创建自定义异常 输出: Throw SimpleException from f() Exception.SimpleException at Exceptio

  • 官方文档中没有那么多信息,所以我想我误解了什么,并且错误地使用了函数。但我到底做错了什么? 更新 我发现,如果使用,就可以避免这个特殊的问题。比如: 但真正的问题是,在我的情况下,我需要根据提供的数据返回一个数字(而不是)。我可以在这里创建一个新的,但无论如何,以后我应该。例如,在final中。因此,如果我执行,那么它将失败。 但它无论如何都不起作用,困在: 注意到如果删除步骤,它就可以工作了。在