rtsp h256 流 web 软解播放

本项目地址

https://github.com/huskar-t/h265

修改自项目

https://github.com/goldvideo/h265player

介绍

主流摄像头都支持rtsp协议推流,h264视频流可以通过 webrtc 解码后喂给 h5 的 video 标签进行播放
h265 视频流在web端无法进行解码播放,如果在服务器端进行解码后将图片信息推给前端除了会给后端带来巨大的cpu压力同时会导致传输信息巨大产生延迟
本项目目的是在 web 端软解 h265 视频流并播放
一般web端使用视频展示无音频需求所以可以免去音频解码和音视频对齐

构思

通过搜索相关文章以及开源项目最终决定:后端取到 h265 裸流进行处理之后 websocket 实时推送web端, web 端通过 ffmpeg 使用 webassembly + worker 在浏览器端软解最终使用 canvas 展现实时监控

实现细节

  • h265软解非常消耗cpu如果单线程进行软解如果解析速度不够要么丢包要么产生延迟(i5-8500 单线程软解 低码率720p 都会产生巨大延迟),此时需要 webworker 进行多线程解析
  • webworker 为异步处理所以要保证两个关键帧之间的所有帧都在同一个worker里面处理,解决办法为后端推送数据时将naluType一起推送,当naluType为32时换到新worker处理
  • worker 处理速度不一致会使帧乱序输出,此时引入队列来缓存一定数量的帧,新帧按顺序插入,效果不是很明显而且会导致延迟
  • worker 个数要根据码率和分辨率以及cpu性能进行调整,4个worker 6K码率720P视频流主板温度直接起飞然后保护断电

使用

dist/h265.html

let video = new Video.Video("playCanvas", url, "ws://127.0.0.1:32000/ws",10,0)

第一个参数为 canvas 的 id
第二个参数为rtsp地址这个地址会在 websocket 建立连接之后发给后端
第三个参数为 websocket 地址
第四个参数为 webworker 数量
第五个参数为 缓存队列长度

websocket内容规定

每个包为二进制流内容为 nalutype + nalu

 this.ws.onmessage = function (evt) {that.tps += 1let nType = evt.data.charCodeAt(0)if (nType === 32) {that.workerIndex += 1that.workerIndex %= that.options.worker}that.events.emit(EventsConfig.DateIn, {data: evt.data,index: that.workerIndex,pts : that.tps})};

当客户端连接上时会发送 rtsp的地址给后端

        this.ws.onopen = function () {console.log("Connection open ...")that.ws.send(that.url);};

具体实践

摄像头码率不好设置,海康直接设置成低码率 经测试低码率 1080P 流 5个worker 无队列基本不丢帧 cpu 占用 10%~20% (i5-8500)

后记

后端程序员被迫写前端只能写写简单的html界面,非不务正业项目,配合后端取流已实现web端播放实时h265监控

