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 (平坦编码 /半平坦编码)