<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.21 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-alvestrand-avtcore-abs-capture-time-01" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.25.0 -->
  <front>
    <title abbrev="Abs capture timestamp">Absolute Capture Timestamp RTP header extension</title>
    <seriesInfo name="Internet-Draft" value="draft-alvestrand-avtcore-abs-capture-time-01"/>
    <author fullname="Harald Alvestrand">
      <organization>Google</organization>
      <address>
        <email>hta@google.com</email>
      </address>
    </author>
    <date year="2024" month="December" day="10"/>
    <area>Web and Internet Transport</area>
    <workgroup>Audio/Video Transport Core Maintenance</workgroup>
    <keyword>webrtc</keyword>
    <keyword>capture timestamp</keyword>
    <keyword>rtcweb</keyword>
    <abstract>
      <?line 42?>

<t>This document describes an RTP header extension that can be used to carry information
about the capture time of a video frame / audio sample, and include information that
allows the capture time to be estimated by the receiver when the frame may have passed
over multiple hops before reaching the receiver.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://alvestrand.github.io/id-abs-capture-timestamp/draft-alvestrand-avtcore-abs-capture-timestamp.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-alvestrand-avtcore-abs-capture-time/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Audio/Video Transport Core Maintenance Working Group mailing list (<eref target="mailto:avt@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/avt/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/avt/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/alvestrand/id-abs-capture-timestamp"/>.</t>
    </note>
  </front>
  <middle>
    <?line 50?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>When dealing with separate media streams originating from a single source, it is often
desirable to present these in such a fashion that media generated at the same time is presented
at the same time; the most well known form of this (between an audio stream and a video stream)
is called "lip-sync".</t>
      <t>In a simple setup with one source system, a single network hop and one destination system, this
is usually done by lining up RTP timestamps. However, when multiple hops and multiple systems
are involved, this task becomes more difficult; in particular, when one desires to synchronize
media from multiple sources with independent clocks, where the media may have traveled over
multiple network hops between the source and destination.</t>
      <t>This memo describes one mechanism for providing information to make such synchronization
possible.</t>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="applicability">
      <name>Applicability</name>
      <t>The Absolute Capture Time extension is used to stamp RTP packets with a NTP
timestamp showing when the first audio or video frame in a packet was originally
captured.</t>
      <t>Together with a round-trip-time estimate at the last hop, this extension allows a receiver
to estimate the offset between its own clock and the capturer's clock, thus providing
a way to translate the capture timestamp into a time in its own clock.</t>
      <t>One usage of this functionality is to provide a way to accomplish
audio-to-video synchronization when RTCP-terminating intermediate systems (e.g.
mixers) are involved.</t>
      <t>Another usage is to provide statistics on sender-to-recipient delay in applications with
multiple RTP hops without requiring clocks to be synchronized.</t>
      <t>In the terminology of <xref target="RFC7667"/>, the applicable scenarios are those where RTP is terminated
at an intermediate system: Selective Forwarding Middlebox (3.7) and Point to Multipoint using
RTCP-terminating MCU (3.9)</t>
      <t>Other scenarios such as the Media-Switching Mixer (3.6.2)  may be applicable if RTP header rewriting
is applied, so that per-hop information is isolated to the hop it is destined for</t>
      <t>Multicast scenarios are out of scope.</t>
    </section>
    <section anchor="absolute-capture-time">
      <name>Absolute Capture Time</name>
      <t><strong>Name:</strong>
"Absolute Capture Time"; "RTP Header Extension for Absolute Capture Time"</t>
      <t><strong>Formal name:</strong>
        <eref target="http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time">http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time</eref></t>
      <t><strong>Status:</strong>
This extension is defined here to allow for experimentation. Experience with the experiment has shown that it is useful; this draft therefore presents it to the
IETF for consideration of whether to standardize it or leave it as a proprietary
extension.</t>
      <section anchor="rtp-header-extension-format">
        <name>RTP header extension format</name>
        <section anchor="data-layout-overview">
          <name>Data layout overview</name>
          <t>Data layout of the shortened version of <tt>abs-capture-time</tt> with a 1-byte header
