javaCV音视频像素、编码、格式和协议及图片的关系解析

2021-07-05 21:04:11 浏览数 (1)

  • 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等等图片格式。

0 人点赞