Android音视频开发之基础知识

news2024/11/18 12:46:39

一、视频文件

在这里插入图片描述

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.coloradmin.cn/o/1112940.html

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

相关文章

【三:Spring整合Mybatis】

目录 Spring整合Mybatis(基于xml文件)1 、项目的大体框架前期准备1.2 、使用Navicat在数据库中创建一张表account1.3、 在pom.xml文件中加入maven(依赖的配置)1.4、配置相应的数据库连接,以及扫描相应的dao层 编写实体…

Unity中Shader实现UI流光效果

文章目录 前言一、实现思路1:1、采集两张贴图,一张是主纹理,一张是扫光纹理2、在 v2f 定义一个二维变量 “uv2” 来存放 uv 偏移后的值3、在顶点着色器中,仿照之前的 uv 流动效果,与 _Time相乘后存放于 uv2 中4、最后,…

微信小程序中封装请求,使用Async await方法,将异步请求变为同步请求方法

介绍 微信小程序中,很多 API都是异步的,无法同步处理。可以使用高级封装,通过async await方法来同步处理。 方法 在小程序右上角的 详情 里选择 本地设置 , 勾选 ES6转ES5,如下所示: 由于 Async Await 是 ES7语法&a…

Boost.Beast和C++编写程序

以下是一个使用Boost.Beast和C编写的爬虫程序&#xff0c;用于爬取。此程序使用了proxy的代码。 #include <iostream> #include <string> #include <boost/asio.hpp> #include <boost/beast.hpp> ​ std::string get_audio_url(const std::string&…

第十七章 Java连接数据库

1.打卡“命令提示符”&#xff0c;用管理员身份运行 2.登录MySQL 3.创建库和表 4.使用Java命令查询数据库操作 5.右击——点击“Build Path”——选择第四个——找到包的位置——导入成功 一、创建java项目 二、连接数据库 1.注册驱动 2.获取链接 3.获取statment对象 4.…

docker命令实例(举例子学习)

docker命令实例 实例1 docker build -t linksoul/chinese-llama2-chat .实例2 docker run --gpus all --ipchost --ulimit memlock-1 --ulimit stack67108864 --rm -it -v pwd/LinkSoul:/app/LinkSoul -p 7860:7860 linksoul/chinese-llama2-chat实例3 docker run -it -p 78…

QT串口接收数据并进行波形显示(含源码)

**使用QT在串口调试助手基础上实现波形显示&#xff08;含源码&#xff09; 评论比较多留言需要源码的&#xff0c;逐个发邮箱比较麻烦也不能及时回复&#xff0c;现将源码上传至链接&#xff08;无需积分下载&#xff09;https://download.csdn.net/download/m0_51294753/877…

Jupyter Notebook 设置黑色背景主题

Jupyter Notebook 设置黑色背景主题 # 包安装 pip install jupyterthemes -i https://mirrors.aliyun.com/pypi/simple pip install --upgrade jupyterthemes # 查看可用主题 jt -l # monokai暗背景&#xff0c;-f(字体) -fs(字体大小) -cellw(占屏比或宽度) -ofs(输出段的字…

自己DIY一个模拟多按钮电路

普通按键电路原理&#xff1a; 一般使用的按键原理图如下图所示&#xff0c;由按键、上拉电阻和消抖滤波电容组成。按键断开时KeyIin1处电压被上拉到5V&#xff0c;当按键闭合时把KeyIin1电压拉到0V&#xff0c;与按键并联的电容起到滤除按键按下与弹起时的高频信号。 如果在电…

让uniGUI支持https

今天在专家的帮助下&#xff0c;成功的让uniGUI支持https了。 首先&#xff0c;去申请个**的证书。我同事去阿里申请的&#xff0c;申请回是一个zip文件&#xff0c;里面有两个文件&#xff0c;一个扩展是per&#xff0c;一个key 然后&#xff0c;把这两个证书文件放到uniGUI…

【LeetCode】48. 旋转图像

1 问题 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8…

京东数据平台(京东数据分析)2023年9月京东冰箱行业品牌销售排行榜!

鲸参谋监测的京东平台9月份冰箱市场销售数据已出炉&#xff01; 9月份&#xff0c;大家电行业整体下滑&#xff0c;而冰箱作为大家电市场中的重点品类&#xff0c;受行业趋势变动的影响&#xff0c;冰箱销售市场也同样下滑。鲸参谋数据显示&#xff0c;9月在京东平台上&#xf…

浏览器下载打开java文件 出现一般异常错误提示你的安全设置已阻止自签名应用程序

环境&#xff1a; win10专业版 谷歌浏览器 问题描述&#xff1a; 浏览器下载打开java文件 提示你的安全设置已阻止自签名应用程序 解决方案&#xff1a; 1.打开控制&#xff0c;面板找到java 找到安全 &#xff0c; 将安全级别调至“中” 2.把例外站点也添加一下 3.重启…

总结关于计算机msvcp120.dll丢失的解决方法

在计算机的使用过程中&#xff0c;我们可能会遇到各种各样的问题&#xff0c;其中之一就是“msvcp120.dll文件丢失”。这是一个非常常见的问题&#xff0c;可能会影响到许多软件的正常运行。本文将详细介绍6种不同的解决方法&#xff0c;帮助大家解决这个问题。 首先&#xff…

No valid NAT64 prefix

As an AI language model, I do not have access to your network configuration or settings. However, in general, the error message “No valid NAT64 prefix” indicates that there is a problem with the configuration of IPv6 to IPv4 translation. NAT64 is a mech…

深度剖析数据在计算机内存中的存储

本章重点 1.计算机中数据类型详细介绍 2.整形在内存中的存储方式 3.大小端字节序介绍以及判断方法 1. 数据类型详细介绍 C语言中我们学习的内置类型数据有以下几种。 类型数据类型名称占用内存空间字节char 字符数据类型 1short 短整型 2int 整形 4long 长整型 4long long …

09 创建型模式-建造者模式

1.建造者模式介绍&#xff1a; 建造者模式 (builder pattern), 也被称为生成器模式 , 是一种创建型设计模式 定义: 将一个复杂对象的构建与表示分离&#xff0c;使得同样的构建过程可以创建不 同的表示。 2.建造者模式要解决的问题 建造者模式可以将部件和其组装过程分开&am…

SLAM从入门到精通(构建自己的slam包)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 我们学习了很多的开源包&#xff0c;比如hector、gmapping。但其实我们也可以自己编写一个slam包。这么做最大的好处&#xff0c;主要还是可以帮助…

【会议征稿通知】第三届大数据经济与数字化管理国际学术会议(BDEDM 2024)

2024 3rd International Conference on Big Data Economy and Digital Management 第三届大数据经济与数字化管理国际学术会议&#xff08;BDEDM 2024&#xff09; 第三届大数据经济与数字化管理国际学术会议&#xff08;BDEDM 2024&#xff09;将于2024年1月12-14日于宁波召…

分布式Trace:横跨几十个分布式组件的慢请求要如何排查?

目录 前言 一、问题的出现&#xff1f; 二、一体化架构中的慢请求排查如何做 三、分布式 Trace原理 四、如何来做分布式 Trace 前言 在分布式服务架构下&#xff0c;一个 Web 请求从网关流入&#xff0c;有可能会调用多个服务对请求进行处理&#xff0c;拿到最终结果。这个…