<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.globalmmcs.org/xgsp-av"

   xmlns:xs="http://www.w3.org/2001/XMLSchema"

   xmlns="http://www.globalmmcs.org/xgsp-av" >
   

 <!-- ActivateSession & DeactivateSession Methods -->

  <xs:element name="ActiveSession">
        <xs:annotation>
        <xs:documentation>activate/deactive Audio/Video Session in A/V Session Server</xs:documentation>
        </xs:annotation>
      <xs:complexType>
         <xs:sequence>
         <xs:element name="SessionID" type="xs:string"/>
         <xs:element name="Active" type="xs:boolean"/>
         <xs:element name="Communities" type="AGCommunity"/>
    </xs:sequence>
    </xs:complexType>
</xs:element>
    <xs:element name="ActiveSessionReply">
    <xs:annotation>
        <xs:documentation>reply to the ActiveSession command</xs:documentation>
    </xs:annotation>
    <xs:complexType>
    <xs:sequence>
        <xs:element name="SessionID"/>
        <xs:element name="Result"/>
        <xs:element name="Reason" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

<!-- Create & Destroy VideoMixer Methods -->


<xs:element name="VideoMixer">
    <xs:annotation>
        <xs:documentation>create/Destory a VideoMixer</xs:documentation>
    </xs:annotation>
    <xs:complexType>
        <xs:sequence>
        <xs:element name="SessionID" type="xs:string"/>
        <xs:element name="MixerID" type="xs:string"/>
        <xs:element name="Active" type="xs:boolean">
        <xs:annotation>
            <xs:documentation>true: create/modify this mixer; false: destroy this mixer</xs:documentation>
        </xs:annotation>
</xs:element>
<xs:element ref="Client" maxOccurs="4"/>
</xs:sequence>
</xs:complexType>
</xs:element>


<xs:element name="SetVideoMixerReply">
    <xs:annotation>
    <xs:documentation>reply to the VideoMixer</xs:documentation>
    </xs:annotation>
    <xs:complexType>
    <xs:sequence>
        <xs:element name="SessionID" type="xs:string"/>
        <xs:element name="Result" type="xs:string"/>
        <xs:element name="Reason" type="xs:string" minOccurs="0"/>
        </xs:sequence>
        </xs:complexType>
        </xs:element>

<!-- Join/Leave Session Methods -->

<xs:element name="JoinSession">

       <xs:complexType>

          <xs:sequence>

             <xs:element name="ClientID" type="xs:string"/>

             <xs:element name="SessionID" type="xs:string"/>

             <xs:element name="ClientMediaDes" minOccurs="0">

                 <xs:complexType>

                    <xs:sequence>

                        <xs:element ref="MediaDes" maxOccurs="2"/>

                    </xs:sequence>

                 </xs:complexType>

             </xs:element>

          </xs:sequence>

       </xs:complexType>

</xs:element>

 

<xs:element name="LeaveSession">

       <xs:complexType>

          <xs:sequence>

             <xs:element name="ClientID" type="xs:string"/>

             <xs:element name="SessionID" type="xs:string"/>

             <xs:element name="LeaveReason" type="xs:string" minOccurs="0"/>

          </xs:sequence>

       </xs:complexType>

</xs:element>

 

<xs:element name="SessionSignalResponse">

       <xs:complexType>

          <xs:sequence>

             <xs:element name="ClientID" type="xs:string"/>

             <xs:element name="ResponseType">

                 <xs:simpleType>

                    <xs:restriction base="xs:string">

                       <xs:enumeration value="Join-Reply"/>

                       <xs:enumeration value="Leave-Reply"/>

                       <xs:enumeration value="Modify-Reply"/>

                    </xs:restriction>

                 </xs:simpleType>

             </xs:element>

             <xs:element name="ResponseResult">

                 <xs:simpleType>

                    <xs:restriction base="xs:string">

                       <xs:enumeration value="OK"/>

                       <xs:enumeration value="Refuse"/>

                    </xs:restriction>

                 </xs:simpleType>

             </xs:element>

             <xs:element name="SessionMedia" minOccurs="0">

                 <xs:complexType>

                    <xs:sequence>

                       <xs:element ref="MediaDes" maxOccurs="2"/>

                    </xs:sequence>

                 </xs:complexType>

             </xs:element>

          </xs:sequence>

       </xs:complexType>

   </xs:element>

 

<!-- StreamEvent  -->

<xs:element name="StreamEvent">
    <xs:annotation>
        <xs:documentation>AV Stream Event</xs:documentation>
    </xs:annotation>
    <xs:complexType>
        <xs:sequence>
        <xs:element name="EventType">
        <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:enumeration value="NewStreamEvent"/>
            <xs:enumeration value="ByeEvent"/>
            <xs:enumeration value="PassiveToActiveEvent"/>
            <xs:enumeration value="ActiveToPassiveEvent"/>
        </xs:restriction>
    </xs:simpleType>
    </xs:element>
    <xs:element name="MediaType">
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:enumeration value="video"/>
            <xs:enumeration value="audio"/>
        </xs:restriction>
    </xs:simpleType>
    </xs:element>
    <xs:element name="UserName" type="xs:string"/>
    <xs:element name="SSRC" type="xs:string"/>
    <xs:element name="Description" type="xs:string"/>
    <xs:element name="ImagePath" type="xs:string"/>
    </xs:sequence>
