PART 1

OTT 是“Over The Top”的缩写,是指通过互联网向用户提供各种应用服务。目前,典型的OTT业务有互联网电视业务,苹果应用商店等。不少OTT服务商直接面向用户提供服务和计费,使运营商沦为单纯的“传输管道”,无法触及管道中传输的巨大价值。

YUV(一种颜色编码方法),主要用于电视系统以及模拟视频领域,分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。由于亮度信息(Y)与色彩信息(UV)分离,没有UV信息一样可以显示完整的图像,只不过是黑白的,这样的设计很好地解决了彩色电视机与黑白电视的兼容问题。由于YUV不像RGB那样要求三个独立的视频信号同时传输,YUV方式传送占用极少的带宽。

YUV码流的存储格式与其采样的方式密切相关,主流的采样方式有三种,YUV4:4:4,YUV4:2:2,YUV4:2:0,根据采样格式从码流中还原每个像素点的YUV值,因为只有正确地还原了每个像素点的YUV值,才能通过YUV与RGB的转换公式提取出每个像素点的RGB值,然后显示出来。

提取每个像素的YUV分量参照:

YUV 4:4:4采样,每一个Y对应一组UV分量,每像素32位

YUV 4:2:2采样,每两个Y共用一组UV分量,每像素16位

YUV 4:2:0采样,每四个Y共用一组UV分量,每像素16位

平常所讲的YUV A:B:C的意思一般是指基于4个像素来讲,其中Y采样了A次,U采样了B次,V采样了C次.

RGB565 每个像素用16位表示,RGB分量分别使用5位、6位、5位

RGB555 每个像素用16位表示,RGB分量都使用5位(剩下1位不用)

RGB24  每个像素用24位表示,RGB分量各使用8位

RGB32  每个像素用32位表示,RGB分量各使用8位(剩下8位不用)

ARGB32 每个像素用32位表示,RGB分量各使用8位(剩下的8位用于表示Alpha通道值)

转换过程

1.RGB2YUV

在做RGB信号到YUV信号的转换时,一般是先转换到YUV444格式,然后再将UV信号的分辨率降低,变成我们所需的格式。

2.YUV2RGB

在播放视频或显示图像的时候,我们需要将YUV信号转换为RGB信号。这个步骤称为渲染(Rendering)。

在做YUV到RGB的转换时,首先需要将缩水的UV信号的分辨率拉升到与Y信号相同的分辨率,然后再转换到RGB信号。

PART 2

隔行扫描interlaced

把每一帧图像通过两场扫描完成则是隔行扫描,两场扫描中,第一场(奇数场)只扫描奇数行,依次扫描1、3、5…行,而第二场(偶数场)只扫描偶数行,依次扫描2、4、6…行。隔行扫描技术在传送信号带宽不够的情况下起了很大作用,逐行扫描和隔行扫描的显示效果主要区别在稳定性上面,隔行扫描的行间闪烁比较明显,逐行扫描克服了隔行扫描的缺点,画面平滑自然无闪烁。在电视的标准显示模式中,i表示隔行扫描,p表示逐行扫描。

逐行扫描progressive

显示屏显示图像进行扫描时,从屏幕左上角的第一行开始逐行进行,整个图像扫描一次完成。因此图像显示画面闪烁小,显示效果好。

1080p是一种视频显示格式,P意为逐行扫描(Progressive scanning),与它对应的是I意为隔行扫描(interlace scanning)。

视频压缩中,每帧代表一幅静止的图像。而在实际压缩时,会采取各种算法减少数据的容量,其中IPB就是最常见的。I帧是关键帧,属于帧内压缩。就是和AVI的压缩是一样的。 P是向前搜索的意思。B是双向搜索。他们都是基于I帧来压缩数据。I帧可以理解为一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面)P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)

B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较累~。

