Aprendizagem reimpressa:
quando ambas as extremidades abrem a comunicação de áudio e vídeo, uma das partes envia ativamente um convite como uma oferta e a outra parte espera passivamente pelo convite da oferta para responder como uma resposta.
Fluxo no código:
Oferecer:
- offerForConstraints, retorno de chamada <etapa 1.1> após obter sdp.
- 1.1. didCreateSessionDescription
- 1.1.1. Se houver um erro, retorne o erro diretamente para a camada superior, se sim, continue na <etapa 1.1.2>.
- 1.1.2. setLocalDescription set sdp, retorno de chamada <etapa 1.1.2.1>.
- 1.1.2.1 didSetSessionDescriptionWithError Se houver um erro, retorne o erro diretamente para a camada superior.
1.2 Gerar msg de acordo com RTCSdpType do sdp, chamar sendSignalingMessage para enviar para atendimento remoto através do servidor de sinalização.
1.3. setMaxBitrateForPeerConnectionVideoSender define a taxa de bits máxima para envio de vídeo.
Responder:
- Depois de receber o sdp de Offer, chame setRemoteDescription e, em seguida, chame de volta <Etapa 1.1>.
-
1.1. didSetSessionDescriptionWithError
-
1.1.1. Se houver um erro, retorne o erro diretamente para a camada superior, se sim, continue na <etapa 1.1.2>.
-
1.1.2. callback answerForConstraints <etapa 1.1.2.1>, passe o sdp obtido por answerForConstraints.
-
1.1.2.1 didCreateSessionDescription
-
1.1.2.1.1 Se houver um erro, retorne o erro diretamente para a camada superior, se sim, continue na <etapa 1.1.2.1.2>.
-
1.1.2.1.2 setLocalDescription Define o sdp obtido de answerForConstraints, callback <etapa 1.1.2.1.2.1>.
-
1.1.2.1.2.1 didSetSessionDescriptionWithError Se houver um erro, retorne o erro diretamente para a camada superior. Isso mesmo, nenhum outro processamento é feito porque localDescription foi definido.
**1.1.2.2** 根据sdp的RTCSdpType生产msg,调用sendSignalingMessage通过信令服务器发送给远程offer。
- **1.1.2.3** setMaxBitrateForPeerConnectionVideoSender设置视频发送最大码率。
1
2
Oferta:
- Depois de receber o sdp de Offer, chame setRemoteDescription e, em seguida, chame de volta <Etapa 1.1>.
- 1.1 didSetSessionDescriptionWithError Se houver um erro, retorne o erro diretamente para a camada superior.
Resumo
Do que foi dito acima, podemos ver como o código é tonto. O principal motivo é que didSetSessionDescriptionWithError é reutilizado em vários lugares em retornos de chamada. Então, o nojento código oc é fedido e longo, e cada nome de método é tão longo que assusta as pessoas.
Estou cansado de escrever acima 1.1, 1.2 e assim por diante.
Resuma o processo:
offer first chama offerForConstraints para obter seu próprio offerSdp, setLocalDescription(offerSdp), envia o offerSdp para a resposta remota e define a taxa de bits máxima do vídeo que ele envia.
answerDepois de receber a ofertaSdp, setRemoteDescription(offerSdp). answerForConstraints obtém seu próprio answerSdp, setLocalDescription(answerSdp), envia o answerSdp para a oferta e, ao mesmo tempo, define a taxa de bits máxima do vídeo que ele envia.
Após a oferta receber o answerSdp, setRemoteDescription(answerSdp).
Muitas das chamadas de API WebRTC mencionadas acima geram retornos de chamada, e os retornos de chamada podem retornar erros. Neste momento, os erros devem ser tratados. Geralmente, os erros são passados para a camada superior e, em seguida, toda a sessão é fechada.