c++高性能264/265实时h5流媒体服务器前后端整体解决方案

news/2024/11/17 4:29:35/

c++高性能264/265实时h5流媒体服务器前后端整体解决方案

1.效果展示

下图展示了前端播放效果。

  • 播放1路264视频流,4路265视频流

  • CPU占用率10%(测试机器上运行着c++服务端和其他工具程序)

  • GPU0占用率17%

在这里插入图片描述
在这里插入图片描述

1.1 作者测试机器配置

处理器 11th Gen Intel® Core™ i7-11800H @ 2.30GHz 2.30 GHz
机带 RAM 32.0 GB (31.6 GB 可用)
系统类型 WIN10 64 位操作系统, 基于 x64 的处理器
笔和触控 没有可用于此显示器的笔或触控输入
显示设备 GPU-0 : 集成显示芯片 GPU-1:RTX3070

2.特点

  • 利用新版chrome特性,无论是264还是265,都基于GPU硬件解码,性能卓越,可轻松实现16路/甚至64路 265视频播放,和本地播放器无差异,得益于chrome优秀的视频解码能力,甚至比很多本地播放器做的很好;
  • websocket传输实时流,极低延迟;
  • 前端代码基于h5原始“video”标签,方便集成到自己的前端项目中,并且提供简单播放器UI,方便修改,实现自己的前端逻辑;
  • 纯c++编写, 要求c++版本不低于14,少量c++14特性,具体特性见“4. 技术方案以及第三方库介绍 c++一栏”;
  • c/c++独有的高效内存使用,尽可能的避免内存拷贝;
  • 代码风格严格遵守google规范,从头文件包含顺序、变量命名到函数逻辑,遵循“一个函数只做一件事情”,谨慎对待每个警告,附上源码截图,文件列表截图。如有需要可提供单元测试代码,方便集成到自己的ci/cd环境中;
  • 跨平台,兼容window/linux, 可以运行在绝大多数嵌入式、x86环境下;
  • 媒体源为原始264/265裸流,方便集成到自己硬件环境中,如果采用mp4做源, ffmpeg读取,使用者需要额外考虑如何组帧、如何添加时间戳;

3.功能框架

4. 技术方案以及第三方库介绍

组件名称说明源码地址
c++c++11 function、lambda等,c++14 optional
网络库基于yasio/xxsocket修改https://github.com/yasio/yasio
websocket库wslayhttps://github.com/tatsuhiro-t/wslay
flv打包libflvhttps://github.com/ireader/media-server
264/265码流分析抽出webrtc库中的一部分做成库libvideo_stream_parserhttps://github.com/chromium/chromium
日志库loguruhttps://github.com/emilk/loguru
字符串分析库pystringhttps://github.com/imageworks/pystring
前端库mpegts.jshttps://github.com/xqq/mpegts.js

http://www.ppmy.cn/news/724831.html

相关文章

EfficientNet B0-B7 网络参数

EfficientNet B0-B7 网络参数: EfficientNet-B0 网络参数 STEM_W 32 STRIDES [1, 2, 2, 2, 1, 2, 1] DEPTHS [1, 2, 2, 3, 3, 4, 1] WIDTHS [16, 24, 40, 80, 112, 192, 320] EXP_RATIOS [1, 6, 6, 6, 6, 6, 6] KERNELS [3, 3, 5, 3, 5, 5, 3] HEAD_W 1280E…

求N个数的最大公约数和最小公倍数,.已知a0,a1,b0,b1,设某未知正整数x满足: (1)x和a0的最大公约数为a1; (2)x和b0的最小公倍数为b1; 求出满足该规则x的个数

一.题目分析 题目要求: 1.求N个数的最大公约数和最小公倍数 2.已知a0,a1,b0,b1,设某未知正整数x满足: (1)x和a0的最大公约数为a1; (2)x和b0的最小公倍数为b1; 求出满足该规则x的个数 题目思路: (1)求N个数的最大公约数…

BAT面试必问:a-b0与ab什么区别?overflow-conscious代码什么玩意?

BAT面试必问&#xff1a;a-b<0与a<b什么区别&#xff1f;overflow-conscious代码什么玩意&#xff1f; 读过JDK源码的同学&#xff0c;尤其是读过Collection框架的同学&#xff0c;肯定遇到过下面这种代码&#xff1a; 第一次读到这样的代码&#xff0c;你可能跟我一样感…

bne %B0的理解

查了一下书&#xff0c;0~99应该称为局部标号。 详见 ARM体系结构与编程 第147页 昨天在看arm汇编&#xff0c;其中有这样的一段语句 0 ldr r3, [r0], #4 str r3, [r1], #4 cmp r2, r0 bne %B0 bne&#xff1a;不等于则调转 但%B…

【FPGA】关于FPGA的 {width{1‘b0}} 是什么意思?

创作时间&#xff1a;2021-07-20 问题&#xff1a; {DW{1b0}}是什么意思&#xff1f;解答: 若DW8; {DW{1b0}} 就是 {8{1b0}} 也就是8b0 这下明白了吧。THE END~

YOLOv5改进之替换Backbone为EfficientNet B0

简介 BestYOLO&#xff1a;https://github.com/WangRongsheng/BestYOLO BestYOLO是一个以科研和竞赛为导向的最好的YOLO实践框架! 目前BestYOLO是一个完全基于YOLOv5 v7.0 进行改进的开源库&#xff0c;该库将始终秉持以落地应用为导向&#xff0c;以轻便化使用为宗旨&#…

EfficientNet-B0详解

文章转载来自&#xff1a;Dormineered 内容有些词汇翻译不准确&#xff0c;请见谅&#xff01;&#xff01;&#xff01;个人整理不易&#xff0c;包含参数计算内容&#xff0c;更多训练阶段细节会在后期更新。转载请注明 EfficientNets是谷歌大脑的工程师谭明星和首席科学家…

b0值

b0像是什么&#xff0c;b0像的去脑壳后的mask如何得到&#xff1f; b0像是DTI图像在扫面生成时b0是对应的图像&#xff0c;大家在拿到每个人的DTI数据时每个被试都有三个文件&#xff0c;bval文件,bvec文件和一个原始图像文件。这个图像文件可以用fslview打开&#xff0c;bval…