DTS(Decoding Time Stamp):即解码时间戳,这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据。PTS(Presentation Time Stamp):即显示时间戳,这个时间戳用来告诉播放器该在什么时候显示这一帧的数据。需要注意的是:虽然 DTS、PTS 是用于指导播放端的行为,但它们是在编码的时候由编码器生成的。当视频流中没有 B 帧时,通常 DTS 和 PTS 的顺序是一致的。但如果有 B 帧时,解码顺序和播放顺序不一致了。比如一个视频中,帧的显示顺序是:I B B P,现在我们需要在解码 B 帧时知道 P 帧中信息,因此这几帧在视频流中的顺序可能是:I P B B,DTS 告诉我们该按什么顺序解码这几帧图像,PTS 告诉我们该按什么顺序显示这几帧图像。

音频没有类似视频中 B 帧,不需要双向预测,所以音频帧的 DTS、PTS 顺序是一致的。

要实现音视频同步,通常需要选择一个参考时钟,参考时钟上的时间是线性递增的,编码音视频流时依据参考时钟上的时间给每帧数据打上时间戳。在播放时,读取数据帧上的时间戳,同时参考当前参考时钟上的时间来安排播放。这里的说的时间戳就是我们前面说的 PTS。实践中,我们可以选择:同步视频到音频、同步音频到视频、同步音频和视频到外部时钟。

PART 3

开放多媒体加速层(Open Media Acceleration,缩写为OpenMAX),一个不需要授权、跨平台的软件抽象层,以C语言实现的软件接口,用来处理多媒体。OpenMAX是专门用于音视频、图像编解码的。一个完整的多媒体设备包括设备硬件、设备驱动以及设备应用程序。与之对应的是OpenMAX的DL、IL、AL层,DL层定义了众多的API,全方位包含了OpenMAX音频、视频以及图像处理功能,这些功能可以由硅供应商(芯片原厂)实现并优化,然后编解码厂商在此基础上实现一些广泛的编解码功能。

IL层是作为一个比较低层级的接口来服务于嵌入式设备的音视频、图像编解码。它使得应用程序与多媒体框架可以以一种统一的方式与多媒体编解码器对接,而编解码器本身可以是硬件与软件的任何组合形式,这样编解码器可以做到对用户透明,用户无需关注编解码器的实现细节问题。

AL层为多媒体中间件与应用层之间提供一个标准化的API接口,多媒体中间件提供能够完成预期的API功能的服务。AL层为多媒体接口(应用)提供跨平台可移植性。

机顶盒中数据是如何流向的呢?机顶盒demux的流程:清流数据大致流向: TS流-->tuner -->demux-->Buffer-->app

TS流中的数据是前段经过编码、复用、调制之后的数据,机顶盒通过tuner对TS流解调,demux解复用然后将数据送到buffer中,最后机顶盒通过读取buffer获得需要的数据。

MPEG-2支持隔行扫描和逐行扫描。在逐行扫描模式下,编码的基本单元是帧。在隔行扫描模式下,基本编码可以是帧,也可以是场(field)。

封装格式就是把视频数据和音频数据打包成一个文件的规范。仅仅看文件的后缀,很难能看出具体使用了什么视音频编码标准。总的来说,不同的封装格式之间差距不大,各有优劣。

