HLS #
HLS工作原理如下:
- 切片(Segmentation): 媒体流被分割成一系列小的、独立的文件片段。
- 播放列表(Playlist): 一个包含有关媒体流信息的索引文件,指导客户端播放这些片段。播放列表通常是一个.m3u8文件。
- HTTP传输: 片段和播放列表通过HTTP协议传输到客户端。
- 自适应比特率: HLS支持多个版本的相同内容以不同的比特率进行编码,使客户端能够根据网络条件自动选择合适的版本。
ffmpeg for hls #
常规文件转hls直播: #
ffmpeg -re -i input.mp4 -c copy -f hls -bsf:v h264_mp4toannexb output.m3u8
-bsf:v h264_mp4toannexb会将mp4中的H.264数据转换为H.264 AnnexB标准的编码,AnnexB标准的编码更常见于实时的传输流中。如果源文件为FLV,TS等可作为直播传输流的视频,则不需要这个参数。
start_number设置第一片的序列数 #
ffmpeg -re -i input.mp4 -c copy -f hls -bsf:v h264_mp4toannexb -start_number 300 output.m3u8
hls_time设置切片的duration #
控制转码切片长度为10秒左右一片,该规则会从关键帧处开始切片,所以时间并不会均匀。
ffmpeg -re -i input.mp4 -c copy -f hls -bsf:v h264_mp4toannexb -hls_time 10 output.m3u8
hls_list_size设置切片的个数 #
ffmpeg -re -i input.mp4 -c copy -f hls -bsf:v h264_mp4toannexb -hls_list_size 3 output.m3u8
hls_base_url设置前置基本路径 #
m3u8列表中的切片文件默认与m3u8的路径相同,通过这个参数可以设置TS切片存储的路径。
ffmpeg -re -i input.mp4 -c copy -f hls -bsf:v h264_mp4toannexb \
-hls_base_url http://192.18.0.1/live/ output.m3u8
hls_segment_filename设置TS切片文件名模板 #
-hls_segment_filename test_output-%d.ts
delete_segments删除不在m3u8列表中的旧文件 #
ffmpeg -re -i input.mp4 -c copy -f hls \
-hls_flags delete_segments -hls_list_size 4 \
-bsf:v h264_mp4toannexb output.m3u8
split_by_time #
使用split_by_time参数,会根据hls_time设定的时间进行切片,并不考虑关键帧,这么做有可能会影响首画面体验,例如花屏或首画而显示慢等问题。
ffmpeg -re -i input.mp4 -c copy -f hls -bsf:v h264_mp4toannexb \
-hls_time 10 -hls_flags split_by_time output.m3u8