序言

公司现在在做汽车终端的平台,需要了解交通部808,1078的终端协议.  尤其是1078是关于音视频的协议.故此开始入坑java的音视频解决方案.本系列文章涉及一个完整的音视频服务搭建.大概整理这么多也是站在大家的肩膀上弄出来的.如有问题可以联系cuiyaonan2000@163.com

Java音视频中间库

这个肯定是站在巨人的肩上.我们会使用JAVACV来处理所有的视频,音频信息.

音视频基础知识

1、图像像素格式与图片封装格式

图像像素格式(简称像素格式),一般指的是没有经过编码的按照原始像素排列的数据。举个栗子,一个完整图像的像素排列一般是这样的(以4*4像素的rgb像素格式为例):

rgbrgbrgbrgbrgbrgbrgbrgbrgbrgbrgbrgbrgbrgbrgbrgb

当然我们存储的时候一般使用一维数组来存这些数据,所以排列顺序就变成这样:rgbrgbrgbrgb.......以此类推。

图片封装格式指的我们日常见到的png,jpg,bmp,gif等等图片格式,其中bmp是无损格式,里面的数据格式就是图片头信息加上rgb排列的像素数据,png/jpg这些都是有损压缩格式,但是压缩比还是很高的,为什么要压缩下面会讲到。(压缩就是编码cuiyaonan2000@163.com)

2、图像与视频帧

图像像素数据指的是yuv、rgb,rbga,bgr,gbra等图像像素格式,经过编码后才是视频帧。比如我们常见的h264编码,编码其实就是对图像像素数据的压缩,(以rgb为例,假如当前图像像素尺寸为1920*1080,,每种颜色用一个字节表示,也就是说每个像素点有红绿蓝三色共3字节,图像有1920*1080个像素点,也就是说这张图像大小为1920*1080*3字节,显然数据太大了),可以这样理解,h264编码本质上就是一种图像数据压缩算法。(一个像素为啥占用3个字节,因为红绿蓝三原色=.=cuiyaonan2000@163.com)

视频帧中常常提到的I帧,B帧和P帧指的是什么?i帧也叫关键帧,实际上就是一张完整的静态图像,而B帧和P帧只是用来记录画面的运动矢量等非图像数据,B/P帧都需要依赖i帧才能够正确解码出完整图像(有损的图像画面)。在实际应用中各种视频源中很少使用B帧,原因是虽然使用大量B帧可以提高压缩率,但也会消耗更多的硬件性能,所以大多数情况下的视频源都以i帧(关键帧)和大量P帧为主。

另外在直播应用中i帧间隔会很低,这样能够更快的显示首帧画面(B/P帧需要i帧才能够解码),但是这样也增加了传输的数据量,因为一个i帧通常会很大。

补充:由于人类眼睛的特殊生理结构,如果所看画面之帧率高于16的时候,就会认为是连贯的,此现象称之为视觉停留。这也就是为什么电影胶片是一格一格拍摄出来,然后快速播放的。

一般来说,现在监控的摄像头是25帧。这个当然是工作需要了。实际上,用摄像头录制播放视频时,只要帧率达到15,人眼就感觉是连续的。这个有什么用呢?相比25,15帧可以节省大量的编码、解码、刷屏工作。至于10-12,勉强连续,只能说某些特殊场合下的选择了。

帧数简单地说,帧数就是在1秒钟时间里传输的图片的帧数,也可以理解为图形处理器每秒钟能够刷新几次,通常用fps(Frames Per Second)表示。每一帧都是静止的图象,快速连续地显示帧便形成了运动的假象。高的帧率可以得到更流畅、更逼真的动画。每秒钟帧数 (fps) 愈多,所显示的动作就会愈流畅。一般来说30fps是可以接受的,所以要避免动作不流畅的最低fps是30。除了30fps外,有些计算机视频格式,例如AVI,每秒只能提供15帧。我们之所以能够利用摄像头来看到连续不断的影像,是因为影像传感器不断摄取画面并传输到屏幕上来,当传输速度达到一定的水平时,人眼就无法辨别画面之间的时间间隙,所以大家可以看到连续动态的画面。

3、编码与封装

编码上面已经讲了,是一种压缩算法;那么封装格式又是什么呢,封装格式就是我们日常见到的视频文件了,比如mp4,avi,mkv,flv等等等,按照每种封装格式的规范把视频帧和音频按照一定顺序存起来就成我们日常看到的视频文件了,这些封装格式一般都会包含一些头/尾标识和一些视频描述信息,这样播放器读取视频文件的时候就知道该怎么播放这些视频文件了(可以把封装格式理解成收纳箱,上面贴着小纸条说明里面放了哪些东西)。压缩图片格式也可以参考视频编码格式,原理都一样,都是对图像数据做有损/无损压缩。