Android多媒体软件开发入门(一)相关推荐

  1. 爱奇艺Android客户端软件开发实战(全套)

    Android客户端软件开发_10.下载模块的流程分析以及详细流程图等.avi 141.2M Android客户端软件开发_11.多线程断点续传分析和流程图.avi 91.3M Android客户端软 ...

  2. 《Android多媒体应用开发实战详解:图像、音频、视频、2D和3D》——1.3节搭建Android应用开发环境...

    本节书摘来自异步社区<Android多媒体应用开发实战详解:图像.音频.视频.2D和3D>一书中的第1章,第1.3节搭建Android应用开发环境,作者 王石磊 , 吴峥,更多章节内容可以 ...

  3. 《Android多媒体应用开发实战详解:图像、音频、视频、2D和3D》——2.3节简析Android安装文件...

    本节书摘来自异步社区<Android多媒体应用开发实战详解:图像.音频.视频.2D和3D>一书中的第2章,第2.3节简析Android安装文件,作者 王石磊 , 吴峥,更多章节内容可以访问 ...

  4. 《Android多媒体应用开发实战详解:图像、音频、视频、2D和3D》——1.2节Android的巨大优势...

    本节书摘来自异步社区<Android多媒体应用开发实战详解:图像.音频.视频.2D和3D>一书中的第1章,第1.2节Android的巨大优势,作者 王石磊 , 吴峥,更多章节内容可以访问云 ...

  5. Android手机软件开发 课程 教学 大纲

    <专业考证培训及考证>课程教学大纲 课程编号:024015    授课学时: 80       学分数: 4    适用专业:通信技术 一.课程的性质和任务 课程的性质: <专业考证 ...

  6. 第一章 软件开发入门引导及概述

    第一章 软件开发入门引导及概述 前言 计算机系统是由硬件和软件组成,所谓硬件是指组成计算机系统的物理设备,包括电子的.机械的.磁的.光的设备的总和. 我们的电脑.手机.电子设备都算一个小的计算机. 而 ...

  7. 海思软件开发入门篇 (一)

    标题 海思软件开发入门篇 (一)   (第一次写博客,有错别字与写的不好的地方敬请谅解.)   加过很多群,也逛过很多论坛,很多人在问,第一次接触海思不知道从而入手,的确,现在一个SDK动不动上G,还 ...

  8. Android直播软件开发中接入腾讯IM大概流程是怎样的

    现阶段来看,直播软件中的即时通讯是非常重要的一个部分,毕竟直播过程中的交流和沟通是非常重要的,所以在Android直播软件开发时需要接入相关的IM服务. 通常我们选择的即时聊天服务,会选择集成简单方便 ...

  9. Android百度地图开发入门教程

    Android百度地图开发入门教程 1.平台注册登录 2.创建应用 3.Android studio配置 4.代码编写 5.最终效果(建议真机) 1.平台注册登录 登录百度地图开放平台网站注册并登录 ...

最新文章

  1. 【java】兴唐第十七节课
  2. 劣质代码评析——《写给大家看的C语言书(第2版)》附录B之21点程序(一)
  3. create maven android project
  4. IDA Pro - 如何得到比较清楚的逆向伪代码
  5. php 预处理原理,PHP的PDO对象预处理的2种实现方法,实现原理详解
  6. JZOJ 4675. 【NOIP2016提高A组模拟7.21】Double-row
  7. android最大json,Android:解析大型JSON文件
  8. 【python】编程语言入门经典100例--21
  9. php跨域允许json,PHP中JSON的跨域调用
  10. Native Instruments Maschine 2 v2.14.7 WiN-MAC 节奏音乐制作软件含拓展
  11. GBK转UTF8汉字数量为奇数位时,多出来的末尾汉字会乱码
  12. MybatisPlus整合SpringBoot全教程,用起来不要太方便
  13. 用迭代法求 a 的平方根。求平方根的迭代公式为····
  14. C/C++黑魔法-字符串分割
  15. mongoDB的读书笔记(04)_【Replica】(01)_Replica的一些基本概念
  16. Android 增强版百分比布局库 为了适配而扩展
  17. 桌面IE图标不见了的解决方法
  18. linux实现复制文件的两种方法
  19. Win10自带输入法 切换到中文 无法输入中文
  20. 【Python基础】2万字-详解Python基础函数,包教包会

热门文章

  1. Android Okhttp3基本使用
  2. 如何获取Cookie并使用Cookie侵入
  3. 从程序员到架构师 - 架构师篇
  4. Linux中nginx如何重启、启动与停止/设置开机自启动
  5. 荣耀手机升级鸿蒙,荣耀手机怎么升级鸿蒙系统
  6. -Java 模拟登录时需要输入验证码功能
  7. 2021年资料员-通用基础(资料员)报名考试及资料员-通用基础(资料员)证考试
  8. ASP.NETnbsp;nbsp;DATASET用法
  9. 使用Ajax同步请求增加页面等待提示
  10. 玫琳凯公司通过印第安人卫生服务网络针对受到疫情影响特别严重的美国原住民群体开展新冠肺炎支援工作