webrtc中m74版本C++启动ulpfec
WebRTC中的ULPFEC是一种前向纠错技术,用于在网络传输过程中减少丢包率和延迟。在m74版本中,可以通过以下步骤启动ULPFEC:
在PeerConnectionFactory::CreatePeerConnection()函数中创建RtpTransceiver对象。
使用RtpTransceiver对象的SetCodecPreferences()方法设置使用的编解码器。例如:
webrtc::RtpTransceiverInit transceiver_config; transceiver_config.direction = webrtc::RtpTransceiverDirection::kSendRecv; std::vector<webrtc::RtpCodecCapability> codecs; codecs.emplace_back(webrtc::RtpCodecCapability::CreatePayloadTypeSpecificCapability( "VP8", 96, 0, 0)); transceiver_config.send_encodings.emplace_back(webrtc::RtpEncodingParameters()); transceiver_config.send_encodings.back().codec_payload_type = 96; transceiver_config.send_encodings.back().fec = webrtc::FecParameters(webrtc::FecMechanism::kUlpFec); transceiver_config.stream_ids.emplace_back("stream_id"); transceiver_config.codecs = codecs; auto transceiver = pc->AddTransceiver(cricket::MediaType::MEDIA_TYPE_VIDEO, rtc::Optional<std::string>(), {transceiver_config});
这里,我们使用VP8编解码器,并启用了ULPFEC。
在PeerConnectionObserver的OnAddStream()回调函数中,添加一个新的VideoTrack,同时将其关联到对应的MediaStream中:
void OnAddStream(rtc::scoped_refptr<webrtc::MediaStreamInterface> stream) override { auto video_track = stream->GetVideoTracks()[0]; video_track->AddOrUpdateSink(renderer_.get(), rtc::VideoSinkWants()); }
这样,ULPFEC就成功启动了。需要注意的是,启用ULPFEC会增加一定的带宽开销,因此应根据实际情况进行配置和优化。
相关学习资料推荐,点击下方链接免费报名,先码住不迷路~】
音视频免费学习地址:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发
【免费分享】音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击788280672加群免费领取~
