Android音视频复习点

音视频

https://www.jianshu.com/p/ca4d8e3bbd69

播放https://zhuanlan.zhihu.com/p/54167734

基础

https://juejin.im/post/6844903555141238791#heading-21

视频

1、码率 视频文件在单位时间内使用的数据流量,也叫码率或码流率,通俗一点的理解就是取样率,是视频编码中画面质量控制中最重要的部分,一般我们用的单位是kb/s或者Mb/s 关系着带宽、文件体积

2、帧率 FPS(Frames Per Second)- - - 帧/秒 关系着画面流畅度和cpu消耗

3、分辨率 指视频成像产品所成图像的大小或尺寸 关系着图像尺寸和清晰度

音频

​ 1、声道数:声道数是音频传输的重要指标,现在主要有单声道和双声道之分。双声道又称为立体声,在硬件中要占两条线路,音质、音色好, 但立体声数字化后所占空间比单声道多一倍。

2、量化位数: 量化位是对模拟音频信号的幅度轴进行数字化,它决定了模拟信号数字化以后的动态范围。由于计算机按字节运算,一般的量化位数为 8位和16位。量化位越高,信号的动态范围越大,数字化后的音频信号就越可能接近原始信号,但所需要的存储空间也越大。

3、采样率:也称为采样速度或者采样频率,定义了每秒从连续信号中提取并组成离散信号的采样个数,它用赫兹(Hz)来表示。cd采样率44100hz dvd 采样率 48000hz

比特率(音频) = 采样率 x 采样位数 x 声道数

同步

1. 无法察觉:音频和视频的时间戳差值在:-100ms ~ +25ms 之间

2. 能够察觉:音频滞后了 100ms 以上,或者超前了 25ms 以上

3. 无法接受:音频滞后了 185ms 以上,或者超前了 90ms 以上

ijkplayer中的同步

https://juejin.im/post/6844903613005824014

https://www.jianshu.com/p/d31f01299847

普通的同步原理

https://blog.csdn.net/myvest/article/details/97416415

mp4

https://www.jianshu.com/p/529c3729f357

stss 关键帧stts 时间戳表

h.264

https://zhuanlan.zhihu.com/p/93398878

https://zhuanlan.zhihu.com/p/71928833

H264可以分为2层:视频编码层『VCL』和网络提取层『NAL

VCL 最后会被包装成NAL

宏块 16×16

帧内预测 各个方向的预测 8种预测方式(8个方向)

帧间预测 运动搜索 找同样的宏块运动路径 运动补偿

在 NALU 头里面,主要的内容是类型 NAL Type。0x07 表示 SPS,是序列参数集, 包括一个图像序列的所有信息,如图像尺寸、视频格式等。0x08 表示 PPS,是图像参数集,包括一个图像的所有分片的所有相关信息,包括图像类型、序列号等

逐行扫描 帧编码 适用于动态图像

隔行扫描 场编码 适用于非动态图像 I帧 = 奇数场 + 偶数场

YUV (YCbCr)

Y 亮度分量 U 蓝色分量 V 红色分量

H.265(hevc)

https://blog.csdn.net/weixin_42229404/article/details/84639538

目前的HEVC标准共有三种模式:Main、Main10和Main Still Picture。Main模式支持8bit色深(即红绿蓝三色各有256个色度,共1670万色),Main10模式支持10bit色深,将会用于超高清电视(UHDTV)上

1.帧内预测 33个方向

2.编码代码 树编码(四叉树) 宏块 8×8 16×16 32 ×32 64×64

3.可变量的尺寸转换(从4×4 到32×32)

10bit

10bit视频是指一种视频编码的特征,意思是每个颜色通道用10个bit来表达。这样,每个颜色通道的色彩级数从8bit的256级提高到了1024级

1.防止banding(色彩平滑过渡区域的色带,8bit编码技术可以通过一种称为dither(抖动)的方法,也就是在色块边缘混入细碎的相邻色的色点,来模糊色块边缘)产生2 提升暗场效果3.更好地容纳噪点

