
JavaCV(Java interface to OpenCV, FFmpeg, and more)
https://github.com/bytedeco/javacv 是计算机视觉领域的开发人员常用库的JavaCPP预置的包装器,并提供实用的程序类使它们的功能更容易在Java平台上使用,包括Android。 (OpenCV、FFmpeg、libdc1394、PGR FlyCapture、OpenKinect、li.lsense、CL PS3 Eye Driver、videoInput、ARToolKitPlus、flandmark、Leptonica和Tesseract)
JavaCV提供了:
(CanvasFrame和GLCanvasFrame)
(GeometricCalibrator,ProCamometricCalibrator,ProCamColorCalibrator
(主要是GNImageAligner、ProjectiveTransformer、ProjectiveColorTransformer、ProCamTransformer和ReflectanceInitializer),
其中一些类还具有OpenCL和OpenGL的对应类,它们的名称以CL结尾或以GL开始,即:JavaCVCL、GLCanvasFrame等。
用javaCV采集视频和音频的流程:拉流(采集)--->图像像素数据/音频数据<---->编/解码 <---->音/视频帧<---->解封装/封装--->推流
1、推流器的作用就是将本地的视频数据推送至流媒体服务器:可以将本地的 MOV / AVI / MKV / MP4 / FLV 格式的媒体文件,通过流媒体协议(RTMP,HTTP,UDP,TCP,RTP)以直播流的形式推送出去。 2、例如RTMP推流器(Streamer):首先将视频数据以RTMP的形式发送到流媒体服务器端(Server,比如FMS,Red5,Wowza),然后客户端(Flash Player、FFplay)通过访问流媒体服务器就可以收看实时流。
举例:编解码过程(以hevc编码的rtsp转rtmp/flv为例,无音频数据):
rtsp流---拉流解复用--->h265(hevc)---解码--->yuv像素数据---编码--->h264---封装推流--->rtmp/flv
指的是没有经过编码的按照原始像素排列的数据。一个完整图像的像素排列一般是这样的(以4*4像素的rgb像素格式为例):
rgbrgbrgbrgb rgbrgbrgbrgb rgbrgbrgbrgb rgbrgbrgbrgb
存储使用一维数组来存这些数据,所以就变成这样:rgbrgbrgbrgb.......
指的我们日常见到的png,jpg,bmp,gif等等图片格式。