news 2026/6/19 16:20:27

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/19 11:54:40

Linux SSH隧道代理转发及多层转发

描述 SSH 协议是 Linux 系统中使用较为频繁的协议之一&#xff0c;通常用于远程管理主机或服务器&#xff0c;默认使用 22 端口&#xff0c;可类比 Windows 系统中的 telnet&#xff08;23 端口&#xff09;&#xff0c;这里要介绍的是 ssh 除了远程连接外的另一强大特性&…

作者头像 李华
网站建设 2026/6/19 12:26:03

Codebuddy使用CloudBase MCP辅助AI编码基于Spec工作流开发的坦克大战小游戏

目录引言一、什么是基于Spec的工作流二、基于Spec的工作流实现方式1、专为规范驱动设计的IDE2、集成规范驱动功能的工具或插件三、实践开发坦克大战小游戏1、IDE Codebuddy插件安装CloudBase MCP2、需求澄清3、技术方案设计4、任务分解5、技术实现总结引言 在上一篇文章《浅谈…

作者头像 李华
网站建设 2026/6/19 12:29:29

Java真的不行了,一天收到586份简历

这是小红书上一位招聘Java的人事发布的Java人员找工作现状。 Java以前有多火&#xff0c;现在就有多难挤进这条赛道&#xff0c;岗位越来越少&#xff0c;就业人越来越多&#xff0c;技术越来越新&#xff0c;时代越来越进步&#xff0c;这十分要求还在传统Java道路上的人&…

作者头像 李华
网站建设 2026/6/19 12:26:16

“N皇后”问题解法

C实现N皇后问题&#xff08;回溯法详解OJ适配&#xff09;一、核心问题分析不同行&#xff1a;由于每个皇后占一行&#xff0c;可简化为“逐行放置”&#xff08;每行仅放一个皇后&#xff09;不同列&#xff1a;同一列不能有两个皇后不同对角线&#xff1a;主对角线&#xff0…

作者头像 李华
网站建设 2026/6/19 13:54:14

Part 11|模块划分并非越细越好,关键在于明确职责边界

在明确要从业务边界开始拆系统之后&#xff0c;我很快遇到了一个新的现实问题&#xff1a;业务边界清楚了&#xff0c;但模块到底要拆到什么程度&#xff1f;一开始&#xff0c;我其实很容易走向一个极端&#xff1a; 既然要清晰&#xff0c;那就尽量拆细一点。 但真正把模块往…

作者头像 李华