4、转封装与转码

什么是转封装?为什么转封装比转码消耗更少?为什么转封装无法改动视频尺寸?

先举个栗子:假设视频格式(mp4,flv,avi等)是盒子,里面的视频编码数据(h264,hevc)是苹果,我们把这个苹果从盒子里取出来放到另一个盒子里,盒子是变了,苹果是没有变动的,因此视频相关的尺寸数据是没有改动的,这个就是转封装的概念。有了上面这个例子,我们可以把“转码”理解为:把这个盒子里的苹果(hevc)拿出来削皮切块后再加工成樱桃(h264)后再装到另一个盒子里,多了一步对苹果(hevc)转换为樱桃(h264)的操作,自然比直接把苹果拿到另一个盒子(转封装)要消耗更多机器性能

5、音/视频源

音/视频源可以是视频文件、音频文件,流媒体源,设备等等。

比如我们要看电脑或手机摄像头视频,就得采集设备的图像数据(从源设备采集到的是像素数据,一般是bgr或者rgb像素数据)如果是某些厂商的商用摄像机,可能会支持rtsp/rtmp协议,要采集声音呢,就得采集录音/话筒设备里面的数据(一般是pcm采样数据)。

6、流媒体协议

rtsp协议栈,rtmp协议栈,hls,http-flv(理论上讲这个flv不能算是流媒体协议,它只是个无限大的flv文件)等等。

例如rtmp,对编码后的音视频帧,要对其进行封装成flv进行传输。(说到底这些协议原理上依然是建立在tcp/udp基础上的应用层传输协议。cuiyaonan2000@163.com.)  部标的1078协议要求终端设备的推流协议是参考的rtp协议.后面我们写代码去处理它.

7、流媒体服务

流媒体服务就是接受rtsp,rtmp的推流服务器,并且能接收拉流.后面我们会搭建一个rtmp的流服务器.

8、音频声道

音响中的几声道指的是音响有几个输出线路,常见的有2.0、2.1、及5.1声道
  1、2.0声道指的是音响只有左右两个声道输出声音。
  2、2.1指的是音响有左右声道和低音三个声道输出。
  3、5.1则指的是音响有左右声道加左右环绕再加一个中置和一个低音输出。
  声道(Sound Channel) 是指声音在录制或播放时在不同空间位置采集或回放的相互独立的音频信号,所以声道数也就是声音录制时的音源数量或回放时相应的扬声器数量。
  声卡所支持的声道数是衡量声卡档次的重要指标之一,从单声道到最新的环绕立体声.

9、码流率

码流(Data Rate)是指视频文件在单位时间内使用的数据流量,也叫码率,是视频编码中画面质量控制中最重要的部分。同样分辨率下,视频文件的码流越大,压缩比就越小,画面质量就越好。

10、分辨率

不同的分辨率的肯定存储容量是不一样的.同理网络传输也是有影响的.

分辨率越大越耗流量,因此流量排行:极速<流畅<高清<超清720P<1080P蓝光。

如下的P表示是一种视频显示格式,外语字母P意为逐行扫描(Progressive scanning);

144p    (192×144,20帧/秒),4:3,录制一分钟大约1MB;
      240p    (320×240,20帧/秒),4:3,录制一分钟大约3MB;
      360p    (480×360,20帧/秒) ,4:3,录制一分钟大约7MB;
      480p    (640×480,20帧/秒),4:3,录制一分钟大约12MB;
      720p    (1280×720,30帧/秒)  , 16:9,录制一分钟大约35MB;
      1080p  (1920×1080,30帧/秒) ,16:9 , 录制一分钟大约80MB。
      2K (1152 × 2048)
      4K(2304 × 4096)

如下是一个视频的分界线.用于帮助你定位你的视频应该设置成什么样的分辨率与码率.

流畅:码率---256kbps,分辨率---480*360,俗称360P

高清:码率---512kbps,分辨率---640*480,俗称480P

超清:码率---1024kbps,分辨率---1280*720,俗称720P