+ 8 bytes of data:</t>
          <artwork><![CDATA[
  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |  ID   | len=7 |     absolute capture timestamp (bit 0-23)     |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |             absolute capture timestamp (bit 24-55)            |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |  ... (56-63)  |
 +-+-+-+-+-+-+-+-+
]]></artwork>
          <t>Data layout of the extended version of <tt>abs-capture-time</tt> with a 1-byte header +
16 bytes of data:</t>
          <artwork><![CDATA[
  0                   1                   2                   3
  0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |  ID   | len=15|     absolute capture timestamp (bit 0-23)     |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |             absolute capture timestamp (bit 24-55)            |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |  ... (56-63)  |   estimated capture clock offset (bit 0-23)   |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |           estimated capture clock offset (bit 24-55)          |
 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 |  ... (56-63)  |
 +-+-+-+-+-+-+-+-+
]]></artwork>
        </section>
        <section anchor="data-layout-details">
          <name>Data layout details</name>
          <section anchor="absolute-capture-timestamp">
            <name>Absolute capture timestamp</name>
            <t>Absolute capture timestamp is the NTP timestamp of when the first frame in a
packet was originally captured. This timestamp <bcp14>MUST</bcp14> be based on the same clock
as the clock used to generate NTP timestamps for RTCP sender reports on the
capture system.</t>
            <t>It's not always possible to do an NTP clock readout at the exact moment of when
a media frame is captured. A capture system <bcp14>MAY</bcp14> postpone the readout until a
more convenient time. A capture system <bcp14>SHOULD</bcp14> have known delays (e.g. from
hardware buffers) subtracted from the readout to make the final timestamp as
close to the actual capture time as possible.</t>
            <t>This field is encoded as a 64-bit unsigned fixed-point number with the high 32
bits for the timestamp in seconds and low 32 bits for the fractional part. This
is also known as the UQ32.32 format and is what the RTP specification defines as
the canonical format to represent NTP timestamps.</t>
          </section>
          <section anchor="estimated-capture-clock-offset">
            <name>Estimated capture clock offset</name>
            <t>Estimated capture clock offset is the sender's estimate of the offset between
its own NTP clock and the capture system's NTP clock. The sender is here defined
as the system that owns the NTP clock used to generate the NTP timestamps for
the RTCP sender reports on this stream. The sender system is typically either
the capture system or a mixer.</t>
            <t>This field is encoded as a 64-bit two's complement <strong>signed</strong> fixed-point number
with the high 32 bits for the seconds and low 32 bits for the fractional part.
It's intended to make it easy for a receiver, that knows how to estimate the
sender system's NTP clock, to also estimate the capture system's NTP clock:</t>
            <artwork><![CDATA[
 Capture NTP Clock = Sender NTP Clock + Capture Clock Offset
]]></artwork>
            <t>If the estimated capture clock offset is not present (short format), it means
that the sending system does not have enough data to compute a clock offset.</t>
          </section>
        </section>
      </section>
      <section anchor="details-of-operation">
        <name>Details of operation</name>
        <section anchor="capture-system">
          <name>Capture system</name>
          <t>The capture system generates the timestamp as close as possible to the true
capture time. This may involve subtracting known delays in the capture pipeline
from the time at which the system clock is read.</t>
          <t>The capture time <bcp14>SHOULD</bcp14> be from the same clock as used to generate the NTP timestamp
in RTP Sender Reports (SR) (<xref target="RFC3550"/> section 6.4.1), and indicate this by setting
the "estimated capture clock offset" to zero; if this is not possible,
the "estimated capture clock offset" <bcp14>MUST</bcp14> indicate the offset between
the clock used for the capture timestamp and the clock used for RTP Sender Reports.</t>
          <t>When the media is not captured in real time, such as when sending stored media, the
sender can choose any reasonable start time; in that case, the offset between the
chosen start time and the NTP clock of the sender system <bcp14>MUST</bcp14> be encoded into the
"offset" value of the extension.</t>
          <t>The "capture" timestamp should then advance according to the natural progression of
the media; if this deviates from the NTP clock of the sender system, such as on a
reader stall, this change <bcp14>SHOULD</bcp14> be reflected in the "offset" value.</t>
        </section>
        <section anchor="intermediate-systems">
          <name>Intermediate systems</name>
          <t>An intermediate system <bcp14>MAY</bcp14> compute the outgoing capture clock offset as follows:</t>
          <ul spacing="normal">
            <li>
              <t>Start with the "estimated capture clock offset" from the incoming packet</t>
            </li>
            <li>
              <t>Add the estimated offset between the sender's NTP clock and the intermediate's NTP clock