</xs:complexType>
</xs:element>

<!-- Request Stream Messages -->

<xs:element name="RequestAllStream">

    <xs:annotation>

        <xs:documentation>a late-join client requests for the complete stream list</xs:documentation>

    </xs:annotation>

    <xs:complexType>

    <xs:sequence>

        <xs:element name="SessionID" type="xs:string"/>

        <xs:element name="ClientID" type="xs:string"/>

    </xs:sequence>

    </xs:complexType>

</xs:element>

 

<xs:element name="RequestAllStreamReply">

    <xs:complexType>

    <xs:sequence>

        <xs:element name="SessionID" type="xs:string"/>

        <xs:element name="ClientID" type="xs:string"/>

        <xs:element name="StreamList">

    <xs:complexType>

    <xs:sequence>

        <xs:element ref="StreamEvent" maxOccurs="unbounded"/>

    </xs:sequence>

    </xs:complexType>

    </xs:element>

    </xs:sequence>

    </xs:complexType>

</xs:element>

 

<!-- Video Stream Selection Message -->

<xs:element name="VideoSourceSelection">

    <xs:complexType>

    <xs:sequence>

        <xs:element name="SessionID" type="xs:string"/>

        <xs:element name="ClientID" type="xs:string"/>

        <xs:element name="Active" type="xs:boolean">

        <xs:annotation>

            <xs:documentation>true: means subscribe; false: mean unsubscribe</xs:documentation>

        </xs:annotation>

        </xs:element>

        <xs:element name="VideoSource">

    <xs:complexType>

    <xs:sequence>

        <xs:element name="UserName" type="xs:string"/>

        <xs:element name="SSRC" type="xs:string"/>

        <xs:element name="Description" type="xs:string"/>

    </xs:sequence>

    </xs:complexType>

    </xs:element>

    </xs:sequence>

    </xs:complexType>

</xs:element>

 

<!-- Audio Stream Selection Message -->

<xs:element name="AudioSourceMute">

    <xs:annotation>

        <xs:documentation>Mute/unmute audio streams</xs:documentation>

    </xs:annotation>

    <xs:complexType>

    <xs:sequence>

        <xs:element name="SessionID" type="xs:string"/>

        <xs:element name="ClientID" type="xs:string"/>

        <xs:element name="Mute" type="xs:boolean">

    <xs:annotation>

        <xs:documentation>true: mute/ false: unmute</xs:documentation>

    </xs:annotation>

    </xs:element>

   <xs:element name="AudioSource">

        <xs:complexType>

        <xs:sequence>

            <xs:element name="UserName" type="xs:string"/>

            <xs:element name="SSRC" type="xs:string"/>

            <xs:element name="Description" type="xs:string"/>

        </xs:sequence>

        </xs:complexType>

    </xs:element>

    </xs:sequence>

    </xs:complexType>

</xs:element>

 

<!-- Role Set Message -->

<xs:element name="SetRole">

    <xs:annotation>

        <xs:documentation>Set the roles in A/V Session </xs:documentation>

    </xs:annotation>

    <xs:complexType>

    <xs:sequence>

        <xs:element name="SessionID"/>

        <xs:element name="AVApplication">

            <xs:simpleType>

              <xs:restriction base="xs:string">

                <xs:enumeration value="Video"/>

                <xs:enumeration value="Audio"/>

            </xs:restriction>

            </xs:simpleType>

        </xs:element>

        <xs:element name="UserID" type="xs:string"/>

        <xs:element name="Role">

            <xs:simpleType>

            <xs:restriction base="xs:string">

                <xs:enumeration value="Audio-Speaker"/>

                <xs:enumeration value="Audio-Listener"/>

                <xs:enumeration value="Video-Presenter"/>

                <xs:enumeration value="Video-View"/>

            </xs:restriction>

            </xs:simpleType>

        </xs:element>

    </xs:sequence>

</xs:complexType>

</xs:element>


<xs:element name="SessionStatusReport">
     <xs:annotation>
        <xs:documentation>session server report </xs:documentation>
    </xs:annotation>
    <xs:complexType>
    <xs:sequence>
        <xs:element name="SessionReport" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>


<xs:element name="SessionReport">
    <xs:annotation>
        <xs:documentation>session report content</xs:documentation>
    </xs:annotation>
    <xs:complexType>
    <xs:sequence>
        <xs:element name="SessionID" type="xs:string"/>
        <xs:element name="SessionStatusInfo">
        <xs:complexType>
        <xs:sequence>
            <xs:element name="CurParticipant"/>
            <xs:element name="Pastparticipant"/>
        </xs:sequence>
        </xs:complexType>
    </xs:element>
    </xs:sequence>
    </xs:complexType>
</xs:element>



</xs:schema>