学习目标:

SPS分析与读取

图中的标识为哥伦布编码的,均需要通过哥伦布编码解析实际值。


学习内容:

首先肯定得截个sps数据的图来看分析了。

上图红框内就是sps数据了。67是sps标识,不清楚的小伙伴可以阅读下面的博客
Android音视频视频基础(H264)
接下来我们把数据都一对一的转成二进制,这里就不全部写下来了。

十六进制 二进制
67 0110 0111
64 0110 0100
00 0000 0000
15 0001 0101
AC 1010 1100
D9 1101 1001
41 0100 0001
70 0111 0000
C6 1100 0110

首先,我们可以看到帧标识670110 0111,读过我之前的基础篇的同学应该知道,这里的8个比特位不全部用来标识sps,只有其中的5位才会被用来做标识位,那其他三位呢?看下图

接下来看下面一位640110 0100,这一位表示编码等级(profile_idc)
profile_idc: 编码等级 有以下取值

Options: 解释
66 Baseline(直播)
77 Main(一般场景,默认的编码等级)
88 Extended
100 High (FRExt)
110 High 10 (FRExt)
122 High 4:2:2 (FRExt)
144 High 4:4:4 (FRExt)

接下来看下面一位000000 0000,这一位表示约束标志,注意:当constraint_set0_flag,constraint_set1_flag或constraint_set2_flag中不只一个值为1的话,那么码流必须满足所有相应指明的profile约束。

接下来就是150001 0101,他是每帧最大支持码流范围(level_idc)。标识当前码流的Level,编码的Level定义了某种条件下的最大视频分辨率、最大视频帧率等参数,码流所遵从的level由level_idc指定。

Options
10 1 (supports only QCIF format and below with 380160 samples/sec)
11 1.1 (CIF and below. 768000 samples/sec)
12 1.2 (CIF and below. 1536000 samples/sec)
13 1.3 (CIF and below. 3041280 samples/sec)
20 2 (CIF and below. 3041280 samples/sec)
21 2.1 (Supports HHR formats. Enables Interlace support. 5 068 800 samples/sec)
22 2.2 (Supports SD/4CIF formats. Enables Interlace support. 5184000 samples/sec)
30 3 (Supports SD/4CIF formats. Enables Interlace support. 10368000 samples/sec)
31 3.1 (Supports 720p HD format. Enables Interlace support. 27648000 samples/sec)
32 3.2 (Supports SXGA format. Enables Interlace support. 55296000 samples/sec)
40 4 (Supports 2Kx1K format. Enables Interlace support. 62914560 samples/sec)
41 4.1 (Supports 2Kx1K format. Enables Interlace support. 62914560 samples/sec)
42 4.2 (Supports 2Kx1K format. Frame coding only. 125829120 samples/sec)
50 5 (Supports 3672x1536 format. Frame coding only. 150994944 samples/sec)
51 5.1 (Supports 4096x2304 format. Frame coding only. 251658240 samples/sec)

接下来就是AC1010 1100,如下图

chroma_format_idc 的值应该在 0到 3的范围内(包括 0和 3)。当 chroma_format_idc不存在时,应推断其值为 1(4:2:0的色度格式)。

bit_depth_luma_minus8 :

  • 0 : High 只支持8bit
  • 1 : High10 才支持10bit

接下来就是D94170C6,如下图

追加内容

哥伦布编码
哥伦布编码的规则是从左到右编码,1为墙,墙左边的0的个数即是你的数据的比特位个数,你的数据在墙右边。

0阶无符号指数哥伦布编码过程
假如我们待编码的数字codeNum = 4,0阶无符号指数哥伦布编码的步骤如下:

  1. 将codeNum+1,4+1=5
  2. 将加1后的数字用二进制表示,5的二进制位101,1后缀=101,后缀位01,长度2
  3. 前缀与后缀长度相同,在前面加上2个0

所以结果为00101
再来一些例子:

codeNum codeNum+1 codeNum+1的二进制 需补前缀0的个数 编码后的比特串(红色表示补的前缀0)
0 1 1 0 1
1 2 10 1(0) 010
2 3 11 1(0) 011
3 4 100 2(00) 00100
4 5 101 2(00) 00101
5 6 110 2(00) 00110
6 7 111 2(00) 00111

0阶无符号指数哥伦布编码解析过程

  1. 找到第一个不为0的bit,并记录总共找到了0的个数(num),这个时候读到的这个bit肯定是1
  2. 然后读num个后缀
  3. 1后缀转变成十进制就是原来的codeNum,codeNum = (1 << num) + 后缀(十进制) - 1;

比如二进制为:00111,首先找到第一个不为0的比特1,前面0的个数为2,然后再读2个后缀11,11十进制为3,这个时候codeNum = (1 << 2) + 3 - 1 = 4 + 3 - 1 = 6

k阶无符号指数哥伦布编码过程

  1. 将codeNum加上2^k

  2. 将加上2^k的数字用二进制表示

  3. 计算二进制的长度len,然后再前面加上len-1-k个0

假如我们待编码的数字codeNum = 4,k阶无符号指数哥伦布编码的步骤如下(加入这里 k=1):

  1. 4 + 2^1,4+2=6(110)
  2. len -1 - k = 3 - 1 - 1 = 1
  3. 在前面加上1个0,所以结果为 0110

