// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.media.sessions2;

using fuchsia.media;

/// All information required by the media session registry service to
/// register a player so that clients may observe its status and control
/// it.
type PlayerRegistration = table {
    /// The domain on which the player exists. Unset if it is the native
    /// Fuchsia domain.
    1: domain Domain;
    /// The usage of the player's audio output. By default, this is assumed
    /// to be MEDIA.
    2: usage fuchsia.media.AudioRenderUsage;
};

/// `Publisher` publishes media players so they may be discovered and
/// controlled by clients who have permission to do so.
@discoverable
closed protocol Publisher {
    strict Publish(resource struct {
        player client_end:Player;
        registration PlayerRegistration;
    }) -> (struct {
        session_id SessionId;
    });
};
