RTP 使用 udp 进行数据传输,udp 是不能保证,数据包一定可以到达的,也不提供时序。同时还有 MTU 限制。
RTCP 用来配合 RTP 提供,传输报告,会话建立和退出。
有几关键问题:
1,udp 怎么建立
2, 声音定时器多少时间传输入一次
3, 丢包问题
下面使用 Wireshark 对比 Baresip 源码来进行分析。
/** * \page GenericAudioStream Generic Audio Stream * * Implements a generic audio stream. The application can allocate multiple * instances of a audio stream, mapping it to a particular SDP media line. * The audio object has a DSP sound card sink and source, and an audio encoder * and decoder. A particular audio object is mapped to a generic media * stream object. Each audio channel has an optional audio filtering chain. * *<pre> * write read * | /|\ * \|/ | * .------. .---------. .-------. * |filter|<--| audio |--->|encoder| * '------' | | |-------| * | object |--->|decoder| * '---------' '-------' * | /|\ * | | * \|/ | * .------. .-----. * |auplay| |ausrc| * '------' '-----' *</pre> */ /** * Audio transmit/encoder * * \verbatim Processing encoder pipeline: . .-------. .-------. .--------. .--------. .--------. | | | | | | | | | | | |O-->| ausrc |-->| aubuf |-->| resamp |-->| aufilt |-->| encode |---> RTP | | | | | | | | | | | ' '-------' '-------' '--------' '--------' '--------' \endverbatim * */ /** * Audio receive/decoder * \verbatim Processing decoder pipeline: .--------. .-------. .--------. .--------. .--------. |\ | | | | | | | | | | | |<--| auplay |<--| aubuf |<--| resamp |<--| aufilt |<--| decode |<--- RTP |/ | | | | | | | | | | '--------' '-------' '--------' '--------' '--------' \endverbatim */