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;
}
}
}