这是我参与「第四届青训营 」笔记创作活动的的第9天
一、前言
今天学习到的是Android 客户端专场 学习资料二】第四届字节跳动青训营中的Android的# 探索多媒体直播技术,根据学习资料中的内容,根据本节课的学习,了解掌握了视频基本元素,视频压缩,直播直播推拉流协议的基本原理;在掌握以上内容的同时,并完成了本节课的课后作业——使用Ffmpeg对视频的简单处理
课后作业Ffmpeg的使用与实践,实现效果如图所示:(使用ffmpeg指令处理视频)
核心代码与注释在文章中会有说明;
二、本节课知识点大纲:
1. 视频基本元素
2. 视频压缩
3. 直播推拉流协议
4. Ffmpeg处理视频
三、视频基本元素:
像素
是指在由一个数字序列表示的图像中的一个最小单位,称为像素,通常表现为一个小方格。每个像素有自己的颜色值,一般为RGB 三原色来表示
RGB 三原色
每种颜色都可用三个变量来表示-红色绿色以及蓝色的强度。记录及显示彩色图像时,RGB是最常见的一种方案
分辨率
指的是纵横方向的像素数量,一般表示为:宽高 (or 长宽),720*1080等
码率 / 比特率
表示单位时间内传送 bit 的数目,单位bps,表示是单位时间播放连续的媒体如压缩后的音视频的bit数量,也称为码流
Tips:越高的比特率,需要更高的带宽来支撑,否则会带来卡顿、成本等问题;太低的比特率,可能会导致视频画面过度压缩,模糊不清通过改变码率可以让视频文件在保持帧率、分辨率的情况下减少文件体积
帧 & 帧率*
帧(Frame)
理解帧就是视频或者动画中的每一张画面,而视频和动画特效就是由无数张画面组合而成,每一张画面都是一帧。
帧率 (Frame Rate)
每秒传输帧数通俗来讲就是指动画或视频的画面数、帧率。每秒钟帧数越多,所显示的动作就会越流畅。 FPS 也可以理解为我们常说的刷新率。当刷新率太低时我们肉眼都能感觉到屏幕的闪烁、不连贯
封装
对于任何一部视频来说,只有图像,没有声音,肯定是不行的。所以,视频编码后,加上音频编码,要一起进行封装。
视频压缩
视频播放的本质:将视频画面从封装文件中进行解码、渲染
帧内压缩 / 空间压缩
帧内(Intraframe)压缩也称为空间压缩(Spatial compression)。当压缩一帧图像时,仅考虑本帧的数据而不考虑相邻帧之间的冗余信息,这实际上与静态图像压缩类似,帧内一般采用有损压缩算法,达不到很高的压缩比。
帧间压缩 / 时间压缩
帧间压缩(Interframe compression)也称为时间压缩(Temporal_compression),是基于许多视频或动画的连续前后两帧具有很大的相关性(即连续的视频其相邻帧之间具有冗余信息)的特点来实现的,通过比较时间轴上不同帧之间的数据实施压缩,进一步提高压缩比.一般是无损压缩。
视频编码格式 H264 VS H265
H265 压缩比更高,需要更多的算力
H264 : AVC 更普及
H265 : HEVC 更小体积
四、直播推拉流协议
CDN:Content Delivery Network
建立并覆盖在Internet 之上,由分布在不同区域的边缘节点服务器群组成的分布式网络。通过智能调度将用户请求到最接近用户的服务节点,降低用户访问延迟,提升可用性。
推拉流协议
RTMP : Real-Time Messaging Protocol
HTTP-FLV:HTTP + FLV
HLS : HTTP Live Streaming
客户端工作
推流端
采集方式:摄像头、屏幕、图像采集卡等
图像处理的场景:美颜、绿幕、头饰
拉流端
五、Ffmpeg处理视频——课后作业
- 使用 ffmpeg 提取 mp4 文件中的视频数据并封装到新的 mp4 文件:
ffmpeg -i ASOUL.mp4 -vcodec copy -acodec copy ASOUL.mov
- 尝试使用 ffmpeg 提取 mp4 文件中的音频数据并封装到新的 mp3 文件:
ffmpeg -i ASOUL.mp4 -an -vcodec copy ASOUL.mp3
3.使用 ffprobe 查看一下题目 1.a 中提取出来的视频文件信息,看一下这个文件还是否有音轨?
ffprobe -show_packets ASOUL.mov
如上图所示:音频信息为:
Stream #0:1[0x2]: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
4.尝试将视频转换为gif:
将视频 MP4 转化为 GIF
ffmpeg -i ASOUL.mp4 ASOUL.gif
将视频中的一部分转换为GIF
// 从视频中第二秒开始,截取时长为3秒的片段转化为 gif
ffmpeg -t 3 -ss 00:00:02 -i ASOUL.mp4 ASOUL.gif
转化高质量 GIF
// 默认转化是中等质量模式,若要转化出高质量的 gif,可以修改比特率
ffmpeg -i ASOUL.mp4 -b 2048k ASOUL.gif
将 GIF 转化为 MP4
ffmpeg -f gif -i ASOUL.gif ASOUL.mp4
转换后的效果:
补充:对于还不没有安装配置Ffmpeg环境的小伙伴,可以参考一下我之前的文章:Android 探索多媒体直播技术-ffmpeg的安装与配置 | 青训营笔记
六、引用参考:
课外补充引用:
文章学习来源:
- 【Android 客户端专场 学习资料 二】第四届字节跳动青训营(第五节:探索多媒体直播技术)
感谢以上作者的文章,今天的学习收获满满!!Thanks and HappyCoding!