2

我正在使用 python-onvif 查找相机的 URI 以获取静态快照。它工作正常,我可以得到快照。

但是分辨率不是我的相机可以达到的“完整”720。并且在流式传输时确实得到。快照只有 640x352 之类的。

如何告诉 ONVIF 以全分辨率拍摄快照?

我尝试使用 getSnapshotUri(token) 生成 URI 并放入具有最高分辨率的主配置文件的令牌,但我得到了相同的 URI 和相同的分辨率。

有没有办法获得全分辨率快照?

文档说它将使用“来自配置文件”的 jpeg 设置,但我不知道如何告诉它使用哪个配置文件或使用什么分辨率设置。

我不确定在这种情况下是否真的需要代码,但这就是我正在做的事情。以防它帮助某人

 from onvif import ONVIFCamera

 # Set up the camera object using the ONVIF port.
 mycam = ONVIFCamera('192.168.2.111', 8080, 'admin', 'pass', '/etc/onvif/wsdl/')


 #access media service
 media = mycam.create_media_service()                

 allProfiles = media.GetProfiles()
 mainProfile = media.GetProfile({'ProfileToken' : allProfiles[0]._token})

 snapshot = media.GetSnapshotUri({'ProfileToken' : mainProfile._token})

 print 'My Cam: ' + str(snapshot)

*****更新20160412

以下是要求提供的更多信息。

我跑了以下

for p in media.GetVideoEncoderConfigurations():
    print p

我得到了以下打印出来的很长的东西,所以我把它放在了一个粘贴箱里。

http://pastebin.com/Wfe4CPLy

没有关于 JPEG 的信息。H264 分辨率在那里,所以我知道相机可以拍摄更高分辨率的视频。但是getsnapshot uri仍然只有较低的分辨率。

4

1 回答 1

1

快照分辨率由 JPEG 视频编码器配置。
media.wsdl嵌入式文档中它是这样写的:

GetSnapshotUri
描述:客户端使用 GetSnapshotUri 命令从设备获取 JPEG 快照。[...]。URI 可用于通过 HTTP GET 操作获取 JPEG 图像。无论媒体配置文件中的编码设置如何,图像编码将始终为 JPEG。如果合适,可以从配置文件中获取 Jpeg 设置(如分辨率或质量)。提供的图像将自动更新,并且独立于对 GetSnapshotUri 的调用。

为了修改 JPEG 编码器的分辨率,您可以这样进行:

from onvif import ONVIFCamera

# Set up the camera object using the ONVIF port.
mycam = ONVIFCamera('192.168.2.111', 8080, 'admin', 'pass')

#access media service
media = mycam.create_media_service()                

# iterate on encoder configurations
for p in media.GetVideoEncoderConfigurations():
    if p.Encoding == "JPEG":
        print 'JPEG Encoder:' + p._token

        # get encoder options    
        options = media.GetVideoEncoderConfigurationOptions({'ConfigurationToken':p._token})
        print options.JPEG.ResolutionsAvailable

        # get encoder configuration
        cfg = media.GetVideoEncoderConfiguration({'ConfigurationToken':p._token})

        # select the resolution  
        cfg.Resolution = options.JPEG.ResolutionsAvailable[0]

        # update the encoder configuration
        request = media.create_type('SetVideoEncoderConfiguration')
        request.Configuration = cfg
        request.ForcePersistence = True
        media.SetVideoEncoderConfiguration(request)

根据相机容量,编码器配置之间的某些组合可能是不可能的。

于 2016-04-07T18:48:58.660 回答