本文参考:https://blog.csdn.net/leixiaohua1020/article/details/18893769

突然想学习Android音视频领域,所以在网上找博客看,遇见了上面这篇博客,通读了一遍,写的真好。又翻看了作者其它的博客,很厉害。

淡泊明志 宁静致远

虽然作者已经写的很好了,但我还是想参考作者的再写一遍,一来是关注点不一样,二来是由于我的学习方法——费曼学习法。

1.音视频基础知识
1.1 封装格式与视音频编码标准

我们会见到各种各样的视频格式,mp4,rmvb,mkv,avi等等许多格式,这些都被称为封装格式。封装格式就是就是把视频数据和音频数据打包成一个文件的规范,这很容易理解,对内容封装的格式。

封装格式封装了视频数据与音频数据,因为一部视频既要又画面也要有声音。当然,视频数据与音频数据也要有自己的编码格式。

视频编码的主要作用是将视频像素数据(RGB,YUV等)压缩成为视频码流,从而降低视频的数据量。如果视频不经过压缩编码的话,体积通常是非常大的,一部电影可能就要上百G的空间。视频编码是视音频技术中最重要的技术之一。视频码流的数据量占了视音频总数据量的绝大部分。高效率的视频编码在同等的码率下,可以获得更高的视频质量。

视频编码格式一览

名称 推出机构 推出时间 目前使用领域
HEVC(H.265) MPEG/ITU-T 2013 研发中
H.264 MPEG/ITU-T 2003 各个领域
MPEG4 MPEG 2001 不温不火
MPEG2 MPEG 1994 数字电视
VP9 Google 2013 研发中
VP8 Google 2008 不普及
VC-1 Microsoft Inc. 2006 微软平台

H.264只是一个编码标准,不是一个具体的编码器,H.264只是给编码器的实现提供参考,而其中性能最好的当属x264编码器。

这是它们编码效率的对比:HEVC > VP9 > H.264> VP8 > MPEG4 > H.263 > MPEG2

音频编码的主要作用是将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量。音频编码也是互联网视音频技术中一个重要的技术。但是一般情况下音频的数据量要远小于视频的数据量,因而即使使用稍微落后的音频编码标准,而导致音频数据量有所增加,也不会对视音频的总数据量产生太大的影响。高效率的音频编码在同等的码率下,可以获得更高的音质。

音频编码格式一览

名称 推出机构 推出时间 目前使用领域
AAC MPEG 1997 各个领域(新)
AC-3 Dolby Inc. 1992 电影
MP3 MPEG 1993 各个领域(旧)
WMA Microsoft Inc. 1999 微软平台

近年来并未推出全新的音频编码方案,可见音频编码技术已经基本可以满足人们的需要。音频编码技术近期绝大部分的改动都是在MP3的继任者——AAC的基础上完成的。

这是音频编码之间的比较:AAC+ > MP3PRO > AAC> RealAudio > WMA > MP3

下表是不同封装格式支持的视频编码与音频编码。

1.2视频播放器原理

对一个视频文件的构成了解之后,想必你大概可以猜出视频播放器播放视频的流程了。

视频播放器播放一个互联网上的视频文件,需要经过以下几个步骤:解协议,解封装,解码视音频,视音频同步。如果播放本地文件则不需要解协议,为以下几个步骤:解封装,解码视音频,视音频同步。他们的过程如图所示。

从图中可以看到,整个流程很简单,如同拆一个礼物盒子,一步一步来,总能见到东西。

解协议的作用,就是将流媒体协议的数据,解析为标准的相应的封装格式数据。视音频在网络上传播的时候,常常采用各种流媒体协议,例如HTTP,RTMP,或是MMS等等。这些协议在传输视音频数据的同时,也会传输一些信令数据。这些信令数据包括对播放的控制(播放,暂停,停止),或者对网络状态的描述等。解协议的过程中会去除掉信令数据而只保留视音频数据。例如,采用RTMP协议传输的数据,经过解协议操作后,输出FLV格式的数据。

