using System; using Unity.WebRTC; using UnityEngine; namespace Unity.RenderStreaming { /// /// /// public abstract class StreamReceiverBase : MonoBehaviour, IStreamReceiver { /// /// /// public RTCRtpTransceiver Transceiver => m_transceiver; /// /// /// public OnStartedStreamHandler OnStartedStream { get; set; } /// /// /// public OnStoppedStreamHandler OnStoppedStream { get; set; } /// /// /// public MediaStreamTrack Track => m_track; /// /// /// public bool isPlaying { get { if (string.IsNullOrEmpty(Transceiver.Mid)) return false; if (Transceiver.Sender.Track.ReadyState == TrackState.Ended) return false; return true; } } private RTCRtpTransceiver m_transceiver; private MediaStreamTrack m_track; /// /// /// /// /// public virtual void SetTransceiver(string connectionId, RTCRtpTransceiver transceiver) { if (connectionId == null) throw new ArgumentNullException("connectionId", "connectionId is null"); m_transceiver = transceiver; m_track = m_transceiver?.Receiver.Track; if (m_transceiver == null) OnStoppedStream?.Invoke(connectionId); else OnStartedStream?.Invoke(connectionId); } protected virtual void OnDestroy() { m_track?.Dispose(); m_track = null; } } }