
传输探索实践
文章平均质量分 75
P2P ,HTTP-FLV, 切片,传输,拥塞控制,SVC ,CDN RTC, WEBRTC DATACHANNEL ,低延迟,直播P2P 分发 入门与实战
优惠券已抵扣
余额抵扣
还需支付
¥59.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
等风来不如迎风去
AI领域初学者,AI+实时语音,AI+2/3D动画生成;AI+UE表演,AI+游戏NPC;音视频行业深耕多年,熟悉会议、直播、RTC,对在线教育、娱乐秀场等音视频端到端技术及系统架构有深入研究
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【Halo】封装plog为sdk.dll的对外api 方案2 :流式输出
文章摘要(150字): 本文介绍将plog日志库封装为sdk.dll的流式输出方案,完美兼容原生PLOG的<<操作符语法。通过LogStream类实现基于std::ostringstream的消息收集,在析构时输出完整日志。对比示例显示,DLL_LOGI_STREAM等宏可1:1替换PLOGI等原生调用,支持变量、复杂表达式和循环日志场景。方案保留调试信息并确保线程安全,同时支持流式和格式化两种输出方式,便于代码迁移。该设计解决了EXE与DLL统一日志管理问题,使跨模块日志输出与原生PLOG完全原创 2025-07-17 11:38:29 · 57 阅读 · 0 评论 -
【Halo】封装plog为sdk.dll的对外api 方案1 :格式化输出
本文介绍了一种DLL日志API设计方案,实现了EXE和DLL日志的统一管理。方案基于PLOG封装,提供线程安全的日志输出功能,支持C/C++调用。主要特点包括:统一日志文件输出、互斥锁保护、兼容现有代码、提供便捷函数和宏定义两种使用方式。实现步骤涉及在DLL项目中添加日志API文件,在EXE项目中初始化日志系统后即可使用。该方案便于调试DLL与EXE的交互过程,性能良好且易于维护扩展。原创 2025-07-17 10:59:46 · 35 阅读 · 0 评论 -
【Halo】视频传输前处理的改进
文章摘要:本文分析了CFVideoRecorder::read()函数的设计合理性,该函数集成了帧率控制、视频采集、本地预览和视频编码功能。这种设计在实时音视频应用中具有简化调用、保证时序一致性等优点,但也存在功能耦合度高、可能阻塞编码流程等问题。作者提出了两种优化方案:一是保持现有架构但优化内部实现,如增加异步预览和码率自适应控制;二是考虑分离采集和编码的更大改动。文章认为当前设计在低延迟场景下是合理且高效的,通过局部优化即可提升性能,无需大规模重构。原创 2025-07-17 10:53:05 · 31 阅读 · 0 评论 -
【c++】在const成员函数中使用mutex
这是一个C++编译错误,表明在cfvideorecorder2.cpp第844行尝试使用const std::mutex构造std::lock_guard,但lock_guard需要非const的mutex引用。主要原因是可能在const成员函数中使用mutex,解决方案包括:1)在mutex声明前添加mutable关键字;2)去掉函数的const修饰符;3)确保mutex为非const类型。错误提示显示类型转换丢失了限定符,需要调整mutex的可变性修饰。原创 2025-07-15 11:31:49 · 45 阅读 · 0 评论 -
【webrtc】gcc当前可用码率3:x264响应码率改变
本文介绍了WebRTC中基于GCC(Google Congestion Control)算法实现的x264动态码率控制机制。当网络条件变化时,GCC会计算出当前可用码率,并通过码率控制器通知x264编码器进行自适应调整。控制器采用三层策略:1)平滑码率调节避免剧烈波动;2)根据带宽智能调整分辨率;3)动态优化量化参数。控制器还支持分辨率分级配置,根据不同网络状况自动选择最佳分辨率、帧率和编码预设,同时确保关键帧请求等机制。这种自适应码率控制方案能够有效应对网络波动,提供最佳的视频质量体验。原创 2025-07-13 21:20:57 · 92 阅读 · 0 评论 -
【vs2022】 error C2338: Unicode support requires compiling with /utf-8
摘要:MFC项目"echo"因引用DLL头文件导致UTF-8编译报错,解决方案包括:1)移除Unicode字符;2)在VS项目属性或CMake中添加/utf-8编译选项;3)使用宽字符版本。实际应用中,启用UTF-8会引发大量警告。建议将x264相关代码从echo项目移出,改为通过回调机制与DLL交互,避免直接暴露DLL内部方法,从而简化项目构建复杂度。(149字)原创 2025-07-13 21:01:12 · 58 阅读 · 0 评论 -
【webrtc】gcc当前可用码率2:设置阈值通知码率改变
WebRTC GCC码率决策机制分析 WebRTC的GCC拥塞控制算法在码率调整上采用不对称阈值设计:检测到当前码率低于上次的75%(25%下降)时会立即响应,但需要高于150%(50%上升)才提升码率。这种设计目的是: 下降敏感:快速应对网络恶化,避免丢包 上升保守:防止过快增加码率导致新拥塞 分析指出当前150%的上升阈值可能过于严格,建议调整为125%,同时将下降阈值改为80%,以更平衡地响应网络变化。关键代码显示,系统通过比较当前与历史码率差值百分比来决策是否触发调整事件。原创 2025-07-13 20:41:54 · 51 阅读 · 0 评论 -
【Fargo】发送一个rtp包的过程3:为什么媒体包发送端检测到扩展,接收端检测不到
文章摘要: RTP包发送与接收端扩展头不一致问题分析表明,发送端构造了预留空间但未真正填充扩展头的"假包",而接收端按标准解析时发现扩展位为1但扩展头区域为空。通过代码分析确认数据中确实不存在0xBEDE扩展头标识。解决方案是采用CreateBasicRtpPacketWithExtensions方法替代原构造方式,该方法严格遵循RFC标准,一次性正确构造包结构,避免内存重排和后续修改,确保发送接收两端解析一致。改进方法在标准兼容性、性能、调试友好性等方面具有明显优势,建议替换原构造逻辑原创 2025-07-12 19:25:50 · 52 阅读 · 0 评论 -
【Fargo】发送一个rtp包的过程2:为什么媒体包发送端检测到扩展,接收端检测不到
本文分析了RTP包发送与接收过程中出现的数据不一致问题。通过对比发送端和接收端的日志数据,发现接收端将扩展头误认为载荷,导致载荷大小增加16字节而扩展头信息丢失。进一步分析表明,该问题并非由网络传输引起,而是源于解析逻辑错误或内存指针计算问题。建议采取以下措施:1)添加详细的十六进制数据dump功能;2)在关键解析步骤增加调试输出;3)验证指针偏移量计算是否正确。通过深度调试发现,发送端扩展头被正确解析而接收端未识别,表明可能存在内存处理错误或解析逻辑缺陷。最终需要通过详细的数据对比和指针追踪来定位具体问题原创 2025-07-11 09:07:27 · 216 阅读 · 0 评论 -
【Fargo】发送一个rtp包的过程1:怎么统一加twcc序号
摘要:分析发现老版本WebRTC中Pacer和探测包处理机制存在问题。发送端数据显示媒体包(SSRC:111999)和探测包(SSRC:1234)的RTP序号及扩展头处理正常,但接收端仅能正确解析探测包。媒体包出现扩展头缺失问题,表现为载荷部分数据丢失(原666字节包仅剩余基本头信息)。对比发现探测包能完整传输所有扩展信息(包括MID、Abs Send Time等),而媒体包的扩展头全部读取失败。问题可能源于打包器入队前的数据处理差异。原创 2025-07-10 22:49:55 · 55 阅读 · 0 评论 -
【RTP】基于mediasoup的RtpPacket的H.264打包、解包和demo 2:含扩展
本文探讨了基于mediasoup的RTP扩展实现问题及解决方案。文章首先对比了不含扩展的成熟方案与WebRTC自设计扩展的差异,指出带扩展测试时出现的崩溃现象。通过引入扩展数据容器解决了生命周期问题,并分析了崩溃原因,主要包括扩展数据内存管理不当、缓冲区不足和异常处理缺失等。关键修复包括:1)使用vector管理扩展数据生命周期;2)增加内存缓冲区并初始化;3)增强异常处理机制。文章还提供了调试建议和完整的RTP扩展实现方案,支持TWCC拥塞控制、绝对发送时间、MID/RID标识和帧标记等扩展功能,适用于S原创 2025-06-21 23:18:12 · 103 阅读 · 0 评论 -
【Fargo】mediasoup发送3:RTC::Transport基类、RtpTransportControllerSend、webrtc::PacedSender进一步分析
本文分析了RTC::Transport基类与PacedSender的集成方式。RTC::Transport仅定义回调接口,并未直接使用PacedSender,真正的调度由RtpTransportControllerSend完成。要实现平滑发送,建议在PacedVideoSenderGo中持有PacedSender实例,覆写回调方法将RTP包交给PacedSender排队,并通过定时处理实现发送调度。改造要点包括:初始化PacedSender,将发送请求从直接调用改为EnqueuePacket,并通过Proc原创 2025-06-21 19:42:35 · 51 阅读 · 0 评论 -
【Fargo】mediasoup发送2:码率分配、传输基类设计及WebRtcTransport原理
摘要: 本文深入分析了mediasoup的Transport层架构设计,揭示了其作为"媒体传输协调器"的核心作用。Transport层通过分层解耦的设计,实现了以下功能:1) 协调Producer/Consumer的RTP传输;2) 管理拥塞控制模块;3) 执行分层码率分配算法。文章详细解读了DistributeAvailableOutgoingBitrate()的分层分配逻辑,以及IncreaseLayer()和ApplyLayers()的职责分离设计。这种架构既利用了WebRTC底层原创 2025-06-21 17:53:45 · 93 阅读 · 0 评论 -
【Fargo】x264的intra refresh 3: 采集、编码到 RTP打包
H.264 Intra Refresh与RTP打包调试分析 核心发现 Intra Refresh默认未启用:当前系统配置未打开b_intra_refresh选项 RTP打包兼容性:即使启用Intra Refresh,也不会影响RFC 6184标准的RTP打包流程 技术要点 Intra Refresh产生的帧仍属标准H.264 NAL单元(通常为Type 1非IDR slice) 需要确保解码端收到SPS/PPS参数集 建议定期发送IDR帧以支持随机接入 数据流分析 编码流程: 采集帧后直接编码 标记关键帧原创 2025-06-21 11:24:41 · 44 阅读 · 0 评论 -
【P2P】直播网络拓扑及编码模式
对于普遍的 P2P 直播应用,树-网格混合(Hybrid)模式 是当前最常用、最平衡的方案——它既能保证上游分发的稳定性,又能让下游节点通过 Mesh 高效互补与恢复。如果你的直播规模不大,或者网络环境非常可控(局域网、专线),也可以直接使用 树型推送(Tree-based);但一旦遇到千级以上观众,就必须逐步引入 Mesh-Pull 或 Hybrid 架构,以确保流畅度与可扩展性。原创 2025-06-08 23:28:04 · 311 阅读 · 0 评论 -
【razor】采集模块设置了窗体句柄但并不能直接渲染
本文分析了视频采集模块中窗体句柄设置后无法自动渲染的原因。关键点在于:1)set_view_hwnd仅保存窗口信息,不会触发自动采集和渲染;2)必须通过外部线程(如VideoViewThread)循环调用capture_sample()才能持续显示画面;3)这种设计提高了灵活性,便于多路分发。开发建议保留现有架构,通过外部线程驱动渲染流程。文章通过代码片段和示意图清晰说明了采集渲染流程的运作机制。原创 2025-05-31 21:13:21 · 128 阅读 · 0 评论 -
【razor】采集的同时支持预览和传输的讨论和改造方案探讨
从架构设计角度,广播机制确实更优秀,因为:面向未来:支持任意数量的消费者松耦合:各消费者完全独立数据一致性:保证所有消费者获取相同数据易维护:新增功能不需要修改核心逻辑如果你的项目有扩展可能性,我建议选择广播机制。即使当前只有2个消费者,为未来的扩展投资一点复杂度是值得的。原创 2025-05-28 20:55:57 · 154 阅读 · 0 评论 -
【Fargo】razor框架调用mediasoup的发送和接收能力
线程安全的数据队列VideoDataQueue 类实现线程安全的视频数据传递支持队列满时自动丢弃旧帧,防止内存堆积支持优雅停止和条件等待2. 独立的发送线程管理VideoSenderManager 管理两个独立线程:libuv线程: 运行网络事件循环数据处理线程: 从队列取数据并调用实际发送3. 独立的接收线程管理VideoReceiverManager 管理接收线程和libuv环境原创 2025-05-24 19:48:12 · 136 阅读 · 0 评论 -
【SimSession 】5:信令:echo与relay服务使用回传信令交互
【SimSession 】5:信令:echo与relay服务使用回传信令交互原创 2025-05-11 00:28:20 · 160 阅读 · 0 评论 -
【SimSession 】4:信令:用 libuv 实现消息收发系统
通过这种设计,我们实现了网络通信与 UI 的完全分离,避免了网络操作阻塞 UI 线程,同时提供了简单易用的 API 接口。这种架构适合实现复杂的网络应用程序,如即时通讯客户端、网络游戏等需要响应式 UI 的应用。原创 2025-05-05 00:15:21 · 145 阅读 · 0 评论 -
【SimSession 】3:中继服务 linux和windows实现及MFC集成实现
MFC调用中继服务原创 2025-05-04 23:50:13 · 277 阅读 · 0 评论 -
【SimSession 】2:PacedReceiver:支持与 PacedVideoSender 本地联调
观察输出:检查发送端是否正确发送视频帧检查接收端是否成功接收数据包验证比特率控制和统计信息这个方案最大程度地减少了对现有代码的修改,同时提供了强大的测试功能,使您能够在对比和调试的基础上逐步完善系统。原创 2025-05-04 19:19:32 · 368 阅读 · 0 评论 -
【SimSession】1:将视频发送逻辑与 libuv 事件循环集成是一个典型的并发设计问题
SimSession这个测试程序提供了一个完整的框架,展示了如何在保持 libuv 事件驱动模型的同时,并行发送视频数据,可以作为您集成修改后的 PacedVideoSender 的参考。原创 2025-05-04 18:35:39 · 507 阅读 · 0 评论 -
【Fargo】28:字节序列
字节序列原创 2024-12-13 20:17:47 · 143 阅读 · 0 评论 -
【razor】echo搭配relay功能分析
1:17...1>------ Build started: Project: sim_relay, Configuration: Debug Win32 ------1>relay.c1>LINK : G:\CDN\BWE-DEV\my_razor\sim_test\Debug\sim_relay.exe not found or not built by the last incremental link; performing full link1>sim_relay.vcxproj -> G原创 2024-12-12 11:19:30 · 379 阅读 · 0 评论 -
【Fargo】27:ffmpeg ffprobe 和python分析h264文件并绘制
FFprobe analysis completed. Output saved to D:\XTRANS\thunderbolt\ayame\zhb-bifrost\player-only\out30fps_no_b.jsonParsed 248 frames.I-Frame Indices: [0, 30, 60, 90, 120, 150, 180, 210, 240]GOP Intervals: [30, 30, 30, 30, 30, 30, 30, 30]原创 2024-11-25 14:54:09 · 456 阅读 · 0 评论 -
【Fargo】25:基于mediasoup发rtp包及内存清理
// Cloned ref-counted packet that RtpStreamSend will store for as long as // needed avoiding multiple allocations unless absolutely necessary. // Clone only happens if needed. std::shared_ptr sharedPacket;原创 2024-11-22 18:12:26 · 198 阅读 · 0 评论 -
【MediaSoup】接收端反馈RTCP调用流程
WebRtcTransport::SendRtcpPacket(RTC::RTCP::Packet* packet)原创 2024-11-18 18:12:44 · 267 阅读 · 0 评论 -
【Fargo】24:接收端无法解析twcc的值解决
mediasoup twcc原创 2024-11-18 14:50:53 · 84 阅读 · 0 评论 -
【Fargo】23:采集时间转rtp时间
uint32_t rtp_timestamp = (uint32_t)((uint64_t)timestamp_ms * 90000 / 1000);原创 2024-11-17 22:15:14 · 168 阅读 · 0 评论 -
【Fargo】22:H.264文件读取并RTP分片打包
264文件读取、NALU解析;RTP时间戳;werbtc的rtp打包原创 2024-11-05 16:04:02 · 210 阅读 · 0 评论 -
【Fargo】21:rtcp rr 问答
丢包率是通过计算接收端丢失的 RTP 包的数量与期望接收到的 RTP 包的数量的比例来确定的。这个比例乘以 256 得到一个 8 位的无符号整数,表示丢包率。在 ReportBlock 类中,我们可以通过 SetFractionLost 函数来设置这个值。原创 2024-11-01 17:58:35 · 126 阅读 · 0 评论 -
【Fargo】20:rtcp知识问答
rtcp原创 2024-10-29 16:13:03 · 255 阅读 · 0 评论 -
【Fargo】19:计算camera配置的匹配度
计算camera配置的匹配度原创 2024-10-28 16:23:49 · 80 阅读 · 0 评论 -
【Fargo】18:camera获取及预览
QCameraViewfinder原创 2024-10-28 00:52:15 · 216 阅读 · 0 评论 -
【razor】echo 程序win32构建
G:\CDN\BWE-DEV\my_razor\sim_test\echo\codec\x265off\build\vc15-x86原创 2024-10-25 20:52:39 · 109 阅读 · 0 评论 -
【razor】sim sender test 和receiver test联调
__imp__wnsprintfW sim_sender_test原创 2024-10-25 17:32:35 · 99 阅读 · 0 评论 -
【Fargo】16: 平滑发送
平滑发送原创 2024-10-25 14:47:56 · 200 阅读 · 0 评论 -
【Fargo】15: 使用mediasoup的UdpSocket发送数据
【Fargo】15: 使用mediasoup的UdpSocket发送数据原创 2024-10-25 14:31:56 · 452 阅读 · 0 评论 -
【Fargo】14: sockaddr_in 、 sockaddr 、sockaddr_storage 区别及转换
sockaddr_storage原创 2024-10-24 18:28:46 · 362 阅读 · 0 评论