这是我参与「第四届青训营 」笔记创作活动的第3天。笔记内容包括课程4、5节。
数据存储&网络通信
网络通信
网络库开源框架
网络请求框架
Retrofit
对OKHttp的封装框架,现在Android最流行的网络请求框架
TTNET(字节内部)
将Retrofit底层的OkHTTP改成
数据存储
存储方式对比
Room数据库
使用
多媒体直播技术
视频的基本元素
RGB三原色 分辨率:手机大概在1080p到2k 码率/比特率:单位时间播放连续的媒体如压缩后的音视频的bit数量。bps。越高的比特率越需要更高的带宽来支撑,否则会卡顿。码率太低会模糊。 ffmpeg中降低码率的命令:(压缩视频) ffmpeg -i input.mp4 -b:v xx output.mp4 帧/帧率:Frame Rate ,FPS,刷新率。
视频数据的封装:封装格式,将已经编码压缩好的视频轨和音频轨按照一定的格式放到一个文件中。这个封装格式就是视频容器 视屏容器:MPG\VOB\FAV\MP4
轨道:视频轨道/流。 ffprobe xxx.mp4命令,可以看到视频的一些信息,如时长、比特率,视频流,音频流,字幕流,等等,还可能不止一个。 ffprobe -show_packets xxx.mp4命令,查看数据的packet,可以看到,各个流是交错排列摆放的。
视频压缩
假如视频没有压缩。。。
3840p * 2160p * 3 * 10bits * 24fps * 6240s = 4000GB!!
颜色空间YUV:亮度和色度。可以降采样,比RGB信号更利于压缩。
MP4比GIF图小?因为视频压缩了。
帧内压缩/空间压缩:压缩一帧图像时,仅考虑本帧的数据而不是相邻帧的荣誉信息。 帧间压缩/时间压缩:若视频前后两帧具有很大相关性,只记录有变化的位置的差值就可以知道后一帧。
I帧/P帧/B帧
视频点播:节省带宽,高压缩率,B帧 直播:低延迟:不用B帧 视频编辑:提高相应,个别会使用全I帧
视频编码格式
H264:AVC广泛普及
H265:HEVC 逐渐推广
266:VVC 未来可期
Google:VP9
Netflix:AV1
压缩比越高的编码算法需要越高的算力来支撑,不然会卡顿
直播推拉流协议
CDN: Content Delivery Network建立并覆盖在Internet上,由分布在不同区域的边缘节点服务器群组成的分布式网络。通过智能调度将用户请求到最接近用户的服务节点,降低用户访问延迟,提升可用性。
推流协议:实时消息协议RTMP。基于tcp,在ffmpeg中有TRMP库,低延迟。但已经停止更新了,没有支持H265,使用1935端口,在一些设备上会被防火墙阻碍。
拉流协议:HTTP-FLV Flash Video,是一种网络视频格式,协议有好,格式简单。 HTTP Live Streaming HLS,苹果公司。
客户端工作及总结
开播过程
图像采集:摄像头、屏幕、图像采集卡
图像处理:美颜、绿幕、头饰
看播过程