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/9 20:08:52

Java 学习路线:零基础到实战,小白收藏这篇就够了

一、Java 基础&#xff08;1-2 个月&#xff09; &#xff08;一&#xff09;环境搭建与语法基础&#xff08;2-3 周&#xff09; JDK 安装与配置&#xff1a;熟练掌握 Java Development Kit&#xff08;JDK&#xff09;的下载、安装以及环境变量的配置&#xff0c;确保 Java…

作者头像 李华
网站建设 2026/6/9 18:50:46

停止检索!新增4本On Hold期刊被踢,12月WOS期刊目录更新!

2025年12月15日&#xff0c;科睿唯安本年度第十二次更新Web of Science核心期刊目录。与上次更新相比&#xff0c;本期SCI/SSCI目录共3本期刊发生变动&#xff0c;ESCI/AHCI目录共78本期刊发生变动&#xff0c;详情如下&#xff1a;图片来源&#xff1a;科睿唯安常见期刊变动形…

作者头像 李华
网站建设 2026/6/9 18:49:43

Arbess从基础到实践(18) - 集成GitPuk实现Java项目自动化构建并Docker部署

Arbess 是一款国产开源免费的 CI/CD 工具&#xff0c;支持免费私有化部署。本文将详细介绍如何安装配置使用GitPuk、Docker、Arbess系统&#xff0c;使用流水线拉取GitPuk源码实现前后端项目自动化构建和Docker容器部署。 1、GitPuk 安装与配置 GitPuk为Tiklab DevOps下一款国…

作者头像 李华
网站建设 2026/6/9 17:39:33

情绪需要节拍拯救!《节奏医生》:在魔性旋律中,坏心情一键清零

《节奏医生》是一款由7th Beat Games开发的单键节奏音游&#xff0c;已于12月7日上线。玩家化身实习医生&#xff0c;依据患者心跳的节拍&#xff0c;在音乐第 七拍精准敲击空格键进行除颤&#xff0c;成功即为“治愈”。游戏核心玩法虽然简单&#xff0c;只需一个按键&…

作者头像 李华