android 音视频基础知识--个人笔记

avi,mkv封装格式数据------》音频流,视频流//字母流(国外会分开)

----〉解封装,解复用打开封装格式

-----》视频压缩数据---压缩H264,H265 -------〉视频解码

        ----》原始数据YUV

-----〉音频压缩数据---》AAC〉Mp3等等-------》音频解码(很耗时)

        ---〉获得原始数据PCM

-------------------音视频同步--------------------

喇叭---声道----音频重新采样(转变设备支持的声道。如双声道转单声道)

屏幕--- Android屏幕/ios屏幕 使用的SDL引擎,使用RGBA

                -----》YUV转成RGBA

-----------为什么要编码

视频是连续的图片序列,一帧就是一个图。不做编码一个电影,视频就会非常大。

---》去除冗余信息

        -----〉空间冗余,图像相邻的像素之间的

        -----〉时间冗余,不同帧之间的差值

        ----->视觉冗余,人不明感的信息,但是亮度是不能去除的,例如深红,浅红

        ------》信息熵冗余---哈夫曼算法

        -------〉知识冗余,指图片包含的基本信息。

I帧,P帧,B帧?

  1. I帧(Intra-frame):I帧是关键帧或者说帧间无参考帧,它是视频序列中的一个完整帧,不依赖于其他帧的信息,可以独立地被解码和显示。通常情况下,视频解码器在解码I帧时不需要引用其他帧的信息。I帧通常在视频序列的起始位置以及场景发生剧烈变化的地方出现,因为它们提供了一种重要的标记点,让解码器重新开始解码或者重新定位。由于I帧不依赖于其他帧,因此它们通常需要更多的数据来表示图像的细节,所以文件大小相对较大。

  2. P帧(Predictive frame):P帧是预测帧,它依赖于之前的I帧或者P帧来进行预测和编码。P帧只存储与之前帧中变化的部分,而不存储整个图像,这样可以有效地减少文件大小。P帧可以看作是对前一帧的变化部分的补充,它通过运动估计来预测图像的运动,然后只编码图像中发生变化的部分。

  3. B帧(Bi-directional predicted frame):B帧是双向预测帧,它不仅依赖于之前的I帧或者P帧,还可以依赖于之前和之后的帧。B帧通过比较前后两个参考帧的内容来编码图像中的变化部分,因此可以实现更高的压缩比。B帧通常在视频序列中出现在P帧之后,用于捕捉运动的更细微的变化。

总的来说,I帧是视频序列的关键帧,P帧是依赖于之前帧的预测帧,而B帧是双向预测帧,可以同时依赖于之前和之后的帧。这些不同类型的帧在视频编码中共同作用,以实现有效的压缩和传输。

H264!

H.264,也称为AVC(Advanced Video Coding),是一种视频压缩标准,用于压缩、编码和传输视频内容。它是由国际电信联盟(ITU-T)和国际标准化组织(ISO/IEC)共同制定的标准。H.264旨在提供更高的压缩效率,以便在相同的带宽下传输更高质量的视频,或者在相同质量下减少传输带宽。

在H.264标准中,帧类型的概念也存在,其中包括I帧(关键帧)、P帧(预测帧)和B帧(双向预测帧),这些帧类型的概念在前面的回答中已经解释过了。

H.264标准采用了多种高级压缩技术,包括运动估计、帧内和帧间预测、变换编码、熵编码等。这些技术的结合使得H.264能够在保持较高视频质量的同时,显著减少数据流量。因此,H.264是一种广泛应用于数字视频压缩的编码标准,例如在视频会议、广播、数字电视、视频存储等领域都有着广泛的应用。

一个去除其实码后的第一位header数据是什么意思

举例:如 00 00 00 01 67

0x67---转为二进制 0110011

第一组 0,1---代表这个帧不可用,0代码这个帧可以用。

第二组 1 1 -----代表这个帧很重要

第三组 0 0 1 1 1 ----- 16进制查表 , =7 表示SPS

                ----》UAL表,自己百度一下吧

-----〉》〉》 0x01 表示普通和重要的 P帧 和 B帧

,基本上不会去分析P帧和B帧

真实的开发之中 最重要的是SPS和I帧

PTS和DTS是什么呢?

在视频编解码中,PTS(Presentation Time Stamp)和DTS(Decoding Time Stamp)是两个重要的时间戳,用于控制视频帧的展示顺序和解码顺序。

  1. PTS(Presentation Time Stamp):PTS表示视频帧应该被显示的时间。它指示了在播放时每个视频帧应该被呈现给用户的时间点。PTS告诉解码器在何时展示图像,以确保视频帧按照正确的顺序显示,并且在正确的时间显示。PTS通常是以时间单位(如毫秒)表示的。

  2. DTS(Decoding Time Stamp):DTS表示视频帧应该被解码的时间。它指示了解码器在何时应该解码特定的视频帧。DTS用于确保视频帧在解码时按正确的顺序进行解码,以便在呈现时能够按正确的顺序显示。与PTS不同,DTS不受解码器的缓冲处理或播放速率的影响。它是解码器根据数据包接收顺序而确定的时间戳。

在正常情况下,视频帧的PTS和DTS是相同的,因为视频通常以恒定的帧率进行编码和解码。然而,在一些特殊情况下,例如视频流中出现了重排序或者编辑操作,PTS和DTS可能会出现不同步的情况。在这种情况下,播放器会根据PTS来决定视频帧的呈现顺序,以确保视频的正常播放。

相关推荐

  1. android 视频基础知识--个人笔记

    2024-04-03 17:06:03       38 阅读
  2. 视频编码基础知识

    2024-04-03 17:06:03       66 阅读
  3. 视频笔记

    2024-04-03 17:06:03       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-03 17:06:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-03 17:06:03       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-03 17:06:03       82 阅读
  4. Python语言-面向对象

    2024-04-03 17:06:03       91 阅读

热门阅读

  1. Chrome安装Vue插件vue-devtools

    2024-04-03 17:06:03       44 阅读
  2. postcss安装和使用

    2024-04-03 17:06:03       36 阅读
  3. Chatgpt润色论文

    2024-04-03 17:06:03       41 阅读
  4. Dubbo 3.x源码(18)—Dubbo服务引用源码(1)

    2024-04-03 17:06:03       38 阅读
  5. 顺序排序与蛮力法模式匹配算法

    2024-04-03 17:06:03       39 阅读
  6. A+B Problem

    2024-04-03 17:06:03       32 阅读
  7. OpenEuler虚拟机配置网络连接

    2024-04-03 17:06:03       38 阅读