Problème d'enregistrement à partir du périphérique Open ONVIF (Network Video Interface Forum)


90

Je travaille sur le projet Open Network Video Interface Forum-Java et je suis les étapes décrites dans le Guide du programmeur d'application ONVIF .

J'ai généré des sources à partir du site wsdlsfourni sur ONVIF. Je peux récupérer l'URI du flux en direct à l'aide du media.wsdl. Maintenant, j'ai un problème avec l'enregistrement. Les codes que j'ai essayés sont donnés ci-dessous:

RecordingService recording_ervice = new RecordingService();
RecordingPort record_port = recording_ervice.getRecordingPort();


BindingProvider bindingProvider = (BindingProvider) record_port;

// Add a security handler for the credentials
final Binding binding = bindingProvider.getBinding();
List<Handler> handlerList = binding.getHandlerChain();
if (handlerList == null) {
    handlerList = new ArrayList<Handler>();
}

handlerList.add(new RecordStream.SecurityHandler());
// binding.setHandlerChain(handlerList);

// Set the actual web services address instead of the mock service
Map<String, Object> requestContext = bindingProvider.getRequestContext();

requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://" + deviceip + "/onvif/media_service");
requestContext.put(BindingProvider.USERNAME_PROPERTY, user);
requestContext.put(BindingProvider.PASSWORD_PROPERTY, pass);

Recordings recordings = record_port.getRecordings();

Le code ci-dessus lors de l'exécution donne une erreur comme:

Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Method 'ns11:GetServiceCapabilities' not implemented: method name or namespace not recognized

J'ai également essayé avec le service multimédia, alors l'erreur est:

Exception in thread "main" com.sun.xml.internal.ws.client.ClientTransportException: The server sent HTTP status code 405: Method Not Allowed

5
notez que «enregistrement» est le service utilisé par les enregistreurs ONVIF: la plupart des caméras IP ne le prennent pas en charge. Je pense que vous devriez le vérifier dans les capacités de l'appareil, car il s'agit d'un service optionnel (dépend du profil pris en charge): onvif.org/ver10/device/wsdl/GetCapabilities . Une dernière note: dans la dernière ligne, vous assignez getRecordings () à "capabilities" ... en regardant onvif.org/onvif/ver10/recording.wsdl - je dirais que c'est le type de sortie pour GetServiceCapabilities (). Vérifiez-le aussi.
Sigismondo

1
les politiques de sécurité du serveur Web doivent être examinées, car la méthode semble exister dans le code mais n'est pas autorisée ou accessible par le client.
Ved le

D'accord avec Ved ... Quiconque implémente ce WSDL n'a pas implémenté certaines fonctionnalités ou l'espace de noms pointe vers une déclaration WSDL qui n'inclut pas la fonction. Personnellement, je suis un peu surpris par ce choix ONVIF de WSDL.

Réponses:


2

Lorsque vous avez essayé avec la source multimédia, vous avez apparemment demandé une action non autorisée car le serveur a renvoyé le code d'erreur 405. Soit la méthode est interdite d'utilisation, soit vous avez besoin d'informations d'identification pour utiliser la méthode.

Quant à Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Method 'ns11:GetServiceCapabilities' not implemented: method name or namespace not recognized, @Sigismondo a raison sur le fait que la plupart des caméras IP ne le prennent pas en charge. Vous aurez besoin d'une méthode d'enregistrement alternative (littérale et jeu de mots) pour enregistrer à partir d'une caméra IP.


1

Vous utilisez http://" + deviceip + "/onvif/media_servicepour accéder au service d'enregistrement, mais il s'agit d'un service media.wsdl . Ainsi, lorsque vous essayez d'appeler getRecordings sur le service multimédia, il semble normal que vous receviez une erreur.

L'URL du service recording.wsdl doit être http://" + deviceip + "/onvif/recording_service.

Afin d'obtenir l'URL correcte pour atteindre le service d'enregistrement, vous devez la demander à la méthode GetCapabilities du service devicemgmt.wsdl .


0

HTTP 405 - La ressource non autorisée se produit généralement dans IIS. Ce problème se produit si les conditions suivantes sont remplies:

  • Vous ne spécifiez pas le nom du fichier. Par exemple, vous ne spécifiez pas http: // Server / Web / ...

  • Le modèle d'objet de script (SOM) est activé.

  • Un événement DTC est appelé.

Ainsi, lorsque le SOM est activé, une balise <form> est insérée dans la page, la balise est invalide signifie qu'elle ne contient aucune action.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.