再来一些例子:

codeNum k=1 len-1-k 编码后比特串 k=2 len-1-k 编码后比特串
1 1+2^1=3(11) 2-1-1=0 11 1+2^2=5(101) 3-1-2=0 101
2 2+2^1=4(100) 3-1-1=1 0100 2+2^2=6(110) 3-1-2=0 110
3 3+2^1=5(101) 3-1-1=1 0101 3+2^2=7(111) 3-1-2=0 111
4 4+2^1=6(110) 3-1-1=1 0110 4+2^2=8(1000) 4-1-2=1 01000

Android音视频视频基础(H264)二 SPS分析相关推荐

  1. 音视频开发基础(二)常用的直播协议

    如今网络的发展已经从1G,2G,3G,4G逐渐过渡到5G,5G网络的出现,音视频的使用就变得越来越广.从以前的泛娱乐过渡到了更深次的领域,比如在线教育,在线会议-然而,要想有完美的视屏体验,还是要从很 ...

  2. Android近场通信---NFC基础(二)(转)

    转自 http://blog.csdn.net/think_soft/article/details/8171256 应用程序如何调度NFC标签 当标签调度系统完成对NFC标签和它的标识信息封装的In ...

  3. 基于Android的计步器(Pedometer)的讲解(二)——柱状图分析2

    早上第二大节有课,所以没有来得及仔细看这个例子,中午回来将这个例子写完了,现在柱状图有两个实现的方式了,一个是之前博客提到的,一个就是现在这个. 这个柱状图也实现了动态的增长,和点击显示相应柱状图的数 ...

  4. Android音视频【一】H264编码基础

    人间观察 岁月催人,时间过的太快了 音视频编码解码就是指通过特定的压缩/解压技术,将某个音视频格式的数据转换为另一种音视频格式数据.目前在Android中的音视频用的最多的就是H264+aac的方式进 ...

  5. Android音视频视频基础(H264)

    学习目标: Android音视频 H265和H264官方文档下载 视频分析软件,记得下载,下文分析的视频软件就靠它了 码流查看器 ffmpeg 提取视频命令:ffmpeg.exe -i input1. ...

  6. 【Android 音视频开发-音视频硬解码篇】1.音视频基础知识

    这是一个入门系列,涉及的知识也仅限于够用. 最后,写文章过程中,会借鉴参考其他人分享的文章,会在文章最后列出,感谢这些作者的分享. 本文你可以了解到 作为开篇的文章,我们先来看看音视频由什么构成的,以 ...

  7. 音视频开发总结之二Android平台相关

    一. 音视频采集流程 串联整个音视频录制流程,完成音视频的采集.编码.封包成 mp4 输出. 通过摄像头和麦克风获得实时的音视频数据: 播放流程: 获取流->解码->播放. 录制播放路程: ...

  8. Android音视频开发基础(六):学习MediaCodec API,完成视频H.264的解码

    前言 在Android音视频开发中,网上知识点过于零碎,自学起来难度非常大,不过音视频大牛Jhuster提出了<Android 音视频从入门到提高 - 任务列表>.本文是Android音视 ...

  9. Android音视频学习系列(六) — 掌握视频基础知识并使用OpenGL ES 2.0渲染YUV数据

    系列文章 Android音视频学习系列(一) - JNI从入门到精通 Android音视频学习系列(二) - 交叉编译动态库.静态库的入门 Android音视频学习系列(三) - Shell脚本入门 ...

最新文章

  1. vue 可合并表格组件_merge-table
  2. rediscluster全局数据_设计数据密集型应用(6-7):分片、事务
  3. linux内核内存管理的三个阶段分析
  4. ★ 科幻分离式手机 富士通F-04B详细图解 ★
  5. 论文阅读|How Does Batch Normalization Help Optimization
  6. oracle 修改表
  7. Excel的vlookup函数的用法
  8. JSON学习笔记(二)- 对象
  9. node --- 使用node连接mysql
  10. Visual Entity 手册(十一)代码生成设置
  11. numpy中数组的简单运算以及使用
  12. 【Es】Es 选主流程
  13. php 去掉后导字符,PHP去除字符串最后一个字符的三种方法实例
  14. 多线程中redistemplate不执行_在 Flink 算子中使用多线程如何保证不丢数据?
  15. Win10右键新建中没有新建文件夹,电脑右键新建文件夹不见了
  16. FM信号测试软件,音频测试方案:音频FM指标测试方法
  17. 免费SSL证书的制作
  18. 修复40G的老IDE硬盘
  19. cholesky分解java代码,实数矩阵Cholesky分解算法的C++实现
  20. [游戏杂谈]浅谈游戏打击感

热门文章

  1. 扑克牌(ArrayList)
  2. 电脑开不了机的原因和解决办法
  3. xmind 文件 打开后会在当前目录生成 configuration,p2和workspace目录,artifacts.xml文件 解决
  4. iOS 联系在线客服功能
  5. 基于java+jsp+mysql教师教学质量测评系统
  6. 手机app视频平台开发怎么做
  7. 存放在电脑中的文件丢失了怎么恢复
  8. 【Excel】乱序不同行数的两列数据对比匹配
  9. python数据分析与可视化
  10. 结对项目之需求分析与原型设计(选择和分配本科毕设导师)