JAVA音视频解决方案----视频基础知识相关推荐

  1. JAVA音视频解决方案----音频基础知识

    序言 参考2个博客地址: https://blog.csdn.net/byxdaz/article/details/80703970 https://www.jianshu.com/p/f56114d ...

  2. 音视频开发入门基础知识(视频入门篇)

    RTSP实时音视频开发实战课程:<RTSP实时音视频开发实战> 音视频开发入门基础知识(音频入门篇) 目录 一.前言 二.视频采集和显示 三.视频常见的格式 四.RGB转YUV和YUV转R ...

  3. 音视频开发入门基础知识(音频入门篇)

    RTSP实时音视频开发实战课程:<RTSP实时音视频开发实战> 音视频开发入门基础知识(音频入门篇) 目录 前言 音频的采集和播放 音频常见的格式 音频的编码 前言 在音视频开发入门基础知 ...

  4. 作为一名Java开发者应该掌握的基础知识汇总!

    Java语言作为热门编程语言之一,受到了更多的欢迎.今天小千就为大家介绍一下作为一名Java开发者应该掌握的基础知识. 一.修饰符 java语言中提供了一些修饰符,这些修饰符可以修饰类,变量和方法. ...

  5. Java开发者需要掌握的基础知识

    Java语言作为热门编程语言之一,受到了更多的欢迎.今天小千就为大家介绍一下作为一名Java开发者应该掌握的基础知识. 一.修饰符 java语言中提供了一些修饰符,这些修饰符可以修饰类,变量和方法.以 ...

  6. Java中易忽略的基础知识

    欢迎关注我的公众号[软件大爆炸] Java学习中的碎碎念 Java中易忽略的基础知识 Java面向对象基础 Java中的核心类 Java抽象类和接口 Java中的异常 Java中的泛型与集合 Java ...

  7. JAVA面试题之JVM基础知识

    JAVA面试题总结-JVM的基础知识 JAVA面试题之JVM基础知识 说一下JVM的主要组成部分及作用 说一下 jvm 运行时数据区? 说一下堆和栈的区别? 队列和栈是什么?有什么区别? 什么是双亲委 ...

  8. 【音视频开发】基础知识:视频简介

     在学习了⾳频的相关概念之后,现在开始讨论视频,视频是由⼀幅幅图像组成的,所以要学习视频还得从图像学习开始.  与⾳频的学习⽅法类似,视频的学习依然是从图像的物理现象开始回顾,这⾥需要回顾⼀下⼩学做过 ...

  9. JAVA学习笔记(1)【基础知识】

    JAVA学习笔记DAY_1 提示:关于java系列的内容只是本人在老师的指导下和自学过程中的一些学习笔记,如果存在错误敬请批评指正! 文章目录 JAVA学习笔记DAY_1 前言 一.Java语言未来的 ...

最新文章

  1. golang中的httptest
  2. Robert算子的运用
  3. 测量人看过来:多种语言编写的测量坐标反算神器附源码(C#/VB)
  4. python不同数据的读入_python读写不同编码txt文件_python读写txt文件
  5. C语言,谁都能看得懂的归并排序
  6. Could not create local repository at /home/yizhenn/.m、IDEA倒入maven项目无法导报问题
  7. Zookeeper配置参数与节点值的解读
  8. 大数据分析是如何工作
  9. ESXi添加第三方驱动
  10. 前端最佳实践(一)——DOM操作
  11. 从 LinkedIn 的数据处理机制学习数据架构
  12. gdi作图与系统不兼容_技术作图:技能准备amp;物理装备
  13. c++几个类互相包含
  14. 基于HALCON的喷码字符自训练与识别
  15. 现代数字图像处理作业———对lena图像进行简单处理
  16. 匈牙利算法解决指派问题
  17. Pr导入录屏视频产生音画不同步问题的解决方法
  18. matlab如何采集两路语音信号,基于MATLAB的语音信号采集与处理
  19. 技术探秘:华为云瑶光何以定方向
  20. 个人信息保护建设实践方法的探索过程

热门文章

  1. google使用方法及技巧
  2. Unity 动画压缩及其优化
  3. webpack 打包报错:Can't resolve '.\dist\bundle.js' in 'E:\vivian....'
  4. Ubuntu下使用NTP同步对时
  5. 比较iOS和Android的优缺点,第一次安卓机优缺点总结(对比iOS系统)
  6. Android使用搜狗输入法表情问题
  7. java环境变量classpath的作用_JAVA环境变量中 classpath、path、JAVA_HOME的作用
  8. Power BI中的ArcGIS地图
  9. 大数据开发之安装mysql
  10. java get/set方法好处