android 音视频基础知识普及

推流端  采集 处理 编码 推流

服务端  转码 录制 截图 鉴黄

播放端  拉流 解码 渲染

互动系统 聊天 礼物 点赞

1fps = 1280*720*1.5bit =1382400bit = 172800byte = 172KB

1秒 = 30fps = 5160KB = 5M

1秒5m数据量就可以看了

H264 = 172K+30 P帧 = 500K

编码压缩数据空间,减少传输空间

H264 空间 时间  编码  视觉  4个冗余

NALU 网络提取层单元

sps 图片序列 pps 图片信息 I帧 帧内 P帧 前向 B帧 双向

GOP 两个I帧图像组 秒开原理

H264主流 H265 VP8 VP9

音频编码:sac ppm wav ogg

视频编码:fav ts avi等

推流协议:

rtmp 最广泛  cdn 简单 基础tcp 传输成本高

webrtc w3c 基于udp  cdn支持差

ump 定制化空间大 成本高 cdn 不友好

优化:保证音频传送 调整码率 fps 分辨率  减少数据

服务端: 转码 录制截图 点播 分发协议分发到客户端

拉流: rump http-flv hls

解码:编码逆过程 提取原始数据

渲染

交互: 聊天 礼物

常用工具:

推流 OBS Studio

播放端 cutv 测试工具

softe aac /h264bsanalyzer /flvparse /yuvplayer

直播sdk:

阿里云 腾讯云 金山云 ucloud 七牛云

rtmp 实时消息传输: tcp/ip 应用层协议  推送/直播  基本数据单元为消息

1B 消息类型  2B 长度  3B 时间 4B  流id 消息体

传输时 消息回被拆分成消息块 chunk chunk header + chunk data

flv: 大块音视频 加入标记头信息  延迟表现和大规模并发成熟

HLS:分成5-10s 用m3u8索引管理 用于朋友圈分享 

m3u8索引: 直播信号源--视频编码器(后台视频处理)--流切片器--各种ts媒体文件(分发模块)--索引文件(数据库)--客户端

cdn网络 为了解决用户访问资源慢出现的技术

边缘节点  二级节点(大城市) 源站

搭建流媒体服务:

准备流媒体服务器 linux max 编译安装nginx服务  配置rtmp服务并启动nginx服务

声音三要素:音调 音量 音色

音频量化(模数转换):模拟数据 采样  量化 编码  数字信号  == 0101001110

码率 = 采样率(1.6w/44.1/48k)x 采样大小(8位-电话/16位-常见) x 声道数(单/双)

音频压缩: 有损消除冗余数据  哈夫曼无损编码

音频编码: 时域转频域---心里声学模型---量化编码---比特流格式化---比特流

音频编解码 : opus(口 耳 实时互动 最快)  aac(直播用 次快)  speed(回音 降噪等)  g.711(固话)

aac : 取代mp3 加入 sir ps 技术 

aac lc 128k / aac he v2 64k /  aac he v2 32k/

aac 格式 : adif 从头开始解码,用在磁盘文件中  adts 每一帧都有一个同步字,可以在任何位置解码

aac 编码库 : libfdk_aac > ffmpeg aac >libfaac> libvo_aacenc

H264: I帧 关键 帧内压缩  / p帧 向前参考1帧 / B帧 双向参考帧

sps: 序列参数集/pps:图像参数集

GOF: 一组帧数  p帧丢失 会花屏卡顿

视频编码器: x264/x265 /open h264(svc)/vp8/vp9

h264 压缩技术-编码原理: 帧内预测压缩,空域冗余数据/帧间预测压缩,时域冗余数据/dcp整数离散余炫变换,傅立叶变换/cabac压缩

h264结构:视频序列--图像--片--宏块--子快

h264编码分层:nal 视频数据网络抽象层--vcl 视频数据编码层

码率:sodb 原始比特流 / rbsp sodb最后补1 / ebsp 起始码增加一个起始位0x03 /  nalu nal+ebsp

nal unit = nalu 头部 + 一个切片(头/数据) 切片

yuv格式:4:4:4/4:4:2/4:2:0 (平坦编码 /半平坦编码)

你可能感兴趣的:(android 音视频基础知识普及)