【问题标题】:python ONVIF Rotate Video Source on a Camerapython ONVIF在相机上旋转视频源
【发布时间】:2022-08-19 23:35:11
【问题描述】:

我正在尝试通过 Python ONVIF 旋转所有 ONVIF 配置文件的视频源。我正在使用 Python 3.8.1 和 onvif_zeep library:here is the link to this library

在阅读了ONVIF homepage 上的文档后,我不清楚如何执行此操作。

我使用以下代码:

from onvif import ONVIFCamera

mycam = ONVIFCamera(Cam_ip,80,Onvif_User,Onvif_User_Pass) # the connection is done ok
media = mycam.create_media_service() # Media Service is ok

#Get The video source configurations
configurations_list = media.GetVideoSourceConfigurations() # Ok I get the Video Source configuration I wanted to select on id 0
video_source_configuration = configurations_list[0]

好的,现在我将视频源存储在 video_source_configuration 中。如果我打印它,我可以正确获取信息:

{
    \'Name\': \'SOURCE_VIDEO\',
    \'UseCount\': 5,
    \'SourceToken\': \'0\',
    \'Bounds\': {
        \'x\': 0,
        \'y\': 0,
        \'width\': 1820,
        \'height\': 720
    },
    \'_value_1\': None,
    \'Extension\': None,
    \'token\': \'0\',
    \'_attr_1\': {
}
}

即使我修改例如宽度或高度,我也可以毫无问题地执行此操作

video_source_configuration.width = 640
video_source_configuration.height = 420

request = media.create_type(\'SetVideoSourceConfiguration\')

request.Configuration = video_source_configuration

request.ForcePersistence = True

media.SetVideoSourceConfiguration(request)

但我不知道如何修改Video_Source_Configuration 使其旋转90 或270 度。我已阅读函数media.GetVideoSourceConfigurationOptios() 并得到以下回复:

{
    \'BoundsRange\': {
        \'XRange\': {
            \'Min\': 0,
            \'Max\': 1280
        },
        \'YRange\': {
            \'Min\': 0,
            \'Max\': 720
        },
        \'WidthRange\': {
            \'Min\': 0,
            \'Max\': 1280
        },
        \'HeightRange\': {
            \'Min\': 0,
            \'Max\': 720
        }
    },
    \'VideoSourceTokensAvailable\': [
        \'0\'
    ],
    \'Extension\': {
        \'_value_1\': [
            <Element {http://www.onvif.org/ver10/schema}Rotate at 0x243b6f4d2c0>
        ],
        \'Rotate\': None,
        \'Extension\': None
    },
    \'_attr_1\': None
}

我想我需要修改 Extension 字段和 Rotate 属性,但是阅读文档我不知道该怎么做。

    标签: python onvif


    【解决方案1】:

    我做了更多的测试。

    首先,我尝试使用 python 2.7 和 python-onvif library 代替。但没有成功。

    首先我发现了不同之处,当我收到 SetVideoSourceConfiguration 的请求时,我得到了以下结果:

    >>> request = media.create_type('SetVideoSourceConfiguration')
    >>> request
    (SetVideoSourceConfiguration){
       Configuration =
          (VideoSourceConfiguration){
             Name = None
             UseCount = None
             _token = ""
             SourceToken = None
             Bounds =
                (IntRectangle){
                   _x = ""
                   _y = ""
                   _width = ""
                   _height = ""
                }
             Extension =
                (VideoSourceConfigurationExtension){
                   Rotate =
                      (Rotate){
                         Mode =
                            (RotateMode){
                               value = None
                            }
                         Degree = None
                         Extension = <empty>
                      }
                   Extension = <empty>
                }
          }
       ForcePersistence = None
     }
    

    阅读本文,我尝试做以下事情:

    1. 获取当前视频源配置:

      vidsource = media.GetVideoSourceConfigurations()[0] 视频源 (视频源配置){ _token = "0" 名称 = "VIDEO_SOURCE" 使用次数 = 5 源令牌 = "0" 界限= (整数矩形){ _y = 0 _width = 1280 _x = 0 _高度 = 720 } }

    2. 将其所有值复制到 request.Configuration。

      request.Configuration.Name = vidsource.Name request.Configuration.UseCount = vidsource.UseCount request.Configuration._token = vidsource._token request.Configuration.Bounds = vidsource.Bounds

    3. 然后更改请求轮换模式:

      request2.Configuration.Extension.Rotate.Mode.value='ON'

    4. 但是,如果我尝试发送请求,则会收到错误请求错误。

      media.SetVideoSourceConfiguration(请求) 回溯(最近一次通话最后): 文件“”,第 1 行,在 文件“C:\Python27\lib\site-packages\onvif\client.py”,第 32 行,已包装 引发 ONVIFError(err) onvif.exceptions.ONVIFError: 未知错误: (400, u'Bad Request')

    5. 我尝试重复相同的步骤,但发送信息而不修改request.Configuration.Extension.Rotate.Mode.value,只有度字段,然后设备接受旋转,但它不起作用。

      request.Configuration.Extension.Rotate.Mode.value=无 request.Configuration.Extension.Rotate.Degree = 90 media.SetVideoSourceConfiguration(请求)

      现在,当我获得视频源配置时,会出现旋转字段:

       >>> media.GetVideoSourceConfigurations()
      [(VideoSourceConfiguration){
         _token = "0"
         Name = "VIDEOSOURCE"
         UseCount = 5
         SourceToken = "0"
         Bounds =
            (IntRectangle){
               _y = 0
               _width = 1280
               _x = 0
               _height = 720
            }
         Extension[] =
            (Extension){
               Rotate[] =
                  (Rotate){
                     Mode[] =
                        "OFF",
                  },
            },
       }]
      

      但是旋转模式始终处于“关闭”状态,我无法更改它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      相关资源
      最近更新 更多