前言
首先,我们来回顾一下直播的整个链路(详见 音视频知识体系(基础篇1)----媒体格式)。我们最常接触到的是直播的播放器端,例如,斗鱼、虎牙、快手、抖音里面的直播。我们又称播放器为收流端,技术上可以看作为流媒体数据的接收显示器。
在直播中,FLV格式流数据接收仍旧是主流,那我们这篇文章就来看下如何下载和处理FLV格式的流媒体数据。

1. 准备工作
要先看如何获取一段flv的流。我们使用ffmpeg工具
ffmpeg -i rtmp://server/live/streamName -c copy out.flv
-i : 指定文件
-c : 指定为音视频
out.flv 下载下来的流
如果需要加header验证 加入参数 -headers $’Referer: http://trovo.live/app'
2. Flv格式分析
FLV视频格式是Adobe推出的Flash可直接播放的视频流。需要注意的概念是编码格式和文件封装格式。编码格式是指编码器输出的“裸”的视频流或音频流,常见的视频编码格式就是H.264,常见的音频编码格式是AAC和MP3。FLV是一种文件封装格式,它可以封装H264和AAC,其他常见的文件封装格式还有MP4、TS、MKV等等。不同的文件封装格式可以相互转换,只要把一种文件封装格式拆包,解出“裸”的视频流和音频流,再按另一种文件封装格式打包,就可以完成转换,不需要重新编码,因此速度非常快。
FLV的文件格式定义最权威的就是Adobe的官方文档
https://www.adobe.com/content/dam/acom/en/devnet/flv/video_file_format_spec_v10.pdf
总体上看,FLV包括文件头(File Header)和文件体(File Body)两部分,其中文件体由一系列的Tag组成。因此一个FLV文件是如图1结构。

其中,每个Tag前面还包含了Previous Tag Size字段,表示前面一个Tag的大小。Tag的类型可以是视频、音频和Script,每个Tag只能包含以上三种类型的数据中的一种。图2展示了FLV文件的详细结构。

2.1 Header分析

----待续
3. 参考
[1] 多媒体文件格式(二):FLV 格式
[2] FLV视频文件格式分析(廖雪峰)
[3] https://blog.csdn.net/leixiaohua1020/article/details/17934487
网友评论