rtsp h256 流 web 软解播放相关推荐

  1. java + nginx + ffmpeg + vue实现摄像头,rtmp、rtsp直播流协议的实时播放

    目录 大致流程 环境: CentOS 7 安装 ffmpeg docker安装nginx-rtmp nginx-rtmp配置文件详解 例子 java案例 pom依赖 代码案例 前端案例(vue) ja ...

  2. 基于emWin的WAV,MP3软解软件播放器,带类似千千静听频谱,含uCOS-III和FreeRTOS两个版本

    第9期:WAV,MP3软解播放器,带类似千千静听频谱 配套例子: V6-916_STemWin提高篇实验_WAV,MP3软解播放器,带类似千千静听频谱(uCOS-III) V6-917_STemWin ...

  3. 基于emWin的WAV,MP3软解软件播放器,带类似千千静听频谱,含uCOS-III和FreeRTOS两个版本...

    第9期:WAV,MP3软解播放器,带类似千千静听频谱 配套例子: V6-916_STemWin提高篇实验_WAV,MP3软解播放器,带类似千千静听频谱(uCOS-III) V6-917_STemWin ...

  4. 【rtsp流在Web端实时播放】使用 VUE + webrtc-steamer

    rtsp流-视频播放 操作系统:Win10 vue版本:vue2 一. 方法 必须将rtsp通过 播放器插件/服务器/- 转换为 flv/webrtc/- 最新在线可用rtsp码流地址(可用flv播放 ...

  5. 海康大华等安防摄像机采用通用RTSP协议流转RTMP推送至Web无插件播放展示的流程方法

    行业现状 中国互联网化的进程已经越来越快了,各个行业都在进行着互联网化的改造,流媒体.音视频,作为跑在互联网上最大量级的数据类型,其从编码方式到传输协议到终端兼容都成为各家标准抢占的高点,RTMP.H ...

  6. 使用FFmpeg + nginx + flv.js 实现RTSP格式视频流在web网页进行播放

    近期,出于项目需要,要求支持web网页播放RTSP格式的监控视频.因之前并没有相关的项目经验及技术积累.并且H5中的video默认并不支持RTSP格式的视频播放,接下来花了一周时间,都在进行调研和实践 ...

  7. [转] web无插件播放RTSP摄像机方案,拒绝插件,拥抱H5!

    需求 问题:有没有flash播放RTSP的播放器?H5能不能支持RTSP播放?  答案:没见过,以后估计也不会有:  问题:可以自己做浏览器插件播放RTSP吗?  答案:可以的,chrome做ppap ...

  8. html调用rpst 源码_在web页面中播放rtsp直播数据流方法

    WEB播放RTSP直播数据流方法 附录一些RTSP测试地址: 1.rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov 一段动画片 2.rtsp: ...

  9. 开源流媒体服务器ZLMediaKit在Windows上运行、配置、按需拉流拉取摄像头rtsp视频流)并使用http-flv网页播放

    场景 目前市面上有很多开源的流媒体服务器解决方案,常见的有SRS.EasyDarwin.ZLMediaKit和Monibuca等. 1.SRS GitHub - ossrs/srs: SRS is a ...

最新文章

  1. 【大神公开课】旷视研究院院长-孙剑博士:视觉计算前沿进展
  2. Redis支持的5种数据类型
  3. HTML 4.01 符号实体
  4. Hadoop学习之路(十八)MapReduce框架Combiner分区
  5. python字符串转浮点数_如何在Python中检查字符串是否为数字(浮点数)?
  6. 【AI视野·今日CV 计算机视觉论文速览 第217期】Thu, 10 Jun 2021
  7. 将JavaScript和VBScript添加到您的.NET Apps
  8. gps python获取图片坐标_女朋友会 Python 是多么可怕的一件事!
  9. 手机版wps支持格式
  10. 如何从官网下载Hibernate源码与jar包
  11. 最全中华古诗词数据库,收录30多万诗词
  12. 实践篇(一):数据准备和本体建模
  13. 渗透测试-灰鸽子远控木马
  14. OA办公自动化系统作用
  15. Android 视频播放 界面变形处理
  16. 树莓派4B上安装OpenWrt/LEDE
  17. Debussy5.4安装过程
  18. 互联网晚报 | 2月13日 星期日 | 上汽荣威宣布多款新能源车型涨价;高亭宇破奥运会纪录夺金;演员总片酬不得超过制作成本40%...
  19. 语音科学计算机,CalcVoice(语音科学计算器)
  20. jQuery File Upload

热门文章

  1. MyCat2分库分表的基本操作
  2. 身体打来的电话,你一定要接!
  3. 英语学习笔记(一)语法
  4. G++ + OpenCV 编译
  5. 极大似然估计原理思想
  6. 洗礼灵魂,修炼python(82)--全栈项目实战篇(10)—— 信用卡+商城项目(模拟京东淘宝)...
  7. java 阿里云 发送短信功能实现
  8. Mega2560(Arduino)Bootloader烧录指南
  9. 粉色噪声 褐色噪声 布朗噪声
  10. 华中科技大学计算机考博真题,2010年华中科技大学计算机考博试题