背景
WebRTC目前支持VP8、VP9、H264、AV1的video编解码器,如果在建立P2P连接之前不改变编解码器顺序,那么VP8总是排在最前面,也就是优先级最高,如果对端也支持VP8,那么VP8将会被选作你们之前视频传输的编解码器
改变Video编解码器顺序
void SRTCPeerConnectionImpl::ChangeVideoCodecPreferences(
const std::string& mimeType) {
RTC_DCHECK(_peerConnectionFactory);
auto codecs = _peerConnectionFactory->GetRtpSenderCapabilities(
cricket::MediaType::MEDIA_TYPE_VIDEO).codecs;
std::vector<webrtc::RtpCodecCapability> newCodecs;
for (auto iter = codecs.begin(); iter != codecs.end();) {
if (iter->mime_type() == mimeType) {
newCodecs.push_back(*iter);
iter = codecs.erase(iter);
} else {
++iter;
}
}
newCodecs.insert(newCodecs.end(), codecs.begin(), codecs.end());
auto transceivers = _peerConnection->GetTransceivers();
for (auto& transceiver : transceivers) {
if (transceiver->media_type() == cricket::MediaType::MEDIA_TYPE_VIDEO) {
transceiver->SetCodecPreferences(newCodecs);
}
}
}
上面的代码就是将传入的mimeType放置到首位,注意这个函数的调用要在CreatOffer之前,其中mimeType可以是以下值:
- video/H264
- video/VP8
- video/VP9
- video/AV1X