概述

自然界中的所有看到的听到的都是模拟信号,模拟信号是随时间连续变化,然而手机电脑等信息都属于数字媒体,它们所呈现的内容就是把自然界中这些模拟信号转换成数字信号然后再传递给我们。数字信号不是连续的是离散的,只有0与1两种状态,所以要把模拟信号转化成数字信号即把这些信息数字化这一过程称作A/D(模/数)转化,要进行这一过程就要必须对模拟信号进行采样,采样率越高数字信号越接近真正的模拟信号。当然还有D/A(数/模)转换的过程,不再本篇考虑的范围内。


媒体数字化

对媒体数字化主要包括两种方式:时间采样与空间采样

  • 时间采样:捕捉信号在一段时间周期内变化,主要用于音频信号数字化。
  • 空间采样:对一幅图片在一定分辨率之下捕捉取亮度和色度,进而创建由该图片的像素点数据所构成的数字化结果,主要用于图像信号数字化。

    :视频是一段时间内由一帧帧图像组成所以时间信号可以用这两种采样方式。

编解码压缩

通过采样得到的数字媒体文件一半都很庞大,为了方便存储和传输文件我们需要对这些文件使用压缩技术,一半我们再网上,电视上看到的视频都是经过一定程度的压缩,对数字媒体压缩后通常会大幅度缩小文件的尺寸,例如一个1920*1080帧率是30FPS的视频文件未经压缩的大小大概是178MB/s,大部分的音频与视频是通过编解码器来进行压缩的。


音频

音频采样

纵轴表示振幅即音量大小,横轴表示时间,上图对一个正弦信号进行采样,每秒钟采样的次数称作采样率。采样率越高越接近真实的模拟信号。在音频数字化的过程中包含一个编码的方法,称为脉冲编解码(PCM)与线性脉冲编解码(LPCM)。

脉冲编解码(PCM)与线性脉冲编解码(LPCM)

PCMLPCM都是模拟信号变换为数字信号的编码方式,是对连续变化的模拟信号进行抽样、量化和编码的过程。唯一不同的是LPCM是非压缩音频数字化过程。

iOS中音频编解码器

一般的音频文件都是通过PCM音频进行再一次的编码与解码,以mp3格式为例,在PCM基础上进行mp3格式编码生成mp3格式的文件,如果把mp3格式转换成wma那么需要把需要这样的一个过程:mp3解码->pcm->wma编码。

iOS中的Core Audio框架支持的音频编解码格式参考官方文档

Core Audio提供对MP3数据的解码支持,但是不支持对MP3数据编码

在音频媒体没有使用线性PCM编码时只能使用ACC格式编解码。


视频

视频采样

视频数据显示是使用YCbCr色彩模式,而对视频采样就是减少YCbCr色彩模式中的颜色数据,这个过程称为色彩二抽样。

色彩二抽样

关于YCbCr颜色模式的介绍引用百度百科:YCbCr或Y’CbCr有的时候会被写作:YCBCR或是Y’CBCR,是色彩空间的一种,通常会用于影片中的影像连续处理,或是数字摄影系统中。Y’为颜色的亮度(luma)成分、而CB和CR则为蓝色和红色的浓度偏移量成份。Y’和Y是不同的,而Y就是所谓的流明(luminance),表示光的浓度且为非线性,使用伽马修正(gamma correction)编码处理。

采样格式包括YCbCr 4:1:1、YCbCr 4:2:0、YCbCr 4:2:2和 YCbCr 4:4:4


iOS中视频编解码器

iOSOS X中只提供苹果公司认定的目前主流的几种媒体类型支持。对于视频文件来说主要有H.264Apple ProRes视频格式标准。凡是符合这两个视频标准的文件苹果都提供对其编解码的支持。

ProRes编解码器只能在OS X上使用。

  • H.264:H.264/MPEG-4第10部分(MPEG-4第10部分也称为AVC,即Advanced Video Coding,高级视频编码)是一种视频压缩标准,一种被广泛使用的高精度视频的录制、压缩和发布格式。
  • Apple ProRes:ProRes是一个由苹果公司开发压缩技术,最大能支援5K分辨率。它于2007年随Final Cut Studio 2继承了Apple Intermediate Codec。

    ProRes被认为是一个中间件或中间层编解码器,因为它的目的是为了专业编辑和生产工作流服务。

    因为ProRes只能在OS X上使用,如果在iOS上进行开发只能使用H.264。然而苹果公司提供了一种方法,当我们捕捉图像对其编辑时,可以将目标变成通用的H.264编码格式。