缺点 硬件的支持

MediaCodec

切换码率会花屏,因为要重新初始化一个新的MediaCodec实例,这时候会触发GPU重新生成一个dev node,在这个过程中不会平滑执行的,存在花屏的情况

ffmpeg

pts dts time_base nb_sample sample_rate https://www.cnblogs.com/ZY-Dream/p/10245464.html

av_read_frame会阻塞 通过 avformatcontext->interrupt_calllback 来防止阻塞

seek 针对无关键帧位置信息,通过码率猜一个位置,然后读到一个payload头,判断是继续向前还是向后查找

分析文件 (probesize analyzeduration 那个标准先达到,那就听谁的,停止probe)

probesize默认为5000000(5M) 最小是32字节 可设置为2048

analyzeduration 默认5s flv 90s mpeg 7s

直播

https://zhuanlan.zhihu.com/p/53038472

首开时间

1.申请资源的播放 URL 地址的时机优化

争取在用户点击播放之前拿到 URL

2. DNS 解析优化

提前完成 DNS 解析,并缓存结果

增加DNS缓存模块

注意事项:1.app启动时,缓存一部分提前配置的dns

​ 2.缓存的ip刷新问题 DNS 解析有一个 TTL 超时时间,到期前要记得重新解析刷新

​ 监测手机网络切换事件,比如:WiFi 切换到 4G 后,需要清空缓存

​ CDN 服务商会从 HTTP/RTMP 协议中的Host字段/tcUrl参数中 “提取” 的域名,所以需要改造播放器底层的 HTTP/RTMP 代码模块,提供设置字段的接口

3. 服务器的连接和数据传输速度优化

主要是服务器节点与播放器之间的网络传输优化

**4. 视频流的媒体信息解析优化 **

​ 主要是解析提取算法的优化

​ mp4的moov可能会处于头或者尾的位置。对于 moov 媒体信息在尾部的 mp4 文件,播放器读取一定数据后,如果判断 moov 在尾部,则可以暂停这个线程,同时启动第二线程通过 http range 字段读取尾部的 moov

针对ffmpeg的播放器

1.减小 probesize
2.减小 analyzeduration
3.预设码流的音视频格式

5. 解码和渲染策略优化

​ GOP 缓存,确保首帧为关键帧解码渲染

​ 服务器缓存一个Gop帧数据,首先下发

延时优化

https://zhuanlan.zhihu.com/p/54167734

1. 网络线路优化
- 选择优质的 CDN 加速服务,保障传输的网络带宽和线路资源
- 测速选线,动态监测,智能调度,确保每一路流的传输质量
2. 降缓冲区
- 生产端减小 GOP 大小,从而减少服务端 GOP 缓存的大小
- 生产端根据发送缓冲区情况,动态调整帧率、码率
- 播放端主动丢帧/追帧/倍数播放,加快缓冲区的消耗
3. 协议/传输优化
- Based on TCP -> Based on UDP,如:QUIC,RTP/RTCP
- 传输策略优化:前向纠错,丢包重传策略,拥塞控制优化,关键帧请求等
4. 处理性能优化
- 硬件编解码/美颜/渲染等处理
- 算法性能调优

OpenGL ES

纹理坐标系是二维坐标系,原点在左下角,s(x)轴向右,t(y)轴向上,x y 取值范围都是 [0, 1] strq

但由于计算机中图片都是 y 轴向下,所以实际上依然是原点在左上角,s(x)轴向右,t(y)轴向下

vector 坐标 是居中的十字坐标 x,y,z的取值范围都是 [-1,1] xyzw

  1. attribute 属性变量。只能用于顶点着色器中。 一般用该变量来表示一些顶点数据,如:顶点坐标、纹理坐标、颜色等
  2. uniforms 一致变量。在着色器执行期间一致变量的值是不变的。与const常量不同的是,这个值在编译时期是未知的是由着色器外部初始化的。
  3. varying 易变变量。是从顶点着色器传递到片元着色器的数据变量。

你可能感兴趣的:(Android音视频复习点)