WebRTC 媒体概论

Overview

  • Audio Encode/decode(Opus, g.711), mixing, ASA, ASN, 3A(AGC, AEC, ANS), BNR, ASR, TTS. etc.

  • Video Encode/decode(H264, AV1), compose/annotation, watermarking, virtual background, video stream pub-sub

  • Sharing : slide audio, high frame

  • Adaptive Jitter buffer

  • Smooth sending(Pacer)

  • Recording

  • Device manage: audio device(mic, speaker), video device(camera, monitor)

  • Web Assembly, WebCodecs, Insertable stream support

RTP Extension

  • abs-send-time

  • abs-capture-time

  • mid

  • rid

  • rrid

  • transport-wide-cc-01

  • transport-wide-cc-02

  • color-space

  • playout-delay

  • video-content-type

  • video-timing

  • inband-cn

  • video-layers-allocation00

  • RTCP Extensions

  • NACK, PLI, FIR

  • REMB

  • Transport CC

  • FEC: ULP/FLEX FEC

  • RTX

refer to RTPExtensionType, RTCPPacketType, KeyFrameReqMethod and RtxMode

enum RTPExtensionType : int {
    kRtpExtensionNone,
    kRtpExtensionTransmissionTimeOffset,
    kRtpExtensionAudioLevel,
    kRtpExtensionCsrcAudioLevel,
    kRtpExtensionInbandComfortNoise,
    kRtpExtensionAbsoluteSendTime,
    kRtpExtensionAbsoluteCaptureTime,
    kRtpExtensionVideoRotation,
    kRtpExtensionTransportSequenceNumber,
    kRtpExtensionTransportSequenceNumber02,
    kRtpExtensionPlayoutDelay,
    kRtpExtensionVideoContentType,
    kRtpExtensionVideoLayersAllocation,
    kRtpExtensionVideoTiming,
    kRtpExtensionRtpStreamId,
    kRtpExtensionRepairedRtpStreamId,
    kRtpExtensionMid,
    kRtpExtensionGenericFrameDescriptor00,
    kRtpExtensionGenericFrameDescriptor = kRtpExtensionGenericFrameDescriptor00,
    kRtpExtensionGenericFrameDescriptor02,
    kRtpExtensionColorSpace,
    kRtpExtensionVideoFrameTrackingId,
    kRtpExtensionNumberOfExtensions  // Must be the last entity in the enum.
};

enum RTCPPacketType : uint32_t {
    kRtcpReport = 0x0001,
    kRtcpSr = 0x0002,
    kRtcpRr = 0x0004,
    kRtcpSdes = 0x0008,
    kRtcpBye = 0x0010,
    kRtcpPli = 0x0020,
    kRtcpNack = 0x0040,
    kRtcpFir = 0x0080,
    kRtcpTmmbr = 0x0100,
    kRtcpTmmbn = 0x0200,
    kRtcpSrReq = 0x0400,
    kRtcpLossNotification = 0x2000,
    kRtcpRemb = 0x10000,
    kRtcpTransmissionTimeOffset = 0x20000,
    kRtcpXrReceiverReferenceTime = 0x40000,
    kRtcpXrDlrrReportBlock = 0x80000,
    kRtcpTransportFeedback = 0x100000,
    kRtcpXrTargetBitrate = 0x200000
};

enum class KeyFrameReqMethod : uint8_t {
    kNone,     // Don't request keyframes.
    kPliRtcp,  // Request keyframes through Picture Loss Indication.
    kFirRtcp   // Request keyframes through Full Intra-frame Request.
};

enum RtxMode {
    kRtxOff = 0x0,
    kRtxRetransmitted = 0x1,     // Only send retransmissions over RTX.
    kRtxRedundantPayloads = 0x2  // Preventively send redundant payloads
                                // instead of padding.
};

Protocols