iOS数字媒体开发浅析的更多相关文章

  1. iOS数字键盘自定义按键

    UIKeyboardTypeNumberPad 数字键盘自定义按键 最近做一个搜索用户的功能,这里使用了UISearchBar.由于搜索的方式只有手机号码,所以这里的键盘要限制为数字输入,可以这么做: ...

  2. iOS 并发概念浅析

    在进行iOS开发过程中,我们常会遇到网络请求.复杂计算.数据存取等比较耗时的操作,如果处理不合理,将对APP的流畅度产生较大影响.除了优化APP架构,并发(concurrency)是一个常用且较好的解 ...

  3. h5 调起ios数字键盘的坑,限制特殊字符输入方案

    最近有个需求是利率只允许输入数字和小数点,用以下 <input type="number" pattern="[0-9]*"> 在ios会调起数字键 ...

  4. iOS面试_1.浅析内存管理

    为了开学的面试,就在博客里总结一下面试会问到的问题,今天就来谈谈内存管理,看到一篇文章非常不错,http://vinceyuan.cnblogs.com/,深入浅出,推荐大家去看看! Objectiv ...

  5. cordova IOS源码浅析

    cordova封装了一套js和OC通信的代码,cordova.js下的iOSExex是关键的js去调原生的发起点. function iOSExec() { var successCallback, ...

  6. IOS中CoreData浅析

    CoreData简介: 什么是CoreData? Core Data是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中, ...

  7. ios 数字禁止变成电话号码

    1.使用meta来限制页面不转换电话号码   <meta name="format-detection"content="telphone=no"/> ...

  8. iOS屏幕旋转 浅析

    一.两种orientation 了解屏幕旋转首先需要区分两种orientation 1.device orientation 设备的物理方向,由类型UIDeviceOrientation表示,当前设备 ...

  9. iOS架构模式浅析

    这是以前旧博客在13年规划写的一个系列,写了一部分内容,还没有完成.现在重新整理编写.计划从基础知识六大设计原则.设计模式中类的关系开始,然后会对iOS开发中的常用架构模式进行介绍,最后对GoF的23 ...

随机推荐

  1. 给DOM操作生成的元素添加事件

    问题:通过js给页面添加新元素,并给该元素添加绑定事件,但新添加的元素上却没有绑定任何事件. 常见例子:在处理表格的时候,每行行末有个删除按钮,如下图.点击删除按钮的时候删除这一行. //html部分 ...

  2. SPA SEO SSR三者有什么区别

    SPA通俗的说就是单页面应用(single page application) 优点 页面之间的切换非常快 一定程度减少了后端服务器的压力 后端程序只需要提供api,不需要客户端到底是web端还是手机 ...

  3. [NOI2015]品酒大会(后缀树+DP)

    后缀自动机有一个性质. 就是如果倒建SAM两个串的lcp就是这两个串的结束节点的LCA. 然后就可以愉快的跑DP了. 对于每一个后缀树上的节点\(u\),它对\(len[u]\)的贡献是\(\sum_ ...

  4. mariadb 视图 事务 索引 外键

    视图 对于复杂的查询,在多个地方被使用,如果需求发生了改变,需要更改sql语句,则需要在多个地方进行修改,维护起来非常麻烦   假如因为某种需求,需要将user拆房表usera和表userb,该两张表 ...

  5. mariadb数据库基础知识及备份

    数据库介绍 1.什么是数据库? 简单的说,数据库就是一个存放数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织,存储的,我们可以通过数据库提供的多种方法来管理 ...

  6. pandas 3 设置值

    from __future__ import print_function import pandas as pd import numpy as np np.random.seed(1) dates ...

  7. Unity 制作安装程序和卸载程序

    1.最简单的方式通过winrar制作 但是做出来的页面好low的感觉 参考链接:https://www.cnblogs.com/fetty/p/5185913.html 2.通过inno制作安装程序: ...

  8. 【codeforces 379D】New Year Letter

    [题目链接]:http://codeforces.com/contest/379/problem/D [题意] 让你构造出两个长度分别为n和m的字符串s[1]和s[2] 然后按照连接的规则,顺序连接s ...

  9. Docker学习总结(12)——非常详细的 Docker 学习笔记

    一.Docker 简介 Docker 两个主要部件: Docker: 开源的容器虚拟化平台 Docker Hub: 用于分享.管理 Docker 容器的 Docker SaaS 平台 -- Docke ...

  10. Python学习第一天-编写登陆接口

    编写登陆接口 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 帐号文件user.txt内容如下: qaz 123qwe 12345qweqwr 12321424...... 锁文件user_l ...