被java调用shell进程,进程僵死搞郁闷了

别问我为什么要用java调用ffmpeg处理视频。主要是需要按需压缩,按需压缩。

1.为什么要压缩?

有几百路摄像头,摄像头的数据都是高清分辨率,达到了惊人的4096x2160,帧分辨率25。需要在页面同时展示4路,每路4m,一个页面需要同时占用16m。

其次客户端播放窗口只有400像素,通过客户端压缩,页面非常卡顿,一顿一顿的。

为什么使用ffmpeg压缩,ffmpeg是c++写的相对来说效率高,而且支持拉流。

于是想到的方法是按需压缩。

之前只有8路摄像头, 方案简单粗暴, 服务器实时拉流,处理后放在服务器等待客户端播放。但是大部分时间,浏览器不需要看摄像头,偶尔看一下,虽然是内网处理,但是仍然浪费了服务器资源和带宽。

最进突然要接入几百路摄像头,于是想到了按需压缩。打开摄像头看视频的时候再拉流压缩。

按需压缩就是等浏览器像服务器发起请求的时候,再拉流压缩。考虑到源摄像头有可能是坏的,第一次返回404给客户端。客户端发起重试,返回压流后的流媒体。

调研了前端播放器 videojs,支持重试,于是服务器开工。

服务器想到的使用java需要多线程处理。一个线程负责监控客户端播放请求,一个线程负责心跳检查。

程序逻辑很简单。 当有请求来的时候,调起拉流压流daemon,当然还需要溢出判断,统一服务器限制不能超过50路,50路服务器处理不过来,处理视频太耗资源了。还有就是锁机制,存在n多客户端,同时播放的需求,实际只需要压缩1路即可,其他客户端共用这一路&#x

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值