webrtc-sdp编码信息协商

简要

        webrtc中采用sdp协议进行会话协商,sdp协商是通信数据的开始,理解sdp协议及webrtc对sdp的处理非常重要,本文简单剖析了webrtc源码对于p2p双方编解码器不同时如何进行协商的过程,sdp协议是offer/answer模型,展示如下图。sdp协议对应的API:CreateOffer、CreateAnswer、SetLocalDescription、SetRemoteDescription。

一、 API

CreateOffer

        CreateOffer主要完成两件事:创建证书,将本地编解码器信息等设置到sdp结构中。

        获取本地编码器:GetSupportedFormats(),对于是否支持vp9和h264,在编译时可以添加参数:rtc_libvpx_build_vp9=true/false rtc_use_h264=true/false 进行设置,webrtc默认支持vp8编解码器。GetSupportedFormats 代码段如下:

std::vector<SdpVideoFormat> InternalEncoderFactory::GetSupportedFormats() const {

  std::vector<SdpVideoFormat> supported_codecs;
  supported_codecs.push_back(SdpVideoFormat(cricket::kVp8CodecName));
  for (const webrtc::SdpVideoFormat& format : webrtc::SupportedVP9Codecs())
    supported_codecs.push_back(format);
  for (const webrtc::SdpVideoFormat& format : webrtc::SupportedH264Codecs())
    supported_codecs.push_back(format);
  return supported_codecs;
}

CreateOffer设置编码器信息代码段如下:

std::unique_ptr<SessionDescription> MediaSessionDescriptionFactory::CreateOffer(
    const MediaSessionOptions& session_options,
    const SessionDescription* current_description) const {

  ... 获取本地支持的编解码器....
  AudioCodecs offer_audio_codecs;
  VideoCodecs offer_video_codecs;
  RtpDataCodecs offer_rtp_data_codecs;
  GetCodecsForOffer(current_active_contents, &offer_audio_codecs,
                    &offer_video_codecs, &offer_rtp_data_codecs);

...填充sdp audio/video content....
for (const MediaDescriptionOpti
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值