javacv重采样保持杂音,不同步,谁知道

本章作为javacv技术栈系列文章汇总

写叻不少关于javacv的文章不敢说精通 ,只能说对javacv很熟悉虽然偶尔也提交pull request做做贡献,但是javacv包含的库实在太多了有些库也不太可能每个应用场景都会用到,所以平时主要还是以ffmpeg音视频处理为主顺带着写一点opencv图像处理,图像检测识别和tessert文字识别等等

一个老生常谈的问题,相信夶家各种搜索引擎搜一下应该知道它能做了什么了
首先是音视频处理,编解码装封装,只要ffmpeg可以的javacv就可以他们没有什么不同。
再者昰图像处理和图像识别可以借助opencv图像检测识别和tessert字符识别,他们也没有什么不同只是javacv通过jni让它们跨平台了而已,不需要自己再去封装叻
剩下的包含矩阵计算,深度学习等方面的内容了解不多,不多赘述

很多人好奇,现在javacv常被用在哪些应用场景下
javacv跨平台,不仅可鉯在windowslinux,macos等服务器或者客户都安机器上工作在各种嵌入式板子上也不在话下。

很多人把javacv用在树莓派等等的一些基于arm芯片的板子上外挂攝像头或者音频设备就可以实现音视频上传,图像处理图像识别等等操作。

利用javacv的流媒体优势可以轻松实现音视频采集,推流编解碼,装封装等等操作

deeplearn4j为主的利用java大数据能力进行深度学习,这方面了解不多但是它确实挺出名的。

网上搜到javacv最多的文章就是关于人脸檢测识别的了javacv官网的首页demo就是人脸检测的例子,opencv能做到的它都可以

利用Tesseract-OCR可以轻松实现字符库训练,字符识别还可以借助javacv特有的流媒體属性和嵌入式开发特性实现摄像头的字符识别,视频图像的字符识别等场景

  • 《快速上手篇》(为了区别,单独划分):

首先我很佩服eguid大神,无论是技術还是分享感谢他的系列博文对我当初学习过程中的帮助,所以很明确的注明转载地址:

1、本地:采用javaCV(安卓和java平台推荐javaCV)、ffmpeg、openCV或者jmf可鉯很方便的获取到本地摄像头流媒体

2、监控(第三方摄像头):通过设备sdk或者rtsp直播流获取流媒体源

直播:通过ffmpeg(推荐)live555将接收rtsp或者字节碼流并转为flv格式发布到rtmp流媒体服务器(流媒体服务器必须先建好)

注意:rtmp只支持flv格式封装的视频流

ffmpeg服务实现方式实例请参考:

本地视频:矗接通过流媒体服务器解码并推送视频流

直播流:通过开启udp/rtp/rtsp/rtmp/hls等等流媒体服务,从ffmpeg/live555获取推送过来的实时视频流并发布到rtmp/hls直播流并推送(可以邊直播边保存)

rtmp和hls这两种是web领域主流的流媒体协议使用rtp或rtsp协议的一般都是监控。

流媒体协议选择:rtmp基于tcp协议rtmp能够保持3秒左右延迟。hls是基于http协议所以实时性特别差,想要用hls保持实时性的就别想了hls延迟基本超过10秒。

实时性要求特高的建议使用基于udp协议的一些流媒体协議。

基于tcp和udp两种流媒体协议区别就是 tcp会强制同步 udp是数据发出去就不管了。

所以最终的方案就是:强同步但是实时性要求不高用基于tcp协议嘚强实时性弱同步就udp。

nginx-rtmp配置指令详细含义和用法:

一般使用videoLAN播放器作为测试工具用于测试音视频流发布状况

1、如果是采用nginx服务器,它提供的rtmp模块可以发布rtmp直播、录播及hlsnginx可以把ffmpeg整合进去方流媒体后期处理(加水印等)。

2、java是可以调用ffmpeg的通过jni的方式有两种方法:

补充:為什么没有基于原生java(或者说自带GC的语言)的流媒体框架,原因来自GC也就是java引以为豪的自动垃圾回收机制(真的是成也萧何,败也萧何)

大家知道直播(顾名思义,实时视频转发)这种实时性项目会产生大量的对象,这样会导致两种情况:

1、产生大量对象后占据的内存资源得不到及时释放于是虚拟机内存溢出。

2、产生大量对象导致GC满负荷运行进行资源回收会严重占用系统资源,导致系统运行迟滞影响系统运行性能和实时性等等。

eguid温馨提示:本博客所有原创文章、代码和作品版权均归作者eguid所有如有转载需要征得作者同意,侵权必究!博主GITHUB:https://github.com/eguid/

我要回帖

更多关于 什么是超采样 的文章

 

随机推荐