RP-NDI-iXML_2019

proposal for iXML protocol support in NDI:NDI-iXML

This page contains a technical proposal which is not currently a published or formal standard. If you have comments or feedback on the content of this proposal PLEASE contact us with your contribution.  This proposal makes strong references to the publish specification of the iXML 2.10 protocol and also of the future iXML 3.0 protocol (not yet published)

 

The NDI IP Video protocol SDK does not currently offer any guidance on provision for metadata describing the function or labelling of audio  / video essence, or for the association of multiple streams as a family-group for object-based media production, something which will become an important feature of next generation content delivery.

 

However, NDI has multiple real time metadata mechanisms which could easily carry this information, and another industry standard (iXML) exists which already covers the basic functionality required.  This document is an attempt to standardise support for iXML in order to prevent different implementations by each vendor by way of a recommended practice technical note.

 

Basic Premise:

The focus is based on the need of an NDI Sender to markup essence in a highly standardised and widely deployed protocol, covering topics including track names, and functions as well as groups of streams sharing a family UID which are associated by other descriptive iXML metadata.

 

This document standardises a mechanism for embedding industry standard iXML messages within NDI Streams.

 

The objectives are to allow the following scenarios:

- Support for iXML metadata sent as NDI Connection Metadata for a standalone stream which describes the essence

- Support for iXML metadata which provides position and scaling metadata for upstream compositing systems

- Support for iXML metadata sent as NDI Connection Metadata which provides linkage between multiple streams as a family set

 

The iXML Standard is straightforward and very well understood with virtually no ambiguity about message purpose, syntax and implementation. Although it was originally designed for production audio files, feeding into postproduction, It is very well suited to implementation in real time NDI video streams to supplement the native ndi metadata. In this case, the word 'FILE' in the iXML specification applies equally to 'STREAM' in NDI.

 

In this proposal, the iXML data is sent using real time (non frame embedded) metadata messages already defined in the NDI Protocol - the same ones used for PTZ control of cameras, and tally information, using the outer XML tag 'iXML'

 

It is also possible to send iXML using the embedded (frame based) NDI Metadata stream, which is carried along with each video or audio packet, also using the iXML tag where appropriate.

 

The Examples shown below are highly simplified, showing only the iXML fields which are specific to these workflows.  It is anticipated that implementors will try to provide much more complete iXML constructs:

 

NDIlib_metadata_frame_t meta_data

meta_data.p_data =

<iXML>

     <TRACK_LIST>

          <TRACK_COUNT>5</TRACK_COUNT>

          <TRACK>

               <CHANNEL_INDEX>0</CHANNEL_INDEX>

               <NAME>SDICAM1</NAME>

               <FUNCTION>VIDEO-PRIMARY</FUNCTION>

          </TRACK>

         <TRACK>

               <CHANNEL_INDEX>1</CHANNEL_INDEX>

               <INTERLEAVE_INDEX>1</INTERLEAVE_INDEX>

               <NAME>ENGLISH COMMENTARY</NAME>

               <FUNCTION>MIX</FUNCTION>

          </TRACK>

         <TRACK>

               <CHANNEL_INDEX>2</CHANNEL_INDEX>

               <INTERLEAVE_INDEX>2</INTERLEAVE_INDEX>

               <NAME>FRENCH COMMENTARY</NAME>

               <FUNCTION>MIX</FUNCTION>

          </TRACK>

         <TRACK>

               <CHANNEL_INDEX>3</CHANNEL_INDEX>

               <INTERLEAVE_INDEX>3</INTERLEAVE_INDEX>

               <NAME>Ambient-Mid</NAME>

               <FUNCTION>M-MID_SIDE</FUNCTION>

          </TRACK>

          <TRACK>

               <CHANNEL_INDEX>4</CHANNEL_INDEX>

               <INTERLEAVE_INDEX>4</INTERLEAVE_INDEX>

               <NAME>Ambient-Side</NAME>

               <FUNCTION>S-MID_SIDE</FUNCTION>

          </TRACK>

     </TRACK_LIST>

     <GEOMETRY>

          <POSITION>

               <HORIZONTAL>0.0000</HORIZONTAL>

               <VERTICAL>0.0000</VERTICAL>

          </POSITION>

          <HCOVERAGE>1.0000</HCOVERAGE>

     </GEOMETRY>

     <FILE_SET>

          <TOTAL_FILES>6</TOTAL_FILES>

          <FAMILY_UID>MTIPMX17654200508051445053840000</FAMILY_UID>

          <FAMILY_NAME>Yankees vs Raiders</FAMILY_NAME>

          <FILE_SET_INDEX>A</FILE_SET_INDEX> (Z-Index for compositing - ie, background)

              <FILE_SET_FAMILY>

                  <MEMBER>SELF</MEMBER>

                  <MEMBER>INGEST (SDICAM2)</MEMBER>

                  <MEMBER>INGEST (SDICAM3)</MEMBER>

                  <MEMBER>CGCOMPUTER (LOWER3rd)</MEMBER>

                  <MEMBER>CGCOMPUTER (CHANNELBUG)</MEMBER>

                  <MEMBER>CGCOMPUTER (SCOREBOARD)</MEMBER>

            </FILE_SET_FAMILY>

     </FILE_SET>

