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

news2024/11/23 20:52:10

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.coloradmin.cn/o/719655.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何确定适合网站的长尾关键词?

确定适合网站的长尾关键词,需要进行以下几个步骤: 1. 目标受众分析:首先,要确定网站的目标受众是谁。了解目标受众的特点和需求,可以帮助我们选择适合他们的长尾关键词。例如,如果目标受众是学生&#xff…

【Linux | Shell命令】Linux 环境变量

目录 一、概述二、什么是环境变量2.1 全局环境变量2.2 局部环境变量 三、设置用户自定义变量3.1 设置局部用户自定义变量3.2 设置全局环境变量3.3 删除环境变量 四、默认的 shell 环境变量五、5.1 设置 PATH 环境变量5.2 一、概述 Linux 系统中,很多程序和脚本通过环…

爱创科技携腾讯云拓展海内外药械数字溯源服务,“一物一码”全程可追踪

想象一下,当每个人从医院取药窗口或药房买到关乎自己生命健康的药品时,只需掏出手机打开微信,扫一扫药盒上的二维码,就可以看到药品真伪、出厂厂家、用药科普等信息,既带来一份用药的安心,也能清晰地看到医…

二进制、十进制相互转换

二进制转十进制: 1100 0000转为十进制的数值为:12864192 十进制转二进制: 列如:十进制数为202 1286432168421二进制11001010 解析: 202>128,第一个二进制数为:1 202-128>64&#xf…

服务器垃圾怎样清理?C盘垃圾如何清理?

好多人都在问电脑垃圾如何清理?服务器的垃圾清理是系统维护中必不可少的一项任务,而C盘垃圾的清理同样也是必须要做的任务之一。那么,如何一键清理服务器垃圾,C盘垃圾如何清理呢?今天,我会以服务器助手为例…

8、架构:服务端介绍

作为一个产品化的项目,就必然有服务端的支持,这次的项目我们依然使用与上一本小册一样的技术栈 NestJS作为产品的服务端开发语言。 服务端的内容对于常规的前端开发会比较难上手,因为除了服务端的开发语言之外,我们还需要安装各种…

如何查看docker File!!!!

1.如何查看dockerfile! 先docker images 查看所有的镜像,然后再一个目录下先创建一个脚本,把下面内容复制进去 #!/bin/bash export PATH$PATH if [ $# -eq 1 ];thendocker history --format {{.CreatedBy}} --no-trunctrue $1 |sed "s…

基于PyQt5的桌面图像调试仿真平台开发(6)去马赛克

系列文章目录 基于PyQt5的桌面图像调试仿真平台开发(1)环境搭建 基于PyQt5的桌面图像调试仿真平台开发(2)UI设计和控件绑定 基于PyQt5的桌面图像调试仿真平台开发(3)黑电平处理 基于PyQt5的桌面图像调试仿真平台开发(4)白平衡处理 基于PyQt5的桌面图像调试仿真平台开发(5)…

c++ connect函数连接失败 解决方法

bool Connect() {//初始化网络WSADATA wsadata;WSAStartup(MAKEWORD(2, 2), &wsadata);if (0 ! WSAStartup(MAKEWORD(2, 2), &wsadata))return false;if (LOBYTE(wsadata.wVersion) ! 2 ||HIBYTE(wsadata.wVersion) ! 2) {printf("请求协议版本失败!\n");ret…

12.JavaWeb-Node.js+创建Vue项目

1.Node.js的概念 传统的Web服务器中,每个请求都会创建一个线程,这会导致线程数的增加,从而影响服务器的性能和扩展性,Ryan Dahl借助Chrome的V8引擎提供的能力实现了Node.js——可以在服务端运行的JavaScript(可以把Nod…

SQL-每日一题【197.上升的温度】

题目 表: Weather 编写一个 SQL 查询,来查找与之前(昨天的)日期相比温度更高的所有日期的 id 。 返回结果 不要求顺序 。 查询结果格式如下例。 示例 1: 解题思路 前置知识 交叉连接(CROSS JOIN) 即笛卡尔积&…

Vue Router 的params和query传参的使用和区别

//$router : 是路由操作对象,只写对象 //$route : 路由信息对象,只读对象//操作 路由跳转 this.$router.push({name:hello,params:{name:word,age:11} })//读取 路由参数接收 this.name this.$route.params.name; this.age this.$route.params.age; 1…

ADS笔记,时域和频域绘图

为防止遗忘,记录一下ADS的时间域和频谱图的绘制 在ADS中想得到电路的时域和频域图的话,可以用谐波平衡仿真HB或者选择一个准瞬态仿真控制器插入到原理图中来实现。 目录 方法一:谐波平衡仿真HB时域设置频域设置 方法二:准瞬态仿…

【Linux】git三板斧教程(免密提交配置)

git 什么是git?Linux下安装git基于git的一些商业网站介绍在gitee上创建仓库注册账号创建项目将仓库克隆到本地 git三板斧git三板斧第一招:git add三板斧第二招:git commit三板斧第三招:git push git免密码提交git log查看提交日志…

通俗易懂的期权入门知识汇总,硅铁期权即将上市适合用那种期权策略管理风险

【1】期权:是指某一标的物的买卖权或选择权。具有在某一限定时期内按某一指定的价格买进或卖出某一特定商品或合约的权利。这种权利是买进者拥有的一种权利,并非一种义务 【2】保证金:为确保执行,期权卖方存入的担保金 【3】多头…

Python flask入门教程(flask教程)(轻量级Web框架)

文章目录 flask能做什么?1. 路由和视图函数2. 模板引擎3. 表单处理4. 数据库集成5. 用户认证和授权6. 文件上传和下载7. RESTful API开发拓展:什么是RESTful API开发 8. 扩展性9. 轻量级和灵活性总结 flask入门1. 安装Flask2. 创建Flask应用3. 定义路由和…

深入理解MySQL事务和@Transactional注解:相似之处与作用解析

前言: 今天碰到几个面试人把Transactional注解,和mysql事务搞混,刻意来一篇讲一下这两者的区别,拒绝死记防止新人面试尴尬 先从简单介绍开始 MySQL事务 MySQL事务是数据库管理系统提供的一种机制,用于执行一组数据库操作,这些操作要么全部成功提交&a…

weblogic系列所有漏洞复现弱口令、CVE-2023-21839、CVE-2018-2894、CVE-2017-10271

文章目录 weblogic介绍:所用工具: weblogic弱口令漏洞详情:复现: Weblogic未授权远程代码执行漏洞 (CVE-2023-21839):漏洞详情:复现: Weblogic任意文件上传CVE-2018-2894漏洞描述:复现: 提提神Weblogic反序列化漏洞&am…

详解SystemVerilog中time slot的调度

1. 前言 本文讲一下SystemVerilog的time slot里的regions以及events的调度。SystemVerilog语言是根据离散事件执行模型定义的,由events驱动。SystemVerilog描述是由连接的执行thread或processes组成。Process是可衡量的,也具有状态,并且可以…

Java中操作文件(二)

目录 一、什么是数据流 二、InputStream概述 2.1、方法 2.2、说明 三、FileInputStream概述 3.1、构造方法 3.2、利用Scanner进行字符串读取,简化操作 四、OutputStream概述 4.1、方法 4.2、PrinterWriter简化写操作 五、小程序练习 示例1 示例…