解封装的作用,就是将输入的封装格式的数据,分离成为音频流压缩编码数据和视频流压缩编码数据。封装格式种类很多,例如MP4,MKV,RMVB,TS,FLV,AVI等等,它的作用就是将已经压缩编码的视频数据和音频数据按照一定的格式放到一起。例如,FLV格式的数据,经过解封装操作后,输出H.264编码的视频码流和AAC编码的音频码流。

解码的作用,就是将视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。音频的压缩编码标准包含AAC,MP3,AC-3等等,视频的压缩编码标准则包含H.264,MPEG2,VC-1等等。解码是整个系统中最重要也是最复杂的一个环节。通过解码,压缩编码的视频数据输出成为非压缩的颜色数据,例如YUV420P,RGB等等;压缩编码的音频数据输出成为非压缩的音频抽样数据,例如PCM数据。

视音频同步的作用,就是根据解封装模块处理过程中获取到的参数信息,同步解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。

1.3流视频,直播与点播

流媒体协议是服务器与客户端之间通信遵循的规定。

主要流媒体协议一览

名称 推出机构 传输层协议 客户端 使用领域
RTSP+RTP IETF TCP+UDP VLC, WMP IPTV
RTMP Adobe Inc. TCP Flash 互联网直播
RTMFP Adobe Inc. UDP Flash 互联网直播
MMS Microsoft Inc. TCP/UDP WMP 互联网直播+点播
HTTP WWW+IETF TCP Flash 互联网点播

直播平台参数对比

名称 协议 封装 视频编码 音频编码 播放器
CNTV 私有
华数TV RTMP FLV H.264 ACC Flash
六间房 RTMP FLV H.264 ACC Flash
中国教育电视台 RTMP FLV H.264 ACC Flash
北广传媒移动电视 RTMP FLV H.264 ACC Flash
上海IPTV RTSP+RTP TS H.264 MP2 机顶盒

直播服务普遍采用了RTMP作为流媒体协议,FLV作为封装格式,H.264作为视频编码格式,AAC作为音频编码格式。采用RTMP作为直播协议的好处在于其被Flash播放器支持。而Flash播放器如今已经安装在全球99%的电脑上,并且与浏览器结合的很好。因此这种流媒体直播平台可以实现“无插件直播”,极大的简化了客户端的操作。

点播平台参数对比
点播服务普遍采用了HTTP作为流媒体协议,H.264作为视频编码格式,AAC作为音频编码格式。采用HTTP作为点播协议有以下两点优势:一方面,HTTP是基于TCP协议的应用层协议,媒体传输过程中不会出现丢包等现象,从而保证了视频的质量;另一方面,HTTP被绝大部分的Web服务器支持,因而流媒体服务机构不必投资购买额外的流媒体服务器,从而节约了开支。点播服务采用的封装格式有多种:MP4,FLV,F4V等,它们之间的区别不是很大。视频编码标准和音频编码标准是H.264和AAC。这两种标准分别是当今实际应用中编码效率最高的视频标准和音频标准。视频播放器方面,无一例外的都使用了Flash播放器。

