93 lines
3.3 KiB
C#
93 lines
3.3 KiB
C#
// Copyright (c) Microsoft Corporation.
|
|
// Licensed under the MIT License.
|
|
|
|
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.Events;
|
|
|
|
namespace Microsoft.MixedReality.WebRTC.Unity
|
|
{
|
|
/// <summary>
|
|
/// Unity event corresponding to a new video stream being started.
|
|
/// </summary>
|
|
[Serializable]
|
|
public class VideoStreamStartedEvent : UnityEvent<IVideoSource>
|
|
{ };
|
|
|
|
/// <summary>
|
|
/// Unity event corresponding to an on-going video stream being stopped.
|
|
/// </summary>
|
|
[Serializable]
|
|
public class VideoStreamStoppedEvent : UnityEvent<IVideoSource>
|
|
{ };
|
|
|
|
/// <summary>
|
|
/// Endpoint for a WebRTC remote video track.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// Setting this on a video <see cref="MediaLine"/> will enable the corresponding transceiver to receive.
|
|
/// A remote track will be exposed through <see cref="VideoTrack"/> once a connection is established.
|
|
/// The video track can optionally be displayed locally with a <see cref="VideoRenderer"/>.
|
|
/// </remarks>
|
|
[AddComponentMenu("MixedReality-WebRTC/Video Receiver")]
|
|
public class VideoReceiver : MediaReceiver
|
|
{
|
|
/// <summary>
|
|
/// Remote video track receiving data from the remote peer.
|
|
///
|
|
/// This is <c>null</c> until <see cref="MediaLine.Transceiver"/> is set to a non-null value
|
|
/// and a remote track is added to that transceiver.
|
|
/// </summary>
|
|
public RemoteVideoTrack VideoTrack { get; private set; }
|
|
|
|
/// <summary>
|
|
/// Event raised when the video stream started.
|
|
///
|
|
/// When this event is raised, the followings are true:
|
|
/// - The <see cref="Track"/> property is a valid remote video track.
|
|
/// - The <see cref="MediaReceiver.IsLive"/> property is <c>true</c>.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// This event is raised from the main Unity thread to allow Unity object access.
|
|
/// </remarks>
|
|
public VideoStreamStartedEvent VideoStreamStarted = new VideoStreamStartedEvent();
|
|
|
|
/// <summary>
|
|
/// Event raised when the video stream stopped.
|
|
///
|
|
/// When this event is raised, the followings are true:
|
|
/// - The <see cref="Track"/> property is <c>null</c>.
|
|
/// - The <see cref="MediaReceiver.IsLive"/> property is <c>false</c>.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// This event is raised from the main Unity thread to allow Unity object access.
|
|
/// </remarks>
|
|
public VideoStreamStoppedEvent VideoStreamStopped = new VideoStreamStoppedEvent();
|
|
|
|
|
|
/// <inheritdoc/>
|
|
public override MediaKind MediaKind => MediaKind.Video;
|
|
|
|
/// <inheritdoc/>
|
|
public override MediaTrack Track => VideoTrack;
|
|
|
|
/// <inheritdoc/>
|
|
protected internal override void OnPaired(MediaTrack track)
|
|
{
|
|
var remoteVideoTrack = (RemoteVideoTrack)track;
|
|
Debug.Assert(VideoTrack == null);
|
|
VideoTrack = remoteVideoTrack;
|
|
VideoStreamStarted.Invoke(VideoTrack);
|
|
}
|
|
|
|
/// <inheritdoc/>
|
|
protected internal override void OnUnpaired(MediaTrack track)
|
|
{
|
|
Debug.Assert(track is RemoteVideoTrack);
|
|
Debug.Assert(VideoTrack == track);
|
|
VideoTrack = null;
|
|
VideoStreamStopped.Invoke(VideoTrack);
|
|
}
|
|
}
|
|
}
|