2016-04-01 78 views
1

私は静的スナップショットを取得するために私のカメラのURIを見つけるためにpython-onvifを使用しています。そしてそれはうまく動作し、私はスナップショットを得ることができます。ONVIFカメラ変更スナップショット解像度(getSnaphotUri)

しかし、解像度は私のカメラが達成できる「フル」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 

を走ったと私はペーストビンに入れて長くあった以下をプリントアウトします。

http://pastebin.com/Wfe4CPLy

JPEGについては何もありません。 H264の解像度があるので、私はカメラがより高い解像度でビデオを行うことができます知っている。しかし、getsnapshot uriはまだ低い解像度しか持っていません。

答えて

0

スナップショットの解像度は、JPEGビデオエンコーダによって設定されます。それが書かれているmedia.wsdl埋め込みドキュメントで

GetSnapshotUri
説明:クライアントデバイスからJPEGスナップショットを取得するためにGetSnapshotUriコマンドを使用します。 [...]。 URIは、 HTTP GET操作を通じてJPEG画像を取得するために使用できます。イメージのエンコーディングは、メディアプロファイルのエンコーディング設定に関係なく、常にJPEG になります。 のJpeg設定(解像度や品質など)は、 が適切な場合はプロファイルから取得できます。提供されるイメージは自動的に更新され、 はGetSnapshotUriの呼び出しとは独立しています。エンコーダ構成の間にいくつかのcombinaisonができない可能性がカメラの能力に応じて、

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) 

:あなたはこのように進むことができJPEGエンコーダの分解能を変更するために

+0

からvideo_take_snapshot()についての詳細を参照してください。これは安価なカメラにJPEGエンコーダがないことを意味しますか? 「H264」には1280x720の処理能力があるので、何とか完全なres JPEGを得ることができるはずです。しかし、p.Encoding never == 'JPEG'は何もしません。 – Nertskull

+0

なぜ私はONVIFフォーラムが 'GetSnaptshotUri'に解決引数を追加しなかったのか分かりませんか?これは特定の解決策を求める「自然な」方法のようです。ちなみに、H264エンコーダの設定にはいくつかのJPEGオプションがありますか? – mpromonet

+0

質問をすべてのエンコーダオプションで更新しました。しかし、基本的には、どこにもJPEGオプションはありません。 – Nertskull

0

VLC pythonプラグインを使用してカメラフィードを再生できます。 video_take_snapshot()

私は確かに、ビデオ解像度でスナップショットを取るので、onvifでビデオ解像度を変更すると、vlcは自動的にそれらの変更を適応させます。私は 'for' ループ、p.Encodingは常に 'H264' を返し、決して 'JPEG' を持って行うと

here

関連する問題