</iXML>

This represents the connection metdata for the primary NDI Stream an end device might connect to. It describes the stream itself and also other associated NDI Streams which can be attached to the primary stream in an object-based media workflow. In this case it describes 3 more streams of CG overlays, and also another 2 main video shots from other cameras.

 

 

meta_data.p_data =

<iXML>

     <TRACK_LIST>

          <TRACK_COUNT>1</TRACK_COUNT>

          <TRACK>

               <CHANNEL_INDEX>0</CHANNEL_INDEX>

               <NAME>LOWER3rd</NAME>

               <FUNCTION>VIDEO-OVERLAY</FUNCTION>

          </TRACK>

       </TRACK_LIST>

     <GEOMETRY>

          <POSITION>

               <HORIZONTAL>0.2000</HORIZONTAL>

               <VERTICAL>0.9000</VERTICAL>

          </POSITION>

          <HCOVERAGE>0.6000</HCOVERAGE>

    </GEOMETRY>

     <FILE_SET>

          <TOTAL_FILES>6</TOTAL_FILES>

          <FAMILY_UID>MTIPMX17654200508051445053840000</FAMILY_UID>

          <FAMILY_NAME>Yankees vs Raiders</FAMILY_NAME>

          <FILE_SET_INDEX>B</FILE_SET_INDEX> (Z-Index for compositing - ie, background)

              <FILE_SET_FAMILY>

                  <MEMBER>SELF</MEMBER>

                  <MEMBER>INGEST (SDICAM1)</MEMBER>

                  <MEMBER>INGEST (SDICAM2)</MEMBER>

                  <MEMBER>INGEST (SDICAM3)</MEMBER>

                  <MEMBER>CGCOMPUTER (CHANNELBUG)</MEMBER>

                  <MEMBER>CGCOMPUTER (SCOREBOARD)</MEMBER>

            </FILE_SET_FAMILY>

     </FILE_SET>

</iXML>

 

This represents the connection metdata for one of the CG NDI Streams.  In this case it indicates that it's z-index (File Set Index) is B (ie layer 2) and that this video overlay should be positioned 20% from the left, 90% from the top and that it should cover 60% of the horizontal width of the parent video background.  During the stream it is also possible to send modifications to the geometry with follow up NDI Metadata messages.  A compositor receiving this stream and its parent can now superimpose this on top in the position defined by the sender.

 

 

 

Another example here allows the use of iXML for general stream metadata, describing the content, GPS location and other information about the stream including contact details for the source of the stream.

 

NDIlib_metadata_frame_t meta_data

meta_data.p_data =

<iXML>

     <LOCATION>

        <LOCATION_NAME>London Bridge</LOCATION_NAME>

        <LOCATION_GPS>51.508067, -0.087688</LOCATION_GPS>

     </LOCATION>

      <USER>

             <FULL_TITLE>LOND_BRGD_OB_22/12/19</FULL_TITLE>

             <DIRECTOR_NAME>Harrison Tweed</DIRECTOR_NAME>

             <PRODUCTION_NAME>BBC News</PRODUCTION_NAME>

            <PRODUCTION_EMAIL>OBTruck1AZZ5@bbc.co.uk</PRODUCTION_EMAIL>

             <PRODUCTION_PHONE>07791401245</PRODUCTION_PHONE>

       </USER>

</iXML>

 

 

An NDI Sending Device would send NDI-iXML messages (to connected clients) on an NDI 'send' it has created using the  NDIlib_send_send_metadata() message. In practice basic fixed iXML metadata should be registered as NDI Connection metadata to the stream, so it is sent out automatically when a new receiver connects.

 

An NDI Receiving Device would receive NDI-iXML messages from the device it has connected to using the NDIlib_recv_capture_v2() message.

 

 

 

If you have any questions, or you would like to engage Sienna for NDI Consultancy or Custom Development, please contact info @ sienna.tv