首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >来自FFMPEG的实时流:输出一个窗口m3u8和一个全段m3u8。

来自FFMPEG的实时流:输出一个窗口m3u8和一个全段m3u8。
EN

Stack Overflow用户
提问于 2020-09-01 17:55:43
回答 1查看 910关注 0票数 4

我一直在试验如何使用FFMPEG来接收传入的RTMP流,将代码转换为一个选择的比特率,并将其输出为HLS。它起作用了。

我想把现场直播作为视频点播。当然,通过添加-hls_list_size 0标志可以发现,所有段都在.m3u8中。使它成为超级容易变成一个视频点播之后。到现在为止还好。

但是使用-hls_list_size 0的明显后果是,现在m3u8在实时流中是巨大的。这对于一个VOD来说很好,因为它只被要求一次,但是在一条不断被要求的实时流中,它就不太好了。

所以..。我的问题是:如果没有重新编码,FFMPEG能否同时输出一个全段all.m3u8 (为了在内部保留以便在使用-hls_list_size 0之后进行视频点播)也输出一个滑动窗口样式的latest.m3u8 (仅为最后的X段,即使用-hls_list_size 3)?

这样,实时流的查看者就可以作为一个小latest.m3u8作为一个小文件来服务,其中只有最后几个片段。活动结束后,我会放弃那个小latest.m3u8,只保留all.m3u8来制作流的VOD版本?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-05-19 10:56:17

这是我的两分钱。正如@Gyan在上面的评论中所建议的那样,我使用了tee命令。这只需要输入一次,如果我只做Live的话,系统的性能几乎保持不变。唯一的缺点是,它创建了许多段的副本,这些片段是在HLS片段中使用的。

代码语言:javascript
复制
ffmpeg -y \
  -hide_banner \
  -i $input_url \
  -preset veryfast -g 48 -sc_threshold 0 \
  -map 0:1 -map 0:2 -map 0:1 -map 0:2 -map 0:1 -map 0:2 \
  -filter:v:1 "scale=-2:360" -c:v:1 libx264 -b:v:1 365k \
  -filter:v:2 "scale=-2:480" -c:v:2 libx264 -b:v:2 1600k  \
  -c:v:4 copy \
  -f hls -hls_time 10 -hls_list_size 10 \
  -var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2" \
  -hls_segment_filename "$stream_key-v%v/%d.ts" \
  -f hls -f tee \
  "[var_stream_map=\'v:0,a:0 v:1,a:1 v:2,a:2 \': \
  master_pl_name=\'master-live.m3u8\': \
  hls_flags=delete_segments: \
  hls_list_size=60]$master-live%v/live.m3u8| \
   [var_stream_map=\'v:0,a:0 v:1,a:1 v:2,a:2\': \
   master_pl_name=\'master-record.m3u8\': \
   hls_playlist_type=vod]$master-record%v/record.m3u8"
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63693009

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档