es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Oferta SDP WebRTC

Estoy tratando de ejecutar el comando sdm.devices.commands.CameraLiveStream.GenerateWebRtcStream en una Nest Battery Cam que solo admite transmisiones WebRTC. La solicitud debe ser como sigue:

POST /enterprises/$project-id/devices/$device-id:executeCommand
{
“command” : “sdm.devices.commands.CameraLiveStream.GenerateWebRtcStream”,
“params” : {
“offerSdp” : “$offerSdp”
}
}

Según otra pregunta respondida, el siguiente código genera una oferta SDP correcta que es aceptada por Google:

const myPeerConnection = new RTCPeerConnection

myPeerConnection.createDataChannel(“dataSendChannel”);

myPeerConnection.createOffer({offerToReceiveAudio:!0,offerToReceiveVideo:!0}).then(function(offer) {
return myPeerConnection.setLocalDescription(offer);
})
.then(function() {
console.log(myPeerConnection.localDescription.sdp + “\n”);
})
.catch(function(reason) {
console.log(“Ocurrió un error, por lo tanto, manejar la falla de conexión”);
});

¿Alguien tiene alguna idea de cómo “generar” a partir del último código el $offerSdp para insertarlo en el primer código?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para generar el parámetro $offerSdp para el comando sdm.devices.commands.CameraLiveStream.GenerateWebRtcStream, puedes utilizar la propiedad localDescription.sdp del objeto RTCPeerConnection de la siguiente manera:

    1. Crea un nuevo objeto RTCPeerConnection y establece su descripción local llamando a los métodos createOffer() y setLocalDescription() con las opciones para recibir video y audio:
    const myPeerConnection = new RTCPeerConnection();
    
    myPeerConnection.createOffer({ offerToReceiveAudio: true, offerToReceiveVideo: true })
      .then(function(offer) {
        return myPeerConnection.setLocalDescription(offer);
      })
      .catch(function(reason) {
        console.log("Ocurrió un error, así que maneja la falla de conexión");
      });
    
    1. Espera a que la conexión se establezca y luego registra el localDescription.sdp:
    myPeerConnection.onicecandidate = function(event) {
      if (event.candidate === null) {
        console.log(myPeerConnection.localDescription.sdp);
        // Utiliza este valor como parámetro '$offerSdp' para el comando sdm.devices.commands.CameraLiveStream.GenerateWebRtcStream
      }
    };
    
    1. Una vez que se dispare el evento onicecandidate con un candidato nulo, el offerSdp se puede utilizar de la siguiente manera:
    const project_id = 'tu-id-de-proyecto';
    const device_id = 'tu-id-de-dispositivo';
    const offerSdp = myPeerConnection.localDescription.sdp;
    
    fetch(`https://smartdevicemanagement.googleapis.com/v1/enterprises/${project_id}/devices/${device_id}:executeCommand`, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        command: 'sdm.devices.commands.CameraLiveStream.GenerateWebRtcStream',
        params: {
          offerSdp: offerSdp,
        },
      }),
    })
      .then(response => response.json())
      .then(data => console.log(data));
    

Comments are closed.