(see <xref target="offset"/>)</t>
            </li>
          </ul>
          <t>This should give a reasonable estimate of the offset between the capture system's
clock and the NTP timestamps sent in SR blocks by the intermediate system.</t>
          <t>An intermediate system (e.g. mixer) <bcp14>MAY</bcp14> adjust these timestamps as needed. It
<bcp14>MAY</bcp14> also choose to rewrite the timestamps completely, using its own NTP clock as
reference clock, if it wants to present itself as a capture system for A/V-sync
purposes.</t>
        </section>
        <section anchor="end-systems">
          <name>End systems</name>
          <t>A receiver can use the same algorithm as intermediate systems in order to compute
the approximate time in the receiver's NTP clock at which the packet was generated.
This should be more comparable between source systems with different clocks than just using
the raw timestamp.</t>
          <t>A receiver <bcp14>MUST</bcp14> treat the first CSRC in the CSRC list of a received packet as if
it belongs to the capture system. If the CSRC list is empty, then the receiver
<bcp14>MUST</bcp14> treat the SSRC as if it belongs to the capture system. Mixers <bcp14>SHOULD</bcp14> put
the most prominent CSRC as the first CSRC in a packet's CSRC list.</t>
        </section>
      </section>
      <section anchor="offset">
        <name>Estimating the NTP clock offset</name>
        <t>The NTP clock offset can be calculated from an SR packet in the following way:</t>
        <ul spacing="normal">
          <li>
            <t>Take the NTP timestamp from the SR packet</t>
          </li>
          <li>
            <t>Subtract the arrival time of the SR packet, in the receiver's NTP clock</t>
          </li>
          <li>
            <t>Add half the estimated RTT between the sender and the receiver</t>
          </li>
        </ul>
        <t>The resulting number should be a reasonable approximation of the offset between the
two clocks, with positive numbers indicating that the sender's clock is running ahead,
and negative numbers indicate that the sender's clock is running behind.</t>
        <t>Note that this method is sensitive to a number of issues:</t>
        <ul spacing="normal">
          <li>
            <t>Clock drift means that you have to continuously monitor and update the offset</t>
          </li>
          <li>
            <t>RTT variance will cause variation in offset; a smoothed value should be used</t>
          </li>
          <li>
            <t>Asymmetric delays, if present, will cause biased estimates</t>
          </li>
        </ul>
        <t>This document is not normative about how the NTP clock offset is estimated.</t>
      </section>
      <section anchor="timestamp-interpolation">
        <name>Timestamp interpolation</name>
        <t>A sender <bcp14>SHOULD</bcp14> save bandwidth by not sending <tt>abs-capture-time</tt> with every
RTP packet. It <bcp14>SHOULD</bcp14> still send them at regular intervals (e.g. every second)
to help mitigate the impact of clock drift and packet loss. Mixers <bcp14>SHOULD</bcp14> always
send <tt>abs-capture-time</tt> with the first RTP packet after changing capture system.</t>
        <t>A receiver <bcp14>SHOULD</bcp14> memorize the capture system (i.e. CSRC/SSRC), capture
timestamp, and RTP timestamp of the most recently received <tt>abs-capture-time</tt>
packet on each received stream. It can then use that information, in combination
with RTP timestamps of packets without <tt>abs-capture-time</tt>, to extrapolate
missing capture timestamps.</t>
        <t>Timestamp interpolation works fine as long as there's reasonably low NTP/RTP
clock drift. This is not always true. Senders that detect "jumps" between its
NTP and RTP clock mappings <bcp14>SHOULD</bcp14> send <tt>abs-capture-time</tt> with the first RTP
packet after such a thing happening.</t>
      </section>
      <section anchor="year-2036-considerations">
        <name>Year 2036 considerations</name>
        <t><xref target="RFC5905"/> section 6 describes how the 32-bit unsigned seconds field should be
