写在前面
本文将介绍以下内容:
- 什么是推流?将介绍推流常见的协议RTMP,HLS等。
- 怎么用ffmpeg做推流,包括cmd和code两种方式。
- 笔者在开发推流时遇到的一些坑点。
I. 推流简介
笔者最初听到“推流”时,内心想:“这是什么高端玩意儿?”,迫于项目压力,不得不顶着压力调研和开发。经过一段时间的学习、开发和总结,笔者终于明白了推流,到底是个什么高端玩意儿?
什么是推流?
在 科普 | 直播中常说的推流拉流究竟是什么东东?中说:
推流,指的是把采集阶段封包好的内容传输到服务器的过程。其实就是将现场的视频信号传到网络的过程。
用大白话讲,推流就是把本地音视频数据通过网络上传到云端/后台服务器,所谓“采集阶段封包好”,笔者认为是未解码的H264的NALU。
推流的整个阶段如下图,本图同样摘自 科普 | 直播中常说的推流拉流究竟是什么东东?(读者请先忽略“拉流”这个名词,姑且替换为客户端用户在视频门户网站,如腾讯视频、B站等看网络在线的视频,自然也包括看直播。):
上图从“推流端”到“源站”(同上文所说到的“服务器”),再到CDN分发节点,最后到“播放端”,整个过程的视音频数据,都是压缩的数据流。也就是说,对视频数据来说,就是H264码流。解码工作是在播放端进行的。
推流的工作可想而知,最多的应用就是直播;而在大多数视频门户网站,笔者目前也很疑惑,是否存在步骤1,从效率上来说,视频数据直接存放在“源站”,通过CDN根据客户端请求下发,应该就可以了。至于具体做法,有待考证,笔者在这里姑且记一笔吧。
了解