Android音视频开发之基础知识

一、视频文件

在这里插入图片描述

1、视频格式

常见格式:mp4、mkv、flv
封装的数据:音频码流、视频码流

常用工具: [FFmpeg下载]:https://ffmpeg.org/download.html
下载、安装并配置环境变量
ffmpeg.exe 视频编解码
ffplay.exe 播放器库
ffprobe.exe 音视频分析工具

2、视频播放—cmd命令

ffplay -i 视频文件目录

回车后开始播放视频
返回信息包含内部包含视频或者音频信息
默认播放Stream #0:0 视频或音频
例如下图:包含两条视频信息(显示Video),无音频信息
在这里插入图片描述
如果想播放第二条视频(Stream #0:1),可执行命令:

ffplay -i 视频目录 -vst 1

3、视频编码

视频就是连续的图像序列,不经过编码的连续图像数据数据量太大。
各种编码方式目的都是为了压缩,使体积更小,便于存储和传输,编码的核心思想就是去除冗余信息。

(1)空间冗余:图像内部相邻像素之间存在较强的相关性多造成的冗余
(2)时间冗余:视频图像序列中的不同帧之间的相关性所造成的冗余
(3)视觉冗余:人眼不能感知或者不敏感的那部分图像
(4)信息熵冗余:也称编码冗余,人们用于表达某一信息的比特数总比理论上表示该信息所需要的最少比特数要大,他们之间的差距就是信息熵冗余,或称编码冗余
熵编码例子:
11112222 8
4142 转换为4个1个2 4 省一半空间
(5)知识冗余:是指在有些图像中还包含与某些验证知识有关的信息

4、H.264码流分析

H.264码流文件分为两层
(1)VCL:视频编码层
负责高效的视频内容表示,VCL数据即编码处理的输出,表示被压缩编码后的视频数据序列。
(2)NAL:网络提取层
负责以网络所需求的恰当的方式对数据进行打包和传送,是传输层,不管在本地播放还是网络播放,都是需要这一层来传输。

VCL就是压缩编码后的原始数据。
VCL数据封装到NAL单元后,才可用于传输或存储
类比:VCL像JavaBean,NAL像Json序列化,经过包装后才能进行数据的传输

.h264文件
一般H.264编码器输出:起始码+NALU(NAL)单元
起始码为:0x00000001或者0x000001
起始码作用:区分每个单元的开头
起始码后面跟的第1个字节是NAL的Header信息,这个字节的低5位表示NALU类型。

5、片、宏块

一帧图片经过编码器之后,就被编码成一个或多个片,每片包含整数个宏块,NAL单元中就是装载着这些片的载体。

二、直播推流实践

1、图像采集

Camera
Camera2
CameraX
NDKCamera

步骤
(1)构建预览布局 SurfaceView或者TextureView,相当于画布来显示摄像头数据
(2)打开相机 Camera.open
(3)设置参数 Camera.Parameters
(4)设置预览数据回调 PreviewCallback
(5)设置预览画布并启动 setPreviewTexture/startPreview
(6)释放相机 stopPreview/release

2、YUV数据

YUV主要应用于优化彩色视频信号的传输,与RGB相比,YUV只需要占用极少的频宽,RGB则需要三个独立频道的信号同时传输。

YUV中Y代表明亮度,也称灰阶值,UV表示的则是色度(色调饱和度)也叫YCbCr
如果只有Y数据的图像就是黑色的,加上UV数据图像就显示成彩色的了。

编码使用YUV而不是RGB的原因:
使用YUV格式才能极大的去除冗余信息,人眼对亮点信息更敏感,对色度敏感度不高。也就是说,可以压缩UV数据,而人眼难以发现。所以压缩算法的第一步就是先把RGB数据转换为YUV数据,对Y少压缩一点,对UV压缩多一点,以平衡图像效果和压缩率

NV21与I420
YUV因为采样和数据排列方式的不同,分为不同的存储方式。

一般摄像头输出为NV21格式,而I420格式则是绝大多数编解码器默认输入输出格式。

NV21数据量的大小是widthheight3/2
NV21数据转I420数据:在这里插入图片描述

3、MediaCodec

可以访问Android底层的多媒体编解码器,例如:编码器/解码器组件

4、持续更新中…

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

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

相关文章

git(部分)

1、git三个区域:工作区,暂存区,版本库 2、git文件状态:未跟踪,已跟踪(新添加,未修改,已修改) 如何查看暂存区和工作区文件状态:git status -s 3、查看版本记…

mysql MVC jsp实现表分页

mysql是轻量级数据库 在三层架构中实现简单的分页 在数据库sql编程中需要编写sql语句 SELECT * FROM sys.student limit 5,5; limit x,y x是开始节点,y是开始节点后的需要显示的长度。 在jdbc编程中需要给出x和y 一般是页数*页码,显示的长度。 代…

【(数据结构)—— 基于单链表实现通讯录】

(数据结构)—— 基于单链表实现通讯录 一.通讯录的功能介绍1.基于单链表实现通讯录(1). 知识要求(2). 功能要求 二.通讯录的代码实现1.通讯录的底层结构(单链表)(1).思路展示(2).底层代码实现(单链表)1.单链表头文件 —— (函数的定义&#x…

【分类讨论】CF1747D

Problem - D - Codeforces 题意 思路 一看这个做法一定就是分类讨论 先判无解 显然,如果区间异或和不是0一定无解 如果区间内全是0,答案一定是0 之后怎么讨论 注意到需要讨论区间长度 如果长度是奇数,那么直接操作即可,答…

Top 10 数据恢复工具,可从iPhone 和 iPad 恢复数据

您是否正在寻找最好的 iPad 恢复软件,但不知道哪个选项最好?没有什么可担心的。本文将为您提供有关根据文件类型、设备兼容性和数据丢失原因等因素选择合适的 iPad 恢复软件的提示。此外,前 10 名提到的恢复软件是安全可靠的。 第 1 部分、iP…

ArmSoM-W3之RK3588硬编解码MPP环境配置

1. 简介 瑞芯微提供的媒体处理软件平台(Media Process Platform,简称 MPP)是适用于瑞芯微芯片系列的 通用媒体处理软件平台。该平台对应用软件屏蔽了芯片相关的复杂底层处理,其目的是为了屏蔽不 同芯片的差异,为使用者…

基于Java+Springboot+Vue前后端分离的商品库存销售管理系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 当今社会,…

Python--循环中的两大关键词 break 与 continue

在Python循环中,经常会遇到两个常见的关键词:break 与 continue break:代表终止整个循环结构 continue:代表中止当前本次循环,继续下一次循环 break: 英 /breɪk/ v. 打破,打碎&#xff0c…

看《软能力》的读后感

最近在图书大夏看了一本书的一部分,书名是《软能力》。本人看到了几个有意思的观点。一是接一些兼职项目。 二是分享自己的技术,让同事能干自己的工作,让自己的工作变得别人也能干,才有机会让自己的职位提升。 三是让手动操作变…

使用imx 8m 测试matter协议功能

参考网址: https://github.com/nxp-imx/meta-matter 请使用Ubuntu-20.04。18.04python版本太老 注意repo会出现此报错,可以无视: git checkout imx_matter_2023_q3 这一步在这个目录下操作 项目交流、学习、开发,欢迎私信。

【RNA biology】RNA的多功能性与早期生命进化

文章目录 RNARNA plays core functions in Central Dogma of BiologyrRNAsnRNA RNA worldReplication催化作用感知环境变化并作出响应 来自Manolis Kellis教授(MIT计算生物学主任)的课 油管链接:6.047/6.878 Lecture 7 - RNA folding, RNA wo…

TCP和UDP的原理及其区别(三次握手、四次挥手)

TCP和UDP都是在传输层上工作的协议,用于在网络中传输数据。 1、TCP和UDP之间的区别 TCP和UDP的主要区别在于它们提供的服务和特性。TCP提供可靠的、有序的、基于连接的数据传输,适用于对数据完整性和可靠性要求较高的应用(邮件、短信&#xf…

Java多线程编程

文章目录 Java多线程编程线程概念线程常用方法线程创建线程优先级终止线程等待线程线程状态线程安全synchronizedvolatilewait和notify方法ThreadLocal的使用标准库线程安全类 Java多线程编程 线程概念 线程概念: 一个线程就是一个 “执行流”. 每个线程之间都可…

Springboot-案例 增删改查二

准备 前端程序、后端工程(web/mybatis/mysql/lombok)、数据库 开发规范 GET:查询 POST:新增 PUT:修改 DELETE:删除 Result.java Data NoArgsConstructor AllArgsConstructor public class Result {pri…

偶数科技发布实时湖仓数据平台Skylab 5.3版本

近日, 偶数发布了最新的实时湖仓数据平台 Skylab 5.3 版本。Skylab包含七大产品,分别为云原生分布式数据库 OushuDB、数据分析与应用平台 Kepler、数据资产管理平台 Orbit、自动化机器学习平台 LittleBoy、数据工厂 Wasp、数据开发与调度平台 Flow、系统…

鸿蒙HarmonyOS应用开发:扫描仪文件扫描

华为鸿蒙HarmonyOS已经发展到4.0,使用ArkTS作为开发语言。这篇文章结合Dynamsoft Service开发一个简单的鸿蒙应用,用来获取办公室里连接PC的扫描仪(惠普,富士通,爱普生,等),把文档扫描到手机里。 准备工作…

DevExpress WPF Pivot Grid组件,可轻松实现多维数据分析!(二)

在上文中(点击这里回顾>>)我们主要为大家介绍了DevExpress WPF Pivot Grid组件的超快速枢轴分析功能、Microsoft分析服务等,本文将继续介绍图表透视数据的处理、MVVM支持等。欢迎持续关注我们,探索更多新功能哦~ P.S&#…

【异步爬虫】requests和aiohttp中代理IP的使用

前言 在进行爬虫开发时,我们常常需要使用代理IP来隐藏自己的真实IP地址,以避免被一些网站限制或封禁。requests和aiohttp是两个非常常用的工具,本文将分别介绍如何在它们中使用代理IP,希望可以帮助大家更好地进行异步爬虫开发。 …

电容屏物体识别手工制作

电容屏识别物体效果2 电容屏识别物体效果1 电容屏识别物体效果3 电容屏识别物体效果4 电容识别物理效果5 我们感兴趣的是找到让我们的平面屏幕与物理三维物体和表面交互的方法。 触摸屏无处不在,成千上万的应用程序中有多种设备和屏幕格式,但我们只找到…

STM32的hex文件格式的分析

前言 最近研究Bootloader,通过串口实现STM32程序的更新。需要学习了解STM32的Hex文件格式。在这进行一下总结。 HEX文件格式 我们通过文本形式打开hex文件,可以看到: 这一行就是一条指令数据,这里对数据帧格式进行说明&#xff…