compared to a system clock, explaining how comparison of times works correctly when the
64-bit unsigned seconds field wraps in 2036 (the beginning of NTP era 1) provided
proper two's complement arithmetic is used for subtractions.</t>
        <t>For the purposes of this memo, it is sufficient to note that a timestamp represents
the closest timestamp in a relevant era.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This extension carries information that may allow an attacker to identify different
media streams on a connection. However, this information is already carried in the
RTP SSRC, which is not encrypted, so it is unlikely that much additional information
is exposed.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>If the WG decides that this extension should be registered as a standardized
extension, IANA is requested to perform the appropriate registration.</t>
      <t>If the WG decides that this is a private extension, the URL
http://www.webrtc.org/experiments/rtp-hdrext/abs-capture-time is used to
identify the extension.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC3550">
          <front>
            <title>RTP: A Transport Protocol for Real-Time Applications</title>
            <author fullname="H. Schulzrinne" initials="H." surname="Schulzrinne"/>
            <author fullname="S. Casner" initials="S." surname="Casner"/>
            <author fullname="R. Frederick" initials="R." surname="Frederick"/>
            <author fullname="V. Jacobson" initials="V." surname="Jacobson"/>
            <date month="July" year="2003"/>
            <abstract>
              <t>This memorandum describes RTP, the real-time transport protocol. RTP provides end-to-end network transport functions suitable for applications transmitting real-time data, such as audio, video or simulation data, over multicast or unicast network services. RTP does not address resource reservation and does not guarantee quality-of- service for real-time services. The data transport is augmented by a control protocol (RTCP) to allow monitoring of the data delivery in a manner scalable to large multicast networks, and to provide minimal control and identification functionality. RTP and RTCP are designed to be independent of the underlying transport and network layers. The protocol supports the use of RTP-level translators and mixers. Most of the text in this memorandum is identical to RFC 1889 which it obsoletes. There are no changes in the packet formats on the wire, only changes to the rules and algorithms governing how the protocol is used. The biggest change is an enhancement to the scalable timer algorithm for calculating when to send RTCP packets in order to minimize transmission in excess of the intended rate when many participants join a session simultaneously. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="64"/>
          <seriesInfo name="RFC" value="3550"/>
          <seriesInfo name="DOI" value="10.17487/RFC3550"/>
        </reference>
        <reference anchor="RFC5905">
          <front>
            <title>Network Time Protocol Version 4: Protocol and Algorithms Specification</title>
            <author fullname="D. Mills" initials="D." surname="Mills"/>
            <author fullname="J. Martin" initials="J." role="editor" surname="Martin"/>
            <author fullname="J. Burbank" initials="J." surname="Burbank"/>
            <author fullname="W. Kasch" initials="W." surname="Kasch"/>
            <date month="June" year="2010"/>
            <abstract>
              <t>The Network Time Protocol (NTP) is widely used to synchronize computer clocks in the Internet. This document describes NTP version 4 (NTPv4), which is backwards compatible with NTP version 3 (NTPv3), described in RFC 1305, as well as previous versions of the protocol. NTPv4 includes a modified protocol header to accommodate the Internet Protocol version 6 address family. NTPv4 includes fundamental improvements in the mitigation and discipline algorithms that extend the potential accuracy to the tens of microseconds with modern workstations and fast LANs. It includes a dynamic server discovery scheme, so that in many cases, specific server configuration is not required. It corrects certain errors in the NTPv3 design and implementation and includes an optional extension mechanism. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5905"/>
          <seriesInfo name="DOI" value="10.17487/RFC5905"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC7667">
          <front>
            <title>RTP Topologies</title>
            <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
            <author fullname="S. Wenger" initials="S." surname="Wenger"/>
            <date month="November" year="2015"/>
            <abstract>
              <t>This document discusses point-to-point and multi-endpoint topologies used in environments based on the Real-time Transport Protocol (RTP). In particular, centralized topologies commonly employed in the video conferencing industry are mapped to the RTP terminology.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7667"/>
          <seriesInfo name="DOI" value="10.17487/RFC7667"/>
        </reference>
      </references>
    </references>
    <?line 319?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Chen Xing, for writing the original version of this specification.</t>
      <t>Bernard Aboba and Jonathan Lennox, for helpful comments.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
AA==

-->

</rfc>
