// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// This file was auto-generated by the vanadium vdl tool.

// Source: media.vdl
package io.v.x.media_sharing;


public interface MediaSharingClient  {

    
    

    
    /**
 * DisplayURL will cause the server to display whatever media is at
 * the given URL.  The server will rely on the ContentType response
 * header it gets when fetching the url to decide how to display
 * the media.
*/
    void displayUrl(io.v.v23.context.VContext context, final java.lang.String url) throws io.v.v23.verror.VException;
    void displayUrl(io.v.v23.context.VContext context, final java.lang.String url, io.v.v23.Options vOpts) throws io.v.v23.verror.VException;

    
    

    
    /**
 * DisplayBytes will cause the server to display whatever media is
 * sent in the stream.  In the case of audio or movie media, the
 * media should be played while the data is streaming.  The mediaType
 * can be used by the server to decide how to display the media.
*/
    io.v.v23.vdl.ClientStream<byte[], java.lang.Void, java.lang.Void> displayBytes(io.v.v23.context.VContext context, final java.lang.String mediaType) throws io.v.v23.verror.VException;
    io.v.v23.vdl.ClientStream<byte[], java.lang.Void, java.lang.Void> displayBytes(io.v.v23.context.VContext context, final java.lang.String mediaType, io.v.v23.Options vOpts) throws io.v.v23.verror.VException;

}
