h5播放rtsp流
最近由于项目上需要一个摄像头在线预览的功能,于是便琢磨了一个小玩意出来分享分享。项目是在win上,合作的人懂js,基于这样的情况,我只选择nodejs作为开发。并未使用php相关。
一开始做这个,我并不感到陌生,因为我以前使用过开源的解码器FFmpeg,所以我知道使用它就可以实现摄像头的rtsp流转hls,只要转成hls了,我就可以使用开源的video-js-control-hls来播放m3u8文件了,而且我司用了海康的软件产品,它们就是开放接口,通过请求接口获取在线播放文件。思路是很清晰的,那我有了这样的思路,并开始在npmjs.com里面找轮子
经过一番的查找,最后我选定了几个轮子。首先是fluent-ffmpeg这个操作ffmpeg的中间件,然后就是hls-server这个http服务,它过滤所有和hls无法的资源,只保留.m3u8和.ts资源。那这样的话,轮子有了,那下面就是去熟悉一下理论知识(音视频转码、ffmpeg等)
浏览了大概的理论知识后,那再接着就是细节的优化了。细节问题我在做之前发了一个思否的提问(链接:做一个海康摄像头转hls然后使用h5方式播放的细节问题),心寒的是,平名无法被人看到,知识就是力量,力量不够就有问题,所以我开始自己的琢磨(基本上那几天晚上都在想)。
琢磨了几天后,我找到了几个关键点:
什么时候开始转码(服务启动就转码还是接口发送后收到转码通知在转码) | 当然是接口发送后收到转码通知在转码 |
什么时候没人看了,关闭转码服务,清理播放文件 | 用户观看的时间作为更新时间,服务端建立一个心跳检测,当超过设置时间没人看,就治理ffmpeg进程和播放文件 |
如果生成的播放文件,一直没人看,那也要关闭转码服务,清理播放文件 | 记录播放文件观看的时间,如果有人看,就更新这个时间,服务端建立一个心跳检测,当超这个时间超过过设置时间没人看,就治理ffmpeg进程和播放文件 |
是否加入缓存 | 一开始没加,每次请求都生成新的播放文件,后面考虑到我们是应用层开发,不是c++这些,所以还是加缓存,当关闭转码服务,清理播放文件的条件满足时,同时也清理缓存的url |
当我完成了这个版本后,我发现不够好,为什么不够好呢,因为开始转码到生成播放文件,我在我的电脑和服务器上测试的平均时间是在11秒左右,最好的时候是3秒。我们在保证服务器配置的同时应该在思考有没有优化的空间。我这个版本就是api请求,然后使用fluent-ffmpeg的方法去创建ffmpeg进程,fluent-ffmpeg使用pipe向进程输入命令。那我就想了,我能否预先的生成ffmpeg进程并让它挂起(就是做ffmpeg进程池),然后api请求,我从进程池里面拿一个出来用,当自动清理时,我不再关闭进程,而是使用信号暂停进程。我想这样的方式,应该会加快生成播放文件的时间,减少api等待的时间。
目前的话,我开始研究fluent-ffmpeg的源码,感觉从它这里还没找到方法,我于是自己操作了一个示例,我在启动tcp后,使用
child_process.spawn建立ffmpeg进程,参考代码:
server.on("listening", () => {
console.log('listening');
const args = ['-i', 'pipe:0', '-f', 'mp3', '-ac', '2', '-ab', '128k', '-acodec', 'libmp3lame', 'pipe:1'];
for (let i = 0; i < 10; i++) {
const ffmpeg = spawn('ffmpeg', args);
pools[i] = ffmpeg;
}
});
理论上是可以的了,而且这样创建的进程是挂起的,我后续在关键参数加管道,后面应该就可以实现了吧,暂时在研究中,如果研究成功,我会发布第二版本。
最后,我附上一个git地址给大家吧,代码写的不咋样,见笑了:hk-hls
原文链接:http://jcycms.boomyang.cn/article/view/51
h5播放rtsp流的更多相关文章
- 浏览器无插件播放rtsp流解决方案
1. 安装 FFmpeg 参考 CentOS下安装FFmpeg,特别详细. 我遇到的错误和解决办法: 缺少lame ffmpeg+libmp3lame库源码安装教程(CentOS) make ffmp ...
- 使用vlc播放器播放rtsp流视频
可参考: 使用vlc播放器做rtsp服务器 web网页中使用vlc插件播放相机rtsp流视频 使用vlc进行二次开发做自己的播放器 首先需要安装vlc播放器,下载及安装步骤略 使用vlc播放器播放rt ...
- HTML5播放RTSP,H5播放RTSP,解决方案源码,基于海康网络摄像头
视频是用的海康网络摄像头(支持RTSP,标准H.264 RTP封装的设备),可以通过 rtsp://admin:1008@192.0.0.64:81/h264/ch1/main/av_stream ...
- 提供HTML5播放RTSP流 提供微信播放RTSP流 HTML5支持rtsp web播放rtsp,微信支持rtsp
首先H5的video不支持RTSP播放,以下是html5的video官方介绍 现在如果要在页面中使用video标签,需要考虑三种情况,支持Ogg Theora或者VP8(如果这玩意儿没出事的话)的(O ...
- 用vlc SDK创建一个播放视频文件和RTSP流视频的Demo
#include <stdio.h> #include <tchar.h> #include <time.h> #include <windows.h> ...
- 使用Gin+WebSocket在HTML中无插件播放RTSP
在后台的开发中遇到了对接显示摄像头视频流的需求.目前获取海康及大华等主流的摄像头的视频流使用的基本都是RTSP协议.不过HTML页面并不能直接播放RTSP协议的视频流,查询了一番各种网页播放RTSP的 ...
- [转] web无插件播放RTSP摄像机方案,拒绝插件,拥抱H5!
需求 问题:有没有flash播放RTSP的播放器?H5能不能支持RTSP播放? 答案:没见过,以后估计也不会有: 问题:可以自己做浏览器插件播放RTSP吗? 答案:可以的,chrome做ppapi插件 ...
- web无插件播放RTSP摄像机方案,拒绝插件,拥抱H5!
本文转自:http://www.cnblogs.com/babosa/p/7355468.html 需求 问题:有没有flash播放RTSP的播放器?H5能不能支持RTSP播放? 答案:没见过,以后估 ...
- web网页中使用vlc插件播放相机rtsp流视频
可参考: 使用vlc播放器做rtsp服务器 使用vlc播放器播放rtsp视频 使用vlc进行二次开发做自己的播放器 vlc功能还是很强大的,有很多的现成的二次开发接口,不需配置太多即可轻松做客户端播放 ...
随机推荐
- Python:GeoJson格式的多边形裁剪Tiff影像并计算栅格数值
JSON是通过键值对表示数据对象的一种格式,其全称为JavaScript Object Notation,它采用完全独立于编程语言的文本格式来存储和表示数据,轻量级.简洁清晰的层次结构.容易解析等特点 ...
- linux7 上安装mongodb4.2.1操作步骤
MongoDB是一个通用的.基于文档的分布式数据库,它是为现代应用程序开发人员和云时代而构建的.没有数据库能让你更有效率. 1.下载需要的软件包https://www.mongodb.com/down ...
- jmeter+jenkins 配置过程(很详细)
一.安装jmeter 第一步 安装JDK,配置JDK路径.注:jdk下载地址,推荐使用jdk1.8版本 http://www.oracle.com/technetwork/java/javase/d ...
- springboot ElasticSearch 简单的全文检索高亮
原文:https://segmentfault.com/a/1190000017324038?utm_source=tag-newest 首先引入依赖 <dependency> <g ...
- 【转】如何在TensorFlow中高效使用数据集
本文主要记录tensorflow一个比较好用的API:Dataset,feed-dict 是向 TensorFlow 传递信息最慢的方式,应该尽量避免使用.向模型提供数据的正确方式是使用输入管道,这样 ...
- unity之中级必备知识
Mask,Scroll Rect实现图拖拽:新建Imag,添加Mask,Scroll Rect组件:新建Image,托放在Scroll下的Content:新建Scroll Bar实现滚动条的同步:托放 ...
- Winform工程反编译后的工作
Winform工程,反编译后,虽然能用,但不太好用. 因为form并没有像原生的那样. 所以,需要几个步聚: 1. 用ResGen工具,把二进制资源文件还原为xml格式: ResGen fromXX. ...
- SQL SERVER 语句转换格式函数Cast、Convert
CAST.CONVERT都可以执行数据类型转换.在大部分情况下,两者执行同样的功能,不同的是CONVERT还提供一些特别的日期格式转换,而CAST没有这个功能. CAST是ANSI兼容的,推荐使用CO ...
- group_concat 排序并取前三个
substring_index(group_concat(distinct num order by num desc),',',3)
- LightOJ-1008-Fibsieve`s Fantabulous Birthday(推公式)
链接: https://vjudge.net/problem/LightOJ-1008 题意: Fibsieve had a fantabulous (yes, it's an actual word ...