news 2026/8/31 9:25:45

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/8/31 6:49:17

2025 年 12 月找靠谱中国 AI 智能体获客老师,麟哥难道不称职?

一、2025 ai 获客培训市场&#xff1a;讲师选择的核心参考维度2025 年 ai 智能体获客领域的技术迭代&#xff0c;正从通用大模型应用转向垂直场景深度适配。企业在筛选培训讲师时&#xff0c;已逐步跳出单纯的工具操作教学需求&#xff0c;更关注讲师的技术积累、知识体系完整性…

作者头像 李华
网站建设 2026/8/30 20:19:47

海报设计无从下手?这3个技巧让你告别空白画布

面对空白画布无从下手&#xff1f;或是设计出的海报总是少了点吸引力&#xff1f;在信息过载的今天&#xff0c;无论是活动宣传还是个人创作&#xff0c;好的海报设计能让信息传递事半功倍。作为经常需要制作各种宣传物料的设计爱好者&#xff0c;我总结出了三个特别实用的技巧…

作者头像 李华
网站建设 2026/8/30 23:30:41

FastAPI+VUE3创建一个项目的步骤模板(一)

先不细究功能细节&#xff0c;先把项目跑起来 一篇文章最多5606个字&#xff0c;因此同样分多P来记录 为fastapi准备环境 # 1. 创建项目文件夹 mkdir fastvue-todo cd fastvue-todo# 2. 创建并激活虚拟环境 (推荐) python -m venv venv # Windows: # venv\Scripts\activate # L…

作者头像 李华
网站建设 2026/8/31 15:49:23

带你搞懂BootLoader(四)-第三个BootLoader

这篇文章将带你写第三个BootLoader程序&#xff0c;对应的是以下那篇博文的第三种启动方式&#xff1a;应用程序(APP)存储在文件系统里面或者存储在一些非XIP的存储芯片上&#xff0c;BootLoader将APP复制到RAM指定地址&#xff0c;最后通过跳转指令转入RAM中执行APP 带你搞懂B…

作者头像 李华
网站建设 2026/8/30 23:52:10

风浪中的海上吊装控制,如何又稳又准?

山东大学&#xff08;威海&#xff09;陈原教授团队近期在Information Sciences期刊发表题为Passivity-based variable damped sliding mode control for cable-driven wave motion compensation device under hybrid disturbances的论文&#xff0c;论文被SCI和EI收录。海上补…

作者头像 李华
网站建设 2026/8/31 4:45:45

75亿去买理财,反而是摩尔线程最“诚实”的一刻

当所有人都在嘲讽摩尔线程“75 亿不搞研发&#xff0c;跑去吃银行利息”的时候&#xff0c;我反而觉得&#xff0c;这可能是它目前为止做过的最良心、也最真实的一次选择。原因很简单——如果你真正看懂了 A 股过去 20 年的历史&#xff0c;就会明白&#xff0c;钱老老实实躺在…

作者头像 李华