当前位置: 首页 > news >正文

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

相关文章:

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

avi,mkv封装格式数据------》音频流,视频流//字母流(国外会分开) ----〉解封装,解复用打开封装格式 -----》视频压缩数据---压缩H264,H265 -------〉视频解码 ----》原始数据YUV -----〉音频压缩数据---…...

信息工程大学第五届超越杯程序设计竞赛(同步赛)题解

比赛传送门 博客园传送门 c 模板框架 #pragma GCC optimize(3,"Ofast","inline") #include<bits/stdc.h> #define rep(i,a,b) for (int ia;i<b;i) #define per(i,a,b) for (int ia;i>b;--i) #define se second #define fi first #define e…...

Python:文件读写

一、TXT文件读写 Python中用open()函数来读写文本文件&#xff0c;返回文件对象&#xff0c;以下是函数语法。 open(<name>, <mode>, <buffering>&#xff0c;<encoding)name&#xff1a;文件名。 mode&#xff1a;打开文件模式。 buffering&#xff1a;设…...

10.windows ubuntu 组装软件:spades,megahit

Spades 是一种用于组装测序数据的软件&#xff0c;特别适用于处理 Illumina 测序平台产生的数据。它的全称是 "St. Petersburg genome assembler"&#xff0c;是一款广泛使用的基因组组装工具。 第一种&#xff1a;wget https://cab.spbu.ru/files/release3.15.3/S…...

K8S之Secret的介绍和使用

Secret Secret的介绍Secret的使用通过环境变量引入Secret通过volume挂载Secret Secret的介绍 Secret是一种保护敏感数据的资源对象。例如&#xff1a;密码、token、秘钥等&#xff0c;而不需要把这些敏感数据暴露到镜像或者Pod Spec中。Secret可以以Volume或者环境变量的方式使…...

git下载安装教程

git下载地址 有一个镜像的网站可以提供下载&#xff1a; https://registry.npmmirror.com/binary.html?pathgit-for-windows/图太多不截了哈哈&#xff0c;一直next即可。...

《剑指 Offer》专项突破版 - 面试题 98、99 和 100 : 和动态规划相关的矩阵路径问题(C++ 实现)

目录 前言 面试题 98 : 路径的数目 面试题 99 : 最小路径之和 面试题 100 : 三角形中最小路径之和 前言 矩阵路径是一类常见的可以用动态规划来解决的问题。这类问题通常输入的是一个二维的格子&#xff0c;一个机器人按照一定的规则从格子的某个位置走到另一个位置&#…...

KY145 EXCEL排序(用Java实现)

描述 Excel可以对一组纪录按任意指定列排序。现请你编写程序实现类似功能。 对每个测试用例&#xff0c;首先输出1行“Case i:”&#xff0c;其中 i 是测试用例的编号&#xff08;从1开始&#xff09;。随后在 N 行中输出按要求排序后的结果&#xff0c;即&#xff1a;当 C…...

属性选择器

1.[title]{background:yellow;}&#xff1a;所有带title标签设置成黄色 2.div[class]{background:yellow;}&#xff1a;所有div中带class标签设置成黄色 3.div[classbox1]{border:1px solid blue; }&#xff1a;div中包含class并且classbox1的设置成蓝边框 4. class…...

软考 - 系统架构设计师 - 关系模型的完整性规则

前言 关系模型的完整性规则是一组用于确保关系数据库中数据的完整性和一致性的规则。这些规则定义了在关系数据库中如何存储、更新和查询数据&#xff0c;以保证数据的准确性和一致性。 详情 关系模型的完整性规则主要包括以下三类&#xff1a; 实体完整性规则 这是确保每个…...

写了几个难一点的sql

写了几个难一点的sql SELECT bn.id AS book_node_id, t.version_id, bn.textbook_id, s.id AS subject_id, s.stage_id, COUNT( CASE WHEN d.document_type_id 1 AND d.scope IS NULL AND p.document_id IS NOT NULL THEN 1 END ) AS type_1_count, COUNT( CASEWHEN d.docume…...

【JDK常用的API】包装类

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …...

Android Q(10)黑暗模式适配的实现

一、引言 随着 AndroidQ&#xff08;10&#xff09;的发布&#xff0c;黑暗模式成为了系统级别的特性。为了满足用户在不同环境下的使用需求&#xff0c;应用程序需要及时进行黑暗模式的适配。本文将详细介绍如何在 AndroidQ&#xff08;10&#xff09;上实现黑暗模式的适配&a…...

【git】git使用手册

目录 一 初始化 1.1 账号配置 1.2 ssh生成 1.2.1 配置ssh 1.2.2 测试SSH 1.3 初始化本地仓库并关联远程仓库 二 使用 2.1 上传 2.2 拉取 三 问题 3.1 关联失败 一 初始化 git的安装很简单,下载后大部分进行下一步完成即可----->地址: git工具下载 1.1 账号配置…...

unity中判断方向 用 KeyVertical ,KeyHorizontal 判断ui物体的 方向

float KeyVertical Input.GetAxis("Vertical"); float KeyHorizontal Input.GetAxis("Horizontal"); // 假设 UI 物体在竖直方向上为 Y 轴&#xff0c;水平方向上为 X 轴 Vector2 direction new Vector2(KeyHorizontal, KeyVertical); if (direction…...

前端a4纸尺寸转像素尺寸

前端必备工具推荐网站(免费图床、API和ChatAI等实用工具): http://luckycola.com.cn/ 一、a4纸张有多大 A4纸的尺寸是210mm297mm,也就是21.0cm29.7cm, A4纸尺寸转屏幕像素尺寸和屏幕分辨率有关,首先1英寸2.54cm, 如果屏幕DPI分辨率为72像素/英寸&#xff0c;换算一下&#xff…...

Android 中 调试和减少内存错误

Android 中 调试和减少内存错误 ASan 概述 官网连接&#xff1a; https://developer.android.com/ndk/guides/asan?hlzh-cn ASan API 27开始HWASan&#xff08;替换AScan&#xff09; 从 NDK r21 和 Android 10&#xff08;API 级别 29&#xff09;开始适用于 64 位 Arm 设…...

证券市场概述

证券市场 证券市场参与者证券发行市场&#xff08;一级市场&#xff09;证券发行方式&#xff08;按发行对象&#xff09;证券发行方式&#xff08;按有无中介&#xff09;证券交易市场&#xff08;二级市场&#xff09;证券交易所场外交易市场&#xff08;店头市场、柜台市场&…...

什么是数据结构

一、什么是数据结构 1.数据结构研究计算机数据间的关系 2.包括数据的逻辑结构和储存结构及其操作 数据的逻辑结构&#xff1a;表示数据运算之间的抽象关系 按每个元素可能具有的直接前趋数和后继数将逻辑结构分为“线性结构”和“非线性结构”两大类 数据的储存结构&#…...

基于springboot+vue实现的学校田径运动会管理系统

作者主页&#xff1a;Java码库 主营内容&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】&#xff1a;Java 【框架】&#xff1a;spring…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略

本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装&#xff1b;只需暴露 19530&#xff08;gRPC&#xff09;与 9091&#xff08;HTTP/WebUI&#xff09;两个端口&#xff0c;即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析

Linux 内存管理实战精讲&#xff1a;核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用&#xff0c;还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...