news 2026/4/22 21:43:26

webrtc 联播数据编码发送流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
webrtc 联播数据编码发送流程

文章目录

  • webrtc 联播数据编码发送流程
    • 1 创建 VideoSendStreamImpl
    • 2 创建RTPSenderVideo
    • 3 创建编码器
    • 4 编码后数据流向

webrtc 联播数据编码发送流程

1 创建 VideoSendStreamImpl

WebRtcVideoChannel::WebRtcVideoSendStream::RecreateWebRtcStream media/engine/webrtc_video_engine.h -> CreateVideoSendStream call/call.h 参数: config webrtc::VideoSendStream::Config config ebrtc::VideoEncoderConfig encoder_config -> CreateVideoStreamEncoder video/video_send_stream.h -> VideoStreamEncoder video/video_stream_encoder.h 备注: 这是只是创建了VideoStreamEncoder, 并没有创建真正的编码类 -> VideoSendStreamImpl::VideoSendStreamImpl() video/video_send_stream_impl.h

2 创建RTPSenderVideo

RtpVideoSenderInterface* RtpTransportControllerSend::CreateRtpVideoSender call/rtp_transport_controller_send.h -> RtpVideoSender::RtpVideoSender call/rtp_video_sender.h // 参数:const RtpConfig& rtp_config, -> std::vector<RtpStreamSender> CreateRtpStreamSenders call/rtp_video_sender.cc for (size_t i = 0; i < rtp_config.ssrcs.size(); ++i) { auto sender_video = std::make_unique<RTPSenderVideo>(video_config); rtp_streams.emplace_back(std::move(playout_delay_oracle), std::move(rtp_rtcp), std::move(sender_video)); } // 遍历rtp_config.ssrcs 创建:RtpStreamSender 创建RTPSenderVideo

3 创建编码器

VideoStreamEncoder::OnFrame video/video_stream_encoder.h -> VideoStreamEncoder::MaybeEncodeVideoFrame video/video_stream_encoder.h -> VideoStreamEncoder::ReconfigureEncoder() video/video_stream_encoder.h -> EncoderStreamFactory::CreateEncoderStreams media/engine/webrtc_video_engine.h 作用: 将 encoder_config 中的联播信息 设置到 std::vector<webrtc::VideoStream> streams -> 获取编码参数: VideoCodec codec; if (!VideoCodecInitializer::SetupCodec(encoder_config_, streams, &codec)) { RTC_LOG(LS_ERROR) << "Failed to create encoder configuration."; } 将streams 的联播信息 拷贝到 codec.simulcastStream[] -> VideoEncoder::InitEncode(const VideoCodec* codec_settings, const VideoEncoder::Settings& settings) modules/video_coding/codecs/h264/h264_encoder_impl.h // 1 将VideoCodec联播信息 设置到 h264编码器中 // 2 同时也会创建多个h264编码器 创建编码器用的主要联播参数是: encoder_config, 创建RTPSenderVideo 主要的联播参数是:webrtc::VideoSendStream::Config::RtpConfig rtp;

4 编码后数据流向

H264EncoderImpl::Encode modules/video_coding/codecs/h264/h264_encoder_impl.h -> VideoStreamEncoder::OnEncodedImage video/video_stream_encoder.h -> VideoSendStreamImpl::OnEncodedImage video/video_send_stream_impl.h -> RtpVideoSender::OnEncodedImage call/rtp_video_sender.h -> rtp_streams_[stream_index].sender_video->SendVideo // 不同编码的数据通过不同的RTPSenderVideo发送数据
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 11:28:43

day39模型的可视化和推理@浙大疏锦行

day39模型的可视化和推理浙大疏锦行 主要针对隐藏层神经元的个数进行了修改 # 实验 1: 原始配置 (隐藏层神经元 10) print(" 实验 1: 原始配置 (Hidden Size 10) ") model_base MLP(input_size4, hidden_size10, output_size3).to(device) time_base, acc_base,…

作者头像 李华
网站建设 2026/4/23 14:42:08

智慧校园建设三步走:选对平台是关键

✅作者简介&#xff1a;合肥自友科技 &#x1f4cc;核心产品&#xff1a;智慧校园平台(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员均有多…

作者头像 李华
网站建设 2026/4/23 11:29:23

基于SpringBoot大学生就业招聘系统(毕业设计项目源码+文档)

课题摘要在高校就业工作数字化转型加速、大学生求职与企业招聘存在 “信息不对称、匹配效率低、流程管控散、数据统计难” 的痛点背景下&#xff0c;基于 SpringBoot 的大学生就业招聘系统构建具有重要的教育与就业服务价值&#xff1a;从学生层面&#xff0c;系统整合企业招聘…

作者头像 李华
网站建设 2026/4/23 11:30:49

基于SpringBoot的博物馆管理系统(毕业设计项目源码+文档)

课题摘要在文博行业数字化转型加速、传统博物馆管理存在 “展品管理低效、参观体验单一、客流管控滞后、文物保护数据化不足” 的痛点背景下&#xff0c;基于 SpringBoot 的博物馆管理系统构建具有重要的文化保护与服务价值&#xff1a;从展品管理层面&#xff0c;系统整合文物…

作者头像 李华
网站建设 2026/4/22 5:40:11

基于SpringBoot的宠物店管理系统(毕业设计项目源码+文档)

课题摘要在宠物行业规模化发展、传统宠物店管理存在 “库存管控混乱、客户服务滞后、消费记录零散、营收统计低效” 的经营痛点背景下&#xff0c;基于 SpringBoot 的宠物店管理系统构建具有重要的商业与用户价值&#xff1a;从门店运营层面&#xff0c;系统整合宠物用品&#…

作者头像 李华