Android FFMPEG音视频开发(一)相关推荐

  1. Android FFmpeg 音视频开发教程

    LearnFFmpeg 项目地址:githubhaohao/LearnFFmpeg 简介: Android FFmpeg 音视频开发教程 更多:作者   提 Bug 标签: An Android FF ...

  2. FFmpeg音视频开发实战5 iOS/Android/windows/Linux -陈超-专题视频课程

    FFmpeg音视频开发实战5 iOS/Android/windows/Linux -159618人已学习 课程介绍          咨询QQ: 347181469. 本课程适合中,从事音视频,网络通 ...

  3. 视频教程-FFmpeg音视频开发实战6 iOS/Android/windows/Linux-其他

    FFmpeg音视频开发实战6 iOS/Android/windows/Linux 先后就职于德国BOSCH,iBabyLabs等企业担任架构设计师,主程, 精通嵌入式Linux,iOS,Android ...

  4. Android WebRTC 音视频开发总结(一)

    2014-03-03 13:51 by Blacker, 5464 阅读, 7 评论, 收藏, 编辑 接触Android WebRTC有一段时间了,现在将研究过程中的一些经验和知识总结出来,希望大家有 ...

  5. FFmpeg 音视频开发 20 年

    感谢小编邀请,让我写下 FFmpeg 20 年这么有历史厚重的话题. 写文章其实比录视频教程要求高很多,要字斟句酌,逻辑严密,理论知识严谨.由于个人文笔实在有限,长期以来,不敢随便写文章,更不敢出书, ...

  6. FastASR+FFmpeg(音视频开发+语音识别)

    想要更好的做一件事情,不仅仅需要知道如何使用,还应该知道一些基础的概念. 一.音视频处理基本梳理 1.多媒体文件的理解 1.1 结构分析 多媒体文件本质上可以理解为一个容器 容器里有很多流 每种流是由 ...

  7. Android 组件化架构概要,ffmpeg音视频开发实战陈超

    ChatModule ContactModule FindModule MeModule BaseModule 分别对应的是微信,联系人,发现,我和基类. 3.自定义Gradle 我们在Project ...

  8. Android 地图导航调用百度地图、高德地图、腾讯地图,ffmpeg音视频开发实战5

    switch (view.getId()) { - case R.id.tv_navigation: showMapList(); break; } } 2,弹窗 ================== ...

  9. FFMPEG音视频开发: 完成摄像头、桌面本地录制与rtmp推流(windows)

    一.基本介绍 该软件里推流和视频保存使用FFMPEG库完成,界面框架采用QT,视频和音频可以同步推流和录制,FFMPEG本身支持跨平台编译开发,QT也支持跨平台,在Android.Linux.wind ...

  10. 一线互联网互联网架构师自述:GitHub标星10w+,ffmpeg音视频开发实战6陈超

    1.技术实力:每个好架构师都是NB的程序员 总结:游泳教练,必定游泳水平好,因为这些都是实践性很强的工作.书上学来终觉浅,绝知此事要躬行. 这一点毋庸置疑,如果不是写过N年代码的优秀程序员,一定不是好 ...

最新文章

  1. Android四大基本组件和生命周期的介绍
  2. ajax.call失效无请求,移动端ajax请求问题?
  3. 调用Interop.zkemkeeper.dll无法使用解决方案
  4. 3 photolemur 样式下载_全自动照片美化软件Photolemur mac特别版
  5. java8安装_安装jenkins
  6. 云计算:大数据时代的系统工程
  7. Nginx禁止直接通过IP地址访问网站以及限制IP登陆某目录(关闭默认站点或空主机头)...
  8. 深度学习2.0-21.Keras高层API-compilefitEvaluatePredict
  9. 光伏电站运维管理系统
  10. mysql数据库编程第六章试题_2016年计算机二级MySQL数据库试题及答案
  11. 螳螂科技产研分享:做有生命力的SaaS产品架构
  12. android horizontalscrollview属性,Android中HorizontalScrollView使用方法详解
  13. OCR通用文字识别接口
  14. php随笔_PHP随笔 - 风清扬-深圳的个人页面 - OSCHINA - 中文开源技术交流社区
  15. SVN报错:can‘t open file db/txn-current-lock:permission denied 解决方法
  16. 新手搭建自己的网站(1)
  17. 洛谷P5633 最小度限制生成树 题解
  18. window_onload
  19. “bang” in JavaScript
  20. macos say批量将文本转换为语音

热门文章

  1. NVIDIA Forceware 260.89 Final 提升了多款游戏的性能
  2. python函数详细讲解_小白必看的Python函数讲解
  3. 索尼PS4破解之用户层代码执行(Part2)
  4. SQL Server - 无法将数据库从SINGLE_USER模式切换回MULTI_USER模式(Error 5064)
  5. java实现lbs_如何在 Java 中利用 redis 实现 LBS 服务
  6. 恶意代码分析实战_实验练习
  7. 初赛知识点汇总(阶段性完结
  8. 百胜也要做外卖?市场会重新回到三足鼎立吗
  9. D3.js 绘制地图
  10. 如何将已加好的脚注或尾注转换成中括号“[]”格式