Webrtc音频编码并打包RTP包

  1. 创建G722编码器
rtc::scoped_refptr<AudioEncoderFactory> factory = CreateBuiltinAudioEncoderFactory();
std::unique_ptr<AudioEncoder> encoder = factory->MakeAudioEncoder(9, {"G722", 8000, 1}, absl::nullopt);

  1. 初始化参数
int    seqNum    = 0;
qint64 timestamp = 0;
int    ssrc      = 100;

  1. 编码操作(对pcm数据进行编码)
rtc::Buffer buffer;
AudioEncoder::EncodedInfo info = 
    encoder->Encode(0,
                rtc::ArrayView<const int16_t>((const int16_t *)pcm, pcmSize/2),
                &buffer);
     
/* 数据有效性判断 */           
if (info.encoder_type == AudioEncoder::CodecType::kOther)
    return;

  1. 打包为RTP
// 对于连续的音频包,需要连续的timestamp。
timestamp += sizeof(int16_t) * encoder->NumChannels() * encoder->RtpTimestampRateHz()/100;

/* 创建rtp包 */
RtpPacket packet(nullptr);
packet.SetPayloadType(payloadType);
packet.SetSequenceNumber(seqNum);
packet.SetTimestamp(timestamp);
packet.SetSsrc(ssrc);

uint8_t *payload = packet.SetPayloadSize(buffer.size());
/* 装载rtp包的payload内容 */
memcpy(payload, 
       (const uint8_t *)buffer.data(), 
       buffer.size());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值