• 使用QT的QML实时显示海康威视网络摄像头的视频数据


    需求背景:
    开发的监控软件中有个监控页面需要实时显示网络摄像头的数据,整个监控软件是基于QT的QML语言开发的。在QML中播放视频使用MediaPlayer组件就可以,但网上看到的一些都是播放录制好的视频文件,对于实时播放摄像头数据介绍的比较少。

    开发环境:
    Debian11.3
    Qt 5.15

    海康威视网络摄像机视频流地址
    若要从网络摄像头实时获取数据,需要知道摄像头的视频流地址,仅此而已。这里需要获取rtsp协议的地址,它是一种实时数据流传输协议。地址如下:

    格式:
    rtsp://用户名:密码@ip地址:554/Streaming/Channels/101
    样例:
    取第1个通道的主码流预览
    rtsp://admin:123456789@10.10.6.100:554/Streaming/Channels/101

    取第1个通道的子码流预览
    rtsp://admin:123456789@10.10.6.100:554/Streaming/Channels/102

    取第12个通道的主码流预览
    rtsp://admin:123456789@10.10.6.100:554/Streaming/Channels/1201

    QML代码实现

    import QtQuick 2.12
    import QtQuick.Controls 2.5
    import QtMultimedia 5.0
    
    Rectangle {
        x: 10
        y:10
        width: 1200
        height: 800
        color: "white"
        
        MediaPlayer {
            id: player
            autoPlay: true
            //source: "file:///home/test/test_camera.mp4" //播放本地视频文件
            source: "rtsp://admin:123456789@10.10.6.100:554/Streaming/Channels/101" //播放摄像头实时数据
            onError: {
                console.log(errorString)
            }
        }
        
        VideoOutput {
            anchors.fill: parent
            source: player
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    啰嗦一句
    从上面的QML代码看,播放网络实时视频流实际和播放本地的视频文件一样,都是把URL赋值给source属性。差异只是不同的数据源需要填写正确的视频流地址。

  • 相关阅读:
    [附源码]计算机毕业设计springboot小型银行管理系统
    什么是合规性测试?如何进行合规性测试?
    python教程:*的用法,你可能错过了......
    【计算机视觉】OpenCV3编程入门-笔记(一)
    设备互联(三)多屏协同简析
    阿里云产品试用系列-函数计算 FC
    基于SpringBoot实现自动装配返回属性
    10个即时通讯软件开发项目经验教训
    Day 92
    java8日期时间格式化与解析
  • 原文地址:https://blog.csdn.net/agang1986/article/details/132719144