You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将FLV直播流转换为HLS以在应用中播放?求实时转换工具

FLV直播流转HLS实时转换方案

嘿,这个需求我刚好在项目里实践过,给你梳理下具体的实现思路、工具选择和注意事项:

核心思路

其实你不用拆分“FLV转H264/AAC再转HLS”这两步——大部分专业工具可以直接完成实时转码+封装的全流程。如果你的FLV流本身已经是H264视频+AAC音频编码(这是直播流的主流编码),甚至可以直接做转封装(Remux),不用重新编码,性能和实时性会好很多。

推荐的实时转换工具

1. FFmpeg(最通用的命令行工具)

这是流媒体处理的瑞士军刀,几乎能搞定所有格式转换需求,实时转FLV到HLS完全没问题。

转码+封装(适用于FLV编码不是H264/AAC的情况)

ffmpeg -i rtmp://your-flv-stream-url \
  -c:v libx264 -preset ultrafast -crf 23 \
  -c:a aac -b:a 128k \
  -f hls -hls_time 2 -hls_list_size 10 \
  -hls_flags delete_segments+append_list \
  -hls_segment_filename "hls/segment_%03d.ts" \
  hls/output.m3u8

参数解释:

  • -preset ultrafast:最快的编码速度,优先保证实时性(画质会略有牺牲,可根据需求调整)
  • -hls_time 2:每个TS切片的时长(秒),越小延迟越低但切片数量越多
  • -hls_list_size 10:M3U8列表中保留的最新切片数
  • -hls_flags delete_segments+append_list:自动删除旧切片,同时在M3U8末尾追加新切片,适合直播场景

转封装(仅适用于FLV已为H264+AAC编码,性能最优)

如果你的源FLV流编码符合要求,直接拷贝编码格式,只换封装:

ffmpeg -i rtmp://your-flv-stream-url \
  -c copy -f hls \
  -hls_time 2 -hls_list_size 10 \
  -hls_flags delete_segments+append_list \
  hls/output.m3u8

这个方式几乎没有延迟,CPU占用极低,优先推荐。

2. SRS流媒体服务器(专为直播优化)

如果你的场景是高并发直播,FFmpeg单进程可能扛不住,推荐用SRS——这是一款轻量高性能的开源流媒体服务器,支持一键配置FLV/RTMP转HLS,还能处理流的分发、缓存等问题。

配置示例(在SRS的conf/hls.conf中):

listen              1935;
max_connections     1000;
vhost __defaultVhost__ {
    hls {
        enabled         on;
        hls_path        ./objs/nginx/html/hls;
        hls_fragment    2;
        hls_window      10;
    }
}

启动SRS后,把FLV流推到rtmp://your-srs-ip/live/stream,就能直接在http://your-srs-ip/hls/stream.m3u8拿到HLS流了,非常省心。

应用中播放HLS的注意事项

  • Web端:大部分现代浏览器原生不支持HLS(除了Safari),需要用hls.js库来兼容,直接引入后就能通过video标签播放M3U8链接。
  • 移动端:iOS的AVPlayer原生支持HLS;Android 7.0+原生支持,低于7.0的版本可以用ExoPlayer来播放。
  • 延迟控制:如果对延迟要求极高,可以把hls_time设为1秒,同时减少hls_list_size的数量,但要注意切片过多可能会增加客户端的加载压力。

内容的提问来源于stack exchange,提问作者fanjianrong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:23:53