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来决定视频帧的呈现顺序,以确保视频的正常播放。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/781173.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp-打包IOS的APP流程

打包前所需配置 在manifest文件内配置 1. APP图标 2. 启动界面 有三种启动界面配置 第一种是 HBuilderX 官方给的通用启动界面,页面单一,屏幕中间就一个圆框图标 第二种是自定义的启动图,无法通过AppStore的审核 第三种是自定义storyboard启动…

论文研读:Transformers Make Strong Encoders for Medical Image Segmentation

论文:TransUNet:Transformers Make Strong Encoders for Medical Image Segmentation 目录 Abstract Introduction Related Works 各种研究试图将自注意机制集成到CNN中。 Transformer Method Transformer as Encoder 图像序列化 Patch Embed…

实现一个栈数据结构

实现一个栈数据结构 实现一个栈数据结构是一个基础但重要的编程任务。栈是一种后进先出(LIFO)的数据结构,它允许我们在一端添加或删除元素。在栈中,最后添加的元素总是最先被删除,这类似于一堆盘子:新盘子…

特殊数据类型

目录 记录类型 定义一个记录类型 myrecord_type,用于存储 emp 数据表中的员工姓名和职务 %TYPE 类型 定义一个变量,存储数据表 emp 中编号为 7369 的员工姓名,并且显示出结果 %ROWTYPE 类型 声明一个用于存储 emp 数据表中每行记录的变…

【力扣每日一题】2908. 元素和最小的山形三元组 I

LC2908. 元素和最小的山形三元组 I 给你一个下标从 0 开始的整数数组 nums 。 如果下标三元组 (i, j, k) 满足下述全部条件&#xff0c;则认为它是一个 山形三元组 &#xff1a; i < j < k nums[i] < nums[j] 且 nums[k] < nums[j] 请你找出 nums 中 元素和最小…

【力扣hot100】160.相交链表

相交链表 给你两个单链表的头节点 headA和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结构中不存在环。 注意&#xff0c;函数返回…

hibernate映射文件详解

hibernate映射文件 映射文件在.hbm.xml文件中编写 <?xml version"1.0" encoding"UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hiberna…

牛客练习赛123 A~C

A.炸鸡块哥哥的粉丝题 输出字符串的前 ⌈ n 2 ⌉ \lceil \frac{n}{2} \rceil ⌈2n​⌉ 个字符 void solve() {int n;string s;cin >> n >> s;cout << s.substr(0, (n 1) / 2); }B.智乃想考一道鸽巢原理 当小球总个数为奇数时&#xff0c;贪心的留下 1 个…

天梯算法Day3整理

浮点数解析 炸鱼题掠过 冲突值 题面 解析 方法一 —— 并查集 按照边值排序&#xff0c;然后按边值从大到小遍历&#xff0c;通过并查集判断能否将所有点无冲突地归于两个集合。在判断时&#xff0c;若有两个点不得不产生冲突&#xff0c;则输出这两个点之间的边值并结束。…

LeetCode Python - 81. 搜索旋转排序数组 II

目录 题目描述解法运行结果 题目描述 已知存在一个按非降序排列的整数数组 nums &#xff0c;数组中的值不必互不相同。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转 &#xff0c;使数组变为 […

<商务世界>《第28课 商务旅行的注意事项》

1 选择人气旺的酒店 酒店找一个旺气的地方。1是干净、整洁是最重要的。2是在选择酒店的时候尽量选择闹市&#xff0c;人口要集中的地方&#xff0c;这样入住率有保证&#xff0c;人多气场旺不至于发生一些灵异事件。而且人少屋多&#xff0c;也会让我们没有安全感。 2 避免无…

关于AllOriginSubtypes和AllDestinationSubtypes拓扑检查官方文档有误导

目录 1.问题描述&#xff1a; 2.有问题的代码&#xff1a; 3.修改能正确执行的代码 &#xff1a; 1.问题描述&#xff1a; 当两个要素类参与拓扑时&#xff0c;官方有一段代码&#xff0c;将拓扑规则加到拓扑中 ITopologyRule.AllOriginSubtypes Property Indicates if al…

好用还平价的挂耳式耳机有哪些?五款超平价品牌测评推荐

在数字化时代&#xff0c;耳机已经成为我们日常生活中不可或缺的一部分。而开放式耳机作为一种新兴趋势&#xff0c;以其独有的开放性设计和卓越的音质表现&#xff0c;正在悄然改变着人们的听音习惯。不同于传统的耳机产品&#xff0c;开放式耳机让音乐与外界环境相得益彰&…

【GSAP】ScrollTrigger插件的注意事项 | 用的好,非常流畅。用的不好,卡到爆炸的前端动画库

问题描述 调用gsap插件的ScrollTrigger的batch方法时 &#xff0c;有以下2种情况之一要进行垃圾回收处理&#xff0c;若不做处理会导致页面超级卡顿。 在动画运行完毕&#xff0c;不再使用动画时元素被删除时 例子 给当前动画一个id&#xff0c;是因为后期不用此动画时&…

软件测试工程师介绍

引言 在快速发展的软件行业中&#xff0c;软件测试工程师扮演着至关重要的角色。他们不仅是质量保证的第一道防线&#xff0c;也是确保软件产品满足用户需求、无缺陷地运行的关键。随着软件开发过程日益复杂和迭代速度的加快&#xff0c;软件测试工程师的工作变得更加重要但也…

我暂停了我的博士学位,尝试了一些不同的东西,然后带着一个新的视角回来了

警报在我耳边响起。静音后&#xff0c;我躺在床上&#xff0c;盯着天花板又看了30分钟。我继续攻读博士学位的动力正在减弱&#xff0c;这使得我越来越难以站起来&#xff0c;面对每一个新的疲惫的日子。我意识到&#xff0c;在我的计划剩下的 2 年里继续奋斗将冒着完全倦怠和崩…

简述如何系统地学习Python

随着人工智能、大数据和云计算等技术的快速发展&#xff0c;编程已经成为了当今社会中不可或缺的一项技能。Python作为一种高级编程语言&#xff0c;因其简洁明了的语法、强大的功能和广泛的应用领域&#xff0c;成为了许多初学者和专业人士的首选。那么&#xff0c;如何系统地…

微前端的使用和注意事项 - qiankun

一、为什么使用微前端 微前端架构旨在解决单体应用在一个相对长的时间跨度下&#xff0c;由于参与的人员、团队的增多、变迁&#xff0c;从一个普通应用演变成一个巨石应用(Frontend Monolith)后&#xff0c;随之而来的应用不可维护的问题。微前端的核心目标是将巨石应用拆解成…

4.C#对接微信Native支付(调用支付下单生成二维码接口)

在完成了前边几篇文章的操作后&#xff0c;我们接下来需要写实际的业务接口。调用微信的native下单接口。 手先看下官网的api文档&#xff0c;https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter3_4_1.shtml 大概的流程是&#xff1a;商户后台系统先调用微信支付的Nativ…

Bun - NodeJS的替代

什么是Bun Bun 是采用 Zig 语言编写的高性能 “全家桶” JavaScript 运行时。Bun 提供了打包、转译、安装和运行 JavaScript & TypeScript 项目的功能&#xff0c;内置原生打包器 (native bundler)、转译器、task runner、npm 客户端&#xff0c;以及 fetch、WebSocket等 …