news 2026/6/9 23:57:01

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/6/10 19:12:40

silvaco学习记录(九)GaNdiode的瞬态正弦波信号仿真

最近在看微波注入信号的方面文章&#xff0c;发现常用的就是阶跃信号和正弦波信号&#xff0c;在atlas中阶跃信号可以很方便的直接加在电极上&#xff0c;但当我学习到正弦波信号的时候&#xff0c;耗费了很长时间&#xff0c;我起初在手册里看到了sin相关的语句&#xff0c;在…

作者头像 李华
网站建设 2026/6/10 13:09:02

基于SpringBoot的超能驾校线上学习管理系统的设计与实现(毕业设计项目源码+文档)

课题摘要在驾培行业数字化转型加速、传统驾校学习管理存在 “理论学习碎片化、练车预约低效、考核进度不透明、教学数据难统计” 的痛点背景下&#xff0c;基于 SpringBoot 的超能驾校线上学习管理系统构建具有重要的行业与用户价值&#xff1a;从学员层面&#xff0c;系统整合…

作者头像 李华
网站建设 2026/6/10 13:45:58

基于大数据的电子产品销售数据分析系统源码设计与文档

前言在电子产品市场竞争加剧、销售数据呈爆炸式增长的背景下&#xff0c;传统销售分析存在 “数据维度割裂、实时性差、预测精度低、决策支撑弱” 的痛点&#xff0c;难以满足企业精准洞察市场、优化产销策略的需求。基于大数据的电子产品销售数据分析系统构建具有重要的商业与…

作者头像 李华