ffmpeg 之 hls

前言

  与其他博客不同,本文不是讲解HLS 协议本身,而是讲解在FFMPEG 中是如何解析HLS的,当然FFMPEG 也是按照HLS 协议去封装/解析 HLS 流的,因此读完本文不但能了解HLS 协议本身,还能看到HLS 是如何落地的。

1 综述

 HLS(Http Live Streaming )是有苹果公司基于HTTP 传输的协议,目的解决防火墙屏蔽问题,如RTMP 不是走HTTP,容易被防火墙阻难。我们首先来看一个简单的m3u8 文件:

#EXTM3U   //固定格式,首行开头必须是#EXTM3U
#EXT-X-VERSION:3  //HLS V3
#EXT-X-TARGETDURATION:10 //切片最大duration ,下面5段ts 最大duration 是10, 因此这里为10
#EXT-X-MEDIA-SEQUENCE:1  //第一个切片序列号
#EXTINF:9.640000,  //切片info 信息,下面紧跟切片
output1.ts   //ts 切片
#EXTINF:5.600000,
output2.ts
#EXTINF:10.000000,
output3.ts
#EXTINF:10.000000,
output4.ts
#EXTINF:3.040000,
output5.ts
#EXT-X-ENDLIST  //代表HLS 切片结束

工作原理其实也很简单,先下载M3U8 文件,然后根据M3U8文件中提供的ts url ,采用HTTP 去下载视频数据。因此HLS = m3u8 + http

2  使用FFMPEG 转换成HLS 切片

1)从常规文件转换HLS 切片:

./ffmpeg.exe -re -i input.mp4 -c copy -f hls -bsf:v h264_mp4toannexb output.m3u8  //会生成一个m3u8 文件 及N 个 ts 流 

2)通过start_number参数,设置第一片序列数

./ffmpeg.exe -re -i input.mp4 -c copy -f hls -bsf:v h264_mp4toannexb  -start_number 100 output.m3u8  //第一片切片序数将从100 开始

3)通过hls_time 参数设置切片的duration

./ffmpeg.exe -re -i input.mp4 -c copy -f hls -bsf:v h264_mp4toannexb -hls_time 10 output.m3u8  //生成的切片duration 维持在10s

 本文重点是分析HLS 在FFMPEG 中是如何实现的, 关于HLS 字段 & 使用FFMPEG 转HLS 参数 见下图。

问题:播放 http://127.0.0.1/streaming/output.m3u8  与播放 http://127.0.0.1/streaming/output1.ts 有何区别?

答: 通过上述两个url,我们可以得知前者是hls 协议,后者是http 协议。 对于后者通过ffmpeg 直接下载http 网络数据,然后去demux。 前者需在后者的基础上 通过m3u8文本解析出ts 流的url。 因此我们可以概述:相比与http 协议,hls 多了一个解析m3u8 文件的过程。  本文重点是在 hls.c 是如

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值