- 1.1 图像像素格式
- 1.2 图片封装格式:
- 1.3 图片压缩
- 2.1 编码其实就是对图像像素数据的压缩
- 2.2 I帧,B帧和P帧指的是什么?
- 3.0 封装格式使用的注意事项:
- 3.0.0 推送流媒体:在指定输出流媒体的时候需要指定其封装格式
- 3.0.1 PTS/DTS问题
- 3.1 什么是转封装?为什么转封装比转码消耗更少?为什么转封装无法改动视频尺寸?
- 4.1 在iOS下进行音频解码及播放的流程
- 4.2 PCM的原理(1、抽样;2、量化;3、编码)
- 4.3 PCM数据操作
- 4.4 Audio Unit 播放 PCM
- 4.5 音频编码基本原理
前言
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
- 特征点的检测和匹配(ObjectFinder)
- 一组用于实现投影仪-照相机系统的直接图像对齐的类
(主要是GNImageAligner、ProjectiveTransformer、ProjectiveColorTransformer、ProCamTransformer和ReflectanceInitializer),
- blob分析包(BLUB),
- JavaCV类中的各种功能
其中一些类还具有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
I、图像像素格式与图片封装格式
1.1 图像像素格式
指的是没有经过编码的按照原始像素排列的数据。一个完整图像的像素排列一般是这样的(以4*4像素的rgb像素格式为例):
rgbrgbrgbrgb rgbrgbrgbrgb rgbrgbrgbrgb rgbrgbrgbrgb
存储使用一维数组来存这些数据,所以就变成这样:rgbrgbrgbrgb.......
1.2 图片封装格式:
指的我们日常见到的png,jpg,bmp,gif等等图片格式。