专栏首页eguid开源技术分享javacv实现实时视频截图和录像服务easyCV

javacv实现实时视频截图和录像服务easyCV

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/eguid_1/article/details/83345489

本项目维护于github:https://github.com/eguid/easyCV

2019年4月更新:

1、新增两个springboot+postgre的演示demo

2、去除了corelib录像API中不合理的持久层接口

1、介绍

本项目基于javaCV1.4.x。

其中实现了

(1)实时视频截图服务(支持rtsp/rtmp/http-flv/hls/file等视频源),图片保存格式支持png/jpeg/jpg/gif等等,支持base64和图片保存两种方式,同时支持两种同时保存/返回。

(2)视频录像服务支持rtsp/rtmp/http-flv/hls/file等实时视频或文件录像,支持手动暂停和恢复录制,支持手动开始和结束录制,支持保存mp4/flv/mkv/avi等等录像视频,配合http/ftp服务可以实现在线点播。

(3)web服务使用springboot,仅作为demo使用,并没有实现持久化;截图的base64数据和历史记录保存在Map中,图片文件保存在指定路径;录像历史记录保存在map中,文件保存在硬盘。

截图wbe服务使用8081端口,录像默认使用8082端口。

通过访问ip:port/test测试截图和录像,通过ip:post/查看截图录像历史列表(可查看截图,点播录像视频,需要配置http点播服务)

2、实现原理

(1)截图服务直接使用了javacpp-ffmpeg方式,解决了javaCV的FFmpegGrabber在检索实时视频信息时导致的阻塞问题,同时优化了ByteOutputStream和Base64的转换性能。

(2)录像服务直接使用了javaCV方式,通过实现的固定大小的线程池来提升资源复用率,转封装情况下解决了FFmpegRecorder下推流至rtmp的pts为空的bug。

线程池实现:通过录制器绑定线程方式,在manager层实现了录制器对象池来实现线程复用,录制器作为线程控制器来控制工作线程的开始、暂停、恢复,结束录像的操作。

管理器--->固定大小对象池--->录制器--->工作线程

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 模型仅1MB,更轻量的人脸检测模型开源,效果不弱于主流算法

    项目贡献者介绍,这一模型大小文件仅1MB,320x240输入下计算量仅90MFlops。

    量子位
  • 如何用一条命令将网页转成电脑 App?

    大家有没有一种感觉,很多网站其实做得非常优秀,但是它们就是没有开发 PC (电脑)版的客户端,比如知乎、GitHub、微信公众号。

    GitHubDaily
  • PHP设计模式之中介者模式

    上回说道,我们在外打工的经常会和一类人有很深的接触,那就是房产中介。大学毕业后马上就能在喜欢的城市买到房子的X二代不在我们的考虑范围内哈。既然需要长期的租房,那...

    硬核项目经理
  • 机器学习免费跑分神器:集成各大数据集,连接GitHub就能用,还能验证论文结果

    现在,Papers with Code (那个以论文搜代码的神器) 团队,推出了自动跑分服务,名叫sotabench,以跑遍所有开源模型为己任。

    量子位
  • 这可能是迄今为止最全的hexo博客搭建教程

    这是阮一峰在博客中写到的关于 Blog 的想法,而这里的第三阶段的实现就是利用 GitHub Pages 搭建博客。

    用户2769421
  • 最近学到的「短链接」知识

    最近接了一个需求,涉及到了短链接的相关的知识,于是去查阅了相关的资料,在这里给大家整理分享一下。

    Java3y
  • Git:使用GPG签名Commit

    GPG从诞生开始,目的就是为了加密而存在。到如今的 git,用 GPG 来签名 commit ,

    CRPER
  • 前端技术观察第六期 - Chrome 77里有什么新东西给开发者?

    ConardLi
  • 使用libimobiledevice + ifuse提取iOS沙盒文件

    libimobiledevice:一个开源包,可以让Linux支持连接iPhone/iPod Touch等iOS设备。

    周希
  • Github创建分支

    git checkout -b [branch name] 的效果相当于以下两步操作:

    周希

扫码关注云+社区

领取腾讯云代金券