Acesso a objetos do MediaStream para emissores e assinantes por meio da API do Media Stream Available
É possível acessar o objeto MediaStream monitorando o mediaStreamAvailable evento disparado por editores e assinantes. A API “Media Stream Available” foi disponibilizada na versão 2.27.7; as versões anteriores precisarão usar a Acesso a objetos MediaStream para assinantes em versões anteriores à 2.27.7 guia cujo link está abaixo.
Observações importantes:
- Os objetos Publisher e Subscriber ainda devem ser usados para controlar todos os aspectos da Video API, como silenciar, desconectar e outros.
- O áudio será reproduzido tanto pelo elemento personalizado quanto pelo widget do Editor ou do Assinante. Os elementos personalizados devem estar com o som desativado para evitar eco.
- Os recursos de vídeo do Vonage no Chrome, como a silhueta e os controles de vídeo, não estarão disponíveis.
- O objeto MediaStream leva em conta quaisquer alterações causadas por Roteamento Adaptativo de Mídia. Quando o AMR faz a transição de uma sessão entre o retransmissor ponto a ponto e o Media Router, o
mediaStreamAvailableO evento entrega automaticamente a versão atualizadaMediaStream, de modo que sua renderização personalizada permaneça sincronizada sem a necessidade de intervenção adicional.
A seguir, apresentamos um exemplo dos hooks de contexto Session, Subscriber e Publisher do React utilizando a API Media Stream Available. Embora o exemplo utilize o React, a API Media Stream Available é independente de framework. Observe que o ouvinte deve ser acoplado imediatamente após a criação do publisher e dos subscribers, e não como parte do callback.
Componente de sessão
Copiar
const [subscriberStream, setSubscriberStreams] = useState([]);
async function subscribe(stream, session, options = {}) {
if (session) {
const subscriber = session.current.subscribe(stream, null, { ...options, insertDefaultUI: false });
subscriber.on('mediaStreamAvailable', ({ mediaStream }) => {
setSubscriberStreams((prev) => [...prev, { mediaStream, subscriber }]);
});
}
}
Subscriber Component
import { useEffect, useRef } from 'react';
const Subscriber = ({ subscriber, mediaStream }) => {
const videoRef = useRef(null);
useEffect(() => {
if (mediaStream) {
videoRef.current.srcObject = mediaStream;
}
}, [mediaStream]);
return (
);
}
export default Subscriber;
Publisher Component
import { useEffect, useRef } from 'react';
const Publisher = ({ publisher, mediaStream }) => {
const videoRef = useRef(null);
useEffect(() => {
if (mediaStream) {
videoRef.current.srcObject = mediaStream;
}
}, [mediaStream]);
return (
);
}
export default Publisher;