ONVIF相机更改快照分辨率(getSnaphotUri)

时间:2016-04-01 20:32:41

标签: python onvif python-onvif

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

但是决议并不是完整的' 720我的相机可以实现。流式传输时会得到。快照只有640x352或其他东西。

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

我尝试使用getSnapshotUri(令牌)生成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

我得到以下打印出来的很长时间,所以我把它放在一个pastebin中。

http://pastebin.com/Wfe4CPLy

没有关于JPEG的内容。有H264分辨率,所以我知道相机可以以更高的分辨率进行视频。但是,获取快照的uri仍然只有较低的分辨率。

2 个答案:

答案 0 :(得分:0)

快照分辨率由JPEG视频编码器配置 在media.wsdl嵌入式文档中写道:

  

<强> GetSnapshotUri
  描述:客户端使用GetSnapshotUri命令从设备获取JPEG快照。 [...]。   URI可用于通过获取JPEG图像   HTTP GET操作。图像编码将始终为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)

根据相机的容量,编码器配置之间的某些组合可能无法实现。

答案 1 :(得分:0)

您可以使用VLC python插件播放相机Feed。 它还提供了名为video_take_snapshot()

的屏幕截图方法

我确信,它会拍摄视频分辨率的快照,因此如果您通过onvif更改视频分辨率,vlc会自动调整这些更改。

here

了解有关video_take